上面分析了数据写入的代码逻辑,我们现在来看下倒排数据保存在内存中是什么样的
在索引过程中数据会将term分词的长度、将文档号(doc ID),词频(freq)和位置(prox)信息都存储在bytePool中,其中文档号docID和freqs写到一个块中,而位置信息prox会写到另一个块中,块存储有不同的级别,不同的级别长度和分隔符不同。intPool保存了bytePool中保存的docID、freqs和位置信息的偏移量,所以每个分词在intPool中都会使用两个int保存两个偏移量,第0个表示docid + freq在bytePool中的写入位置偏移量,第1个表示prox在bytePool中的写入位置偏移量。
我们以写入一下数据为例分析一下如何记录这些信息
document.add(new TextField("desc", "common common common common common term", Field.Store.YES));
document1.add(new TextField("desc", "common common common common common term term", Field.Store.YES));
document2.add(new TextField("desc", "term term term common common common common common", Field.Store.YES