前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >构造IndexSearcher源码解析

构造IndexSearcher源码解析

原创
作者头像
LuceneReader
修改2019-12-11 18:33:32
8970
修改2019-12-11 18:33:32
举报
文章被收录于专栏:solr lucene源码解析

1. 示例代码

代码语言:txt
复制
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
reader.close();

2. 构造IndexSearcher详细流程

代码语言:javascript
复制
IndexReader reader = DirectoryReader.open(dir);

该方法中创建FindSegmentsFile<DirectoryReader>对象,并且调用run方法

2.1 FindSegmentsFile.run方法流程

代码语言:javascript
复制
1. 第一次获取索引目录中的索引文件列表files
2. 再一次获取索引目录中的索引文件列表files2
3. 如果files和files2排序后,两者不完全相同,则从第一步重新执行,否则执行到第4步
4. 获取IndexWriter最近一次commit的gen值,如果返回的gen=-1, 说明索引目录中没有任何索引段文件,抛出异常
5. 通过上一步返回的gen值,生成最近commit生成的segments_N文件名,处理该文件,返回DirectoryReader

2.2 解析最新segments_N文件的流程

代码语言:javascript
复制
1. 打开segments_N文件的输入流,读取头部并且校验头部的各个字段值
2. 读取luceneVersion值,并且校验版本的兼容规则
3. 读取indexCreatedVersionMajor的值
4. 生成SegmentInfos对象,并且根据segments_N文件中读取的段的个数依次通过读取si文件生成每一个段
   相关的SegmentCommitInfo
5. 读取每一个段相关的文件,生成SegmentReader对象,返回StandardDirectoryReader对象

3. segments_N文件格式

segments_N文件格式
segments_N文件格式

字段说明:

1. luceneVersion 该值描述了当前运行的lucene的版本

2. indexCreatedVersionMajor 该字段描述的是创建该segments_N文件时的lucene的版本,在读取阶段,索引文件可能被不同的版本的lucene读取,该值用来判断兼容性

3. Version 该值描述的是SegmentInfo对象发生更改的次数

4. counter 该值用来给新的SegmentInfo对象提供名字的前缀值

5. segmentCount 该值描述了当前有效索引段的个数

6. minSegmentLuceneVersion 索引目录中的生成si文件的lucene版本各不相同,该值记录版本最小的

7. SegmentCommitInfo 总共有segmentCount个该值

8. userData 该值可以通过IndexWriter.setLiveCommitData在commit时记录用户自定义数据

SegmentCommitInfo各个字段说明

SegmentCommitInfo结构
SegmentCommitInfo结构

1. segName 该字段描述的是属于同一个段的索引文件的前缀,在解析segments_N文件的过程中,通过该字段找到si文件,解析si文件可以获取一个段的完整信息

2. segmentID 该字段描述了SegmentInfo文件的唯一标识

3. codec 该字段描述了SegmentInfo文件的编码值

4. delGen 该字段描述了属于同一个segment的liv文件文件的迭代编号,它用来命名下一次的liv文件

5. delCount 该字段描述该segment删除的文档的个数

6. fieldInfosGen 该字段描述了属于同一个segment的fnm文件的迭代编号,用来命名下一次生成的fnm文件

7. dvGen 该字段描述了属于同一个segment的dvm,dvd文件的迭代编号,用来命名下一次生成的dvm、dvd文件

8. FieldInfosFiles 如果域的信息发生变化,那么会记录最新生成的fnm文件

9. dvUpdateFiles 记录发生变化的DocValues文件

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 示例代码
  • 2. 构造IndexSearcher详细流程
  • 2.1 FindSegmentsFile.run方法流程
  • 2.2 解析最新segments_N文件的流程
  • 3. segments_N文件格式
  • 字段说明:
  • SegmentCommitInfo各个字段说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档