lucene源码学习

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目录

官网给了这样的解释

DocValues字段有时被称为列或列跨度字段,类似于关系数据库术语,其中文档被视为行,字段和列。DocValues 字段存储每个字段的值:每个文档的值保存在单个数据结构中,提供给定 docid 的字段值的快速、顺序查找。这些字段用于高效的基于值的排序和分面,但它们对过滤没有用处。

每一个文档在存储时候,可以设定是否为某个字段存储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

你可能感兴趣的:(lucene,lucene)