Lucene初探之索引文件格式

Posted Derrick_gu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene初探之索引文件格式相关的知识,希望对你有一定的参考价值。

Lucene初探之索引文件格式

了解Lucene的索引文件存储方式,是深入学习了解Lucene的第一步。只有了解索引的存储方式,才能在看最终的内部实现源码时不会一脸懵逼。我们可以根据Lucene的工作流程将对Lucene索引文件的操作分为两个部分:

  • Lucene的索引过程:创建索引并将最终形成的索引倒排表写入索引文件中;
  • Lucene的搜索过程:按照一定的规则将索引文件中的内容读出并打分;

其实也就是将对索引文件的操作分为读写两个过程。
下面我们举一个Lucene索引生成的文件目录来详细地讲解Lucene索引文件的存储规则。

Lucene的索引文件结构分为好几个层次,借助这种特殊的层次结构来达到快速查找和节省存储空间的目的:

  • 索引
    • 在lucene中一个索引是放在一个文件目录下的;
    • 上图中的所有文件构成一个索引;

    • 一个索引可以有许多的段,各个段之间是相互独立的,添加新的文档则会生成新的段,可以合并不同的段;
    • 以上图为例,前缀相同的文件都是一个段里面的;
    • 段的元数据信息保存在segment前缀的文件中,上图的元数据文件为segments.gen和segments_5两个文件;
  • 文档
    • 建立索引的时候,最小的文件单位是document,也就是文档。不同额文档存放在不同的段文件中,可以把多个文档同时存放到一个段中;
    • 新添加的文件单独保存在一个新生成的段中;当段之间相互合并时,其段下面的对应的文档也会随之合并到一起;

    • 域是对文档的更加详细的拆分,可以理解为数据库中的字段,而文档则是一条条记录;
    • 不同的域索引方式可以不同,比如有的域是一大段的文字,那么对这个域的索引就应该进行分词,而有的只是记录时间或者一个id字符串,这种就不需要分词器进行分词;

    • 词是域的进一步细分,不同的文档在创建索引的过程中都会进行词法和语法转换,最终形成的词就会存放到这里。

我们知道,Lucene的索引结构,其最终是要形成“词—->文档”的格式,也就是反向映射的关系,这样我们才能够快速地找到匹配出的词集合所对应的文档信息和存储位置。术语来说,就是除了像上面一样正向地保存文档的信息,最后也会要保存词的反向信息。
正向信息就是以上面的叙述那般,可以以“索引–段–文档–域–词”一级一级地找出对应的包含关系。而反向信息则是这样的:
- 保存词到倒排表的映射:词–>文档;
- 这个映射关系在Lucene索引文件中是单独保存在tis、tii、frq、prx四种类型的文件中;
- tis和tii文件保存了词典,也就是包含所属段的所有的词按照字典顺序的排序;
- frq文件保存了每个词的文档ID列表,也就是倒排表;
- prx保存了倒排表中每个词在包含此词的文档中的所处位置;
上面就是Lucene的文档格式和不同格式的文档中所保存的信息的简单介绍,下一篇我们将了解Lucene的文件中存储的基本类型和相应的存储规则。

以上是关于Lucene初探之索引文件格式的主要内容,如果未能解决你的问题,请参考以下文章

Lucene初探之索引文件格式

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情(-)