1.官网地址
https://lucene.apache.org/core/9_1_0/index.html
2. lucene源码结构
https://juejin.cn/post/6844903736016371725
使用tree命令查看lucene源码结构
#core目录下
chenyuxi@chenyuxideMacBook-Pro lucene % tree -L 1
.
├── analysis #用于文本分析
├── codecs #提供了对倒排索引结构的编码和解码的抽象,可以根据应用选择不同的实现
├── document #提供了一个简单的Document类
├── geo #地理信息
├── index #提供两个类,IndexiWriter:创建文档并将其添加到索引 IndexReader:访问索引中的数据
├── internal
├── package-info.java
├── search #提供数据结构来表示查询。提供QueryParser来从字符串或者xml生成查询结构
├── store # 定义了用于存储持久性数据结构的抽象类Directory。试图有效地使用操作系统磁盘缓冲区缓存
└── util #工具类
3.index目录
官网给了这样的解释
每一个文档在存储时候,可以设定是否为某个字段存储DocValue,而es是默认是每个字段都开启的。DocValue用于快速、顺序查找。所以排序使用的是DocValue这点是正确的。
下面来探索下DocValue的各种数据结构和的如何使用在顺序查找的。
官网的 DocValue api
https://lucene.apache.org/core/9_1_0/core/org/apache/lucene/index/DocValues.html
可以从源码里找到这个类
org.apache.lucene.index.DocValues
看其他网友的文章说DocValues有五种,我以为这些不同类型的DocValue都是直接继承DocValues,但实际不是 DocValues是一个final类型的类,不能被继承。
整理下五种DocValue
BinaryDocValues
NumericDocValues
SortedDocValues
SortedNumericDocValues
SortedSetDocValues
找到了一篇写docvalue很好的博客:https://www.amazingkoala.com.cn/Lucene/DocValues/2019/0409/46.html
先mark住,明天开始跟着他的源码一起看下。
他的源码注释:https://github.com/luxugang/Lucene-7.5.0/blob/master/solr-7.5.0/lucene/core/src/java/org/apache/lucene/codecs/lucene70/Lucene70DocValuesConsumer.java