深入lucene--文件格式(基本概念)
索引过程:将倒排序的表写成文件格式的过程
搜索过程:读出索引信息,然后计算每篇文章的搜索权重过程
Lucene的索引结构层次如下:
索引(index)
Lucene中一个索引是放在一个文件夹下的。
Lucene的文件夹下的所有文件构成一个索引。
段(segment)
一个索引可以包含多个段,段与段之间是独立的,添加文档可以生成新的段,不同的段可以合并。
在生成索引的过程中,相同的段有相同的前缀,例如 _0和_1就是两个不同的段。
segments.gen和segments_5是段的元数据文件,保存了段的属性和信息。
文档(Document)
文档是建立索引的基本单位,不同的文档时是保存在不同的段中,一个段可以包含多篇文档。
新添加的文档是单独保存在一个新生成的段中,随着段的合并,不同的文档合并到同一个段中。
域(Field)
一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者等,都可以保存在不同的域里。
不同的域索引方式不一样,主要是针对不同数据类型的数据压缩算法不一样。
词(Term)
词是索引的最小单位,是经过词法分析和语言处理后的字符串。
ps:Lucene索引既保存了正向信息,也保存了反向信息。
正向信息:索引(Index)->段(segement)->文档(Document)->域(Field)->词(Term)
- 上图的文件segment_N保存了此索引包含多少个段,每个段包含多少篇文档。
- 前缀.fnm保存了此段包含了多少个域,每个域的名称及索引方式。
- 前缀.fdx,前缀.fdt保存了此段包含的所有文档,每篇文档包含了多少域,每个域保存了哪些信息。
- 前缀.tvx,前缀.tvd,前缀.tvf保存了此段包含多少文档,每篇文档包含了多少个域,每个域包含了多少个词,每个词的字符串,位置等信息。
反向信息:保存了词典到倒排序表的映射:词(Term)->文档(Document)
包含反向信息的文件有:
- 前缀.tis,前缀.tii保存了词典(Term Dictionary),也即此段包含的所有词按字典的顺序排序。
- 前缀.frq保存了倒排表,也及包含每个词的文档ID列表。
- 前缀.prx保存了倒排表中每个词在包含此词的文档中的位置。
pdf p28
(1)条评论 订阅
Lucene的文件夹下的所有文件构成一个索引。