1 个回答
倒排索引的整个工作过程如下:
一、倒排索引的核心组成:词典与倒排列表
一、倒排索引的核心组成:词典与倒排列表
词典(Term Dictionary):存储所有文档中出现过的词项(如“搜索引擎”“倒排索引”等),并按字典序排序。Elasticsearch基于Lucene实现,实际使用FST(有限状态Transducer)优化词典存储——FST通过压缩前缀共享的方式,既能快速查找词项是否存在,又能减少内存占用(例如,词项“apple”和“app”会共享前缀“app”的存储)。
倒排列表(Posting List):每个词项对应一个倒排列表,记录包含该词项的文档ID集合,以及扩展元数据(如词频TF、词项在文档中的位置、偏移量等)。例如,词项“Elasticsearch”可能对应倒排列表[doc1, doc2],其中doc1的位置是第3个词,doc2的位置是第1个词。
二、倒排索引的构建过程分词(Tokenization):文档写入时,Elasticsearch使用指定的分词器(如标准分词器、IK分词器)将文本拆分为词项。例如,文档“倒排索引是Elasticsearch的核心技术”会被分词为["倒排索引", "是", "elasticsearch", "的", "核心技术"](假设分词器忽略停用词“是”“的”)。
生成映射关系:对每个词项,记录其出现的文档ID,并补充元数据(如词频:该词项在文档中出现的次数;位置:词项在文档中的顺序位置,用于短语查询“倒排索引 核心技术”)。最终形成“词项→{文档ID列表+元数据}”的映射。
三、倒排索引的优化机制段(Segment)合并:索引数据会被拆分为多个独立的段(Segment,类似Lucene的分段机制),每个段是自包含的倒排索引。随着数据写入,旧段会被合并为更大的段(如合并两个小段为一个中段),减少索引碎片,提升查询时的IO效率。
元数据压缩:倒排列表中的文档ID通常采用差值编码(如文档ID序列[100, 102, 105]存储为[100, 2, 3]),结合前缀压缩减少空间占用;词频和位置信息通过变长整数(如VarInt)编码存储。
发布于:2天前 IP属地:四川省
我来回答
您需要 登录 后回答此问题!