Lucene的索引文件格式
Lucene的索引里面存了些什么,如果存放的,也即Lucene的索引文件格式是读懂Lucene源代码的一把钥匙。
当我们真正进入到Lucene源代码之中的时候,我们会发现:
Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。
Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。
Lucene的索引结构是有层次结构的:
主要分以下几个层次:
1.索引(Index)
Lucene中一个索引是放在一个文件家中的,如上图,同一个文件夹中的所有文件构成一个Lucene索引
2.段(Segment)
一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。
如上图,具有相同前缀文件的属同一个段,图*两个段"_0"和"_1"。
segments.gen 和 segments_5是段的元数据文件,也即它们保存了段的属性信息。
3.文档(Document)
文档是我们建索引的基本单位,不同的文档是保存在不同的段中的,一个段可以包含多篇文档。
新添加的文档是单独保存在一个新生成的段中,随着段的合并不同的文档合并到同一段中。
4.域(Field):
一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者等,都可以保存在不同的域里。
不同域的索引方式可以不同
词(Term):
词是索引的最小单位,是经过词法分析和语言处理后的字符串。
Lucene的索引结构中,既包含了正向信息,也保存了反向信息。