拜读刘超觉先的Lucene学习笔记Lucene学习总结之三:Lucene的索引文件格式(1)、Lucene的索引文件格式(2)、Lucene的索引文件格式(3),受益良多,但是由于文章年代久远,Lucene以迭代的面目全非,这里依照原作者的思路和框架,对现在的最新版Lucene进行一些浅显的学习,并记录于此。
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。
原作者的文章目录:
---索引---
一、基本概念
1.1 索引(Index)
1.2 段(Segment)
1.3 文档(Document)
1.4 域(field)
1.5 词(term)
1.6 正向信息
1.7 反向信息
1.8 名称和扩展名总结
二、基本概念
2.1 Byte
2.2 UInt32
2.3 UInt64
2.4 VInt
2.5 Chars
2.6 String
三、基本规则
3.1 前缀后缀规则(Prefix+Suffix)
3.2 差值规则(Delta)
3.3 或然跟随规则(A, B?)
3.4 跳跃表规则(Skip list)
四、具体格式
4.1 正向信息
4.1.1 段的元数据信息(segments_N)
4.1.2 域(Field)的元数据信息(.fnm)
4.1.3 域(Field)的数据信息(.fdt,.fdx)
4.1.4 词向量(Term Vector)的数据信息(.tvx,.tvd,.tvf)
4.2 反向信息
4.2.1 词典(.tis)及词典索引(.tii)信息
4.2.2 文档号及词频(.frq)信息
4.2.3 词位置(.prx)信息
4.3 其他信息
4.3.1 标准化因子文件(.nrm)
4.3.2 删除文档文件(.del)
五、总体结构
当我们真正进入到Lucene源码之中的时候,我们会发现:
Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。
Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。
首先打开Apache Lucene 7.3.0的文档页面:
http://lucene.apache.org/core/7_3_0/index.html
参考文档列表中有以下文档供我们查阅:
File | Description |
---|---|
Changes | List of changes in this release. |
System Requirements | Minimum and supported Java versions. |
Migration Guide | What changed in Lucene 7; how to migrate code from Lucene 6.x. |
JRE Version Migration | Information about upgrading between major JRE versions. |
File Formats | Guide to the supported index format used by Lucene. This can be customized by using an alternate codec. |
Search and Scoring in Lucene | Introduction to how Lucene scores documents. |
Classic Scoring Formula | Formula of Lucene's classic Vector Spaceimplementation. |
Classic QueryParser Syntax | Overview of the Classic QueryParser's syntax and features. |