谈谈lucene倒排索引的存储方式(一)
lucene的倒排索引存储包括词的索引数据存储、词的位置存储以及写入过程,这3个部分是比较复杂的准备分开描述,先谈谈位置的存储方式: 词的位置具体包括每篇文档中的词频、位置以及附带的payload(这里先忽略掉norm信息的存储),这3块lucene分别采用了3个输出流进行写入,具体写入过程如下: 1、对于每个词而言会记录该次所属的文档ID以及在该文档中的词频,由于文档ID已经排过序所以写入时会进行差值压缩存储,而文档词频会直接存储,并且每128条记录进行分块压缩存储; 2、令Doc=abc|123;bcd;def,每写完所属文档ID以及词频,就会写入该词在文档中的每个位置(指文档经过分词后的第n个词(分号为词的分隔符 def为第3个词 ))、起始和结束的偏移量( 指文档未分词时的开始和结束位置(bcd的开始和结束位置分别为8和11),通过偏移量可以算出词、payload以及payload分隔符的总长度,所以这个长度不要认为是词的长度和payload的长度(123为payload,对于abc的开始和结束位置分别为0和7) )、每个词附带的payload信息。由于位置信息、偏移量已经排过序所以会按照差值压缩存储。位置信息会按照128条记录分块压缩存储到单独的文件中