解析基本概念 2022年3月15日 前言 Apache Lucene是一个开源的高性能、可扩展的信息检索引擎,提供了强大的数据检索能力。Lucene已经发展了很多年,其功能越来越强大,架构也越来越精细。它目前不仅仅能支持全文索引,也能够提供多种其他类型的索引方式,来满足不同类型的查询需求。 基于Lucene的开源项目有很多,最知名…… 阅读全文
源码系列索引文件的生成九之 2022年3月15日 上一篇文章中,我们介绍了在索引(index)阶段,Lucene 收集了跟点数据相关的信息,这些信息在 flush 阶段会被读取,用于生成索引文件。dim&&.dii,从本文开始介绍索引文件。dim&&.dii 生成的详细过程,如图 1 所示,另外阅读本文中需要前置知识…… 阅读全文
构造对象三 2022年3月15日 查看原文 系列文章: 构造 IndexWriter 对象(二) 构造 IndexWriter 对象(一) 构造一个 IndexWriter 对象的流程总体分为下面三个部分: 设置索引目录 Directory 设置 IndexWriter 的配置信息 IndexWriterConfig 调用 IndexWriter 的构造函数 大家可以查看文章 构造 IndexWriter 对象(一)、 构造 IndexWriter 对象(二) 来了解前两部分的内容,我们接着继续介绍最后一个部分,即调用 IndexWriter 的构造函数。 IndexWriter 类有且仅有一个有…… 阅读全文
源码系列索引文件的生成二之 2022年3月15日 生成索引文件。tim、.tip、.doc、.pos、.pay 的流程图 图 1: 我们继续介绍流程点 生成索引文件.doc、.pos、.pay。 生成索引文件.doc、.pos、.pay 的流程图 图 2: 记录位置信息 position、payload、偏移信息 offset 图 3: 当前 term 在一篇文档中的所有位置信…… 阅读全文
源码系列索引文件的生成十二之 2022年3月15日 本文承接 索引文件的生成(十一),继续介绍剩余的内容,为了便于下文的介绍,先给出 生成索引文件.dim&&.dii 的流程图以及流程点构建BKD树的节点值(node value)的流程图: 图1: 图2: 在前面的文章中,我们介绍了图2中处理内部节点的所有流程点,在介绍处理叶子…… 阅读全文
词元过滤器 2022年3月15日 本文禁止转载 word_delimiter_graph 使用非字母字符切分 tokens,并可以根据规则执行一些可选的 token 正则化。默认情况下, word_delimiter_graph 会使用以下规则: 使用非字母字符作为切分点。 比如 Super-Duper → Super, Duper 移除每个 token 前置和后置分隔符。比如 XL---42+'Autocoder' → XL, 42, Autocoder 在单词大小写过度位置做切分。 比如 PowerShot → Power, Shot 在单词字母和数字过度位置切分。 比如 XL500 → XL, 500 移除…… 阅读全文
源码系列倒排表 2022年3月15日 原文: https://www.amazingkoala.com.cn/Lucene/Index/2019/0222/36.html 本篇文章介绍如何生成倒排表,通过一个简单的例子来讲解倒排表的底层存储结构。文章中不会给出详细的源码介绍,只有一些必要的对象,感兴趣的朋友可以看我的 GitHub,对构建倒排表的源码给出了详细的注释: https://github.com/luxugang/Lucene-7.5.0/blob/master/solr-7.5.0/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java ,此类中的该方法是开始构建倒排表的入口。 另外如果某些域使用了词向量(Ter…… 阅读全文
构造对象七 2022年3月15日 构造 IndexWriter 对象(五) 构造 IndexWriter 对象(四) 构造 IndexWriter 对象(三) 构造 IndexWriter 对象(二) 构造 IndexWriter 对象(一) 本文承接 构造 IndexWriter 对象(六),继续介绍调用 IndexWriter 的构造函数的流程。 调用 IndexWriter 的构造函数的流程图 图 1: 生成对象 IndexFileDeleter 在文章 构造 IndexWriter 对象(六) 中,我们简单介绍了 IndexFileDeleter 作用,即用来删除索引目录中的索引文件,本文根据 IndexFileDeleter 的构造函数的…… 阅读全文
番外篇索引流程与倒排索引实现 2022年3月15日 前两篇文章主要围绕Lucene的底层索引文件结构方面介绍了倒排索引原理: http://www.6aiq.com/article/1564413040138 http://www.6aiq.com/article/1564413209435 在Lucene中,写数据的基本单元称之为Document,本文将介绍一个Document写入Lucene后的索引全流程。 基础概念 ** ** 如下几个概念,Lucene的Document中给出了明确的定义,在这里先…… 阅读全文
源码系列去重编码 2022年3月15日 原文: https://www.amazingkoala.com.cn/Lucene/yasuocunchu/2019/0130/29.html 去重编码是 Lucene 中对 int 类型数据的一种压缩存储方式,在 FacetsConfig 类中用到此方法来处理 int 类型数据。其优点在于,存储一个原本需要固定 4 个字节空间大小的 int 类型的数据,最好的情况下只要 1 个字节,最差的情况下需要 5 个字节。 处理过程 去重编码的过程主要分三步: 排序 去重 差值存储 关系图 根据 int 数值的大小,…… 阅读全文