-
IndexOrDocValuesQuery(Lucene 8.9.0)
本篇文章介绍下Lucene中用于优化范围(数值类型point或者term类型)查询的Query:IndexOrDocValuesQuery。 我们先通过这篇BLOG(如果链接失效,可以查看附件中的PDF)来概述下为什么会设计IndexOrDo... -
查询TopN的优化之NumericDocValues(二)(Lucene 8.9.0)
在上一篇文章的结尾,我们总结了使用NumericDocValues优化查询TopN的原理:假设查询TopN的排序规则为按照正排值从小大小的顺序,即正排值越小,优先级越高。故在开启优化后,当收集器收到一个文档号,先根据文档号从正排索引中拿到正排值,... -
DocIdSet(Lucene 8.9.0)
本篇文章将介绍Lucene中用于存储文档号的数据结构DocIdSet,该抽象类的具体实现有以下几种,我们将一一介绍。 图1: 图1中,DocsWithFieldSet跟RoaringDocIdSet已经介绍过了。建议先看下文章Roaring... -
查询TopN的优化之NumericDocValues(一)(Lucene 8.9.0)
在索引阶段,我们可以在每一篇文档中添加一条或多条DocValues信息(正排),使得在查询阶段,当收集器Collector收集到满足查询条件的文档号后,可以根据文档号找到对应的正排信息,并依据正排信息对查询结果进行排序。 图1: 图1中添加... -
ForceMerge(二)(Lucene 8.8.0)
我们紧接文章ForceMerge(一),继续介绍剩余的内容,先给出强制合并的流程图: 图1: 是否存在可以合并的段? 图2: 当前流程点的内容对应为源码中IndexWriter类的updatePendingMerges(…)方法,如下所... -
ForceMerge(一)(Lucene 8.8.0)
在执行了flush、commit等方法后,Lucene会基于段的合并策略对索引目录中的段集合进行合并操作。Lucene在IndexWriter类中也提供了额外的方法允许用户可以主动去执行段的合并操作。 ForceMerge概述 本篇文章将基... -
MemoryIndex(一)(Lucene 8.8.0)
从本篇文章开始介绍Lucene中提供的基于内存的搜索引擎的内容。我们通过MemoryIndex类的注释简单的了解下。 图1: 图1中中包含了两个重点内容: 单文档:使用MemoryIndex生成的索引是单文档(single-documen... -
索引文件的载入(一)之fdx&&fdt&&fdm(Lucene 8.4.0、8.6.0、8.7.0)
在文章SegmentReader(一)中,我们介绍了SegmentReader对象,它用于描述一个段中的索引信息,并且说到SegmentReader对象中包含了一个SegmentCoreReaders对象。 图1: 图1中,蓝框标注的两个对... -
Lucene核心技术(一)
Lucene核心技术 本篇文章通过ppt介绍Lucene: Lucene核心技术(一 ).pptx -
SIMD(Lucene 8.7.0)
从Lucene 8.4.0开始,在写入/读取倒排信息时,即写入/读取索引文件.doc、.pos、.pay时,通过巧妙的编码方式(下文中展开)使得C2编译器能生成SIMD(Single Instruction Multiple Data)指令,从而...