愚公系列2022年05月 .NET架构班 066-分布式中间件 Elasticsearch搜索数据原理

网友投稿 504 2022-05-29

前言

1.正排索引

正排索引也称为"前向索引"。它是创建倒排索引的基础,具有以下字段。

LocalId字段(表中简称"Lid"):表示一个文档的局部编号。

WordId字段:表示文档分词后的编号,也可称为"索引词编号"。

NHits字段:表示某个索引词在文档中出现的次数。

HitList变长字段:表示某个索引词在文档中出现的位置,即相对于正文的偏移量。

是以文档对象的唯一 ID 作为索引,以文档内容作为记录的结构。

2.倒排索引

倒排索引是一种以关键字和文档编号结合,并以关键字作为主键的索引结构。倒排索引分为两个部分。

第1个部分:由不同索引词(index term)组成的索引表,称为"词典"(lexicon)。其中保存了各种中文词汇,以及这些词汇的一些统计信息(例如出现频率nDocs),这些统计信息用于各种排名算法(Ranking Algorithm) [Salton 1989;Witten 1994]

第2个部分:由每个索引词出现过的文档集合,以及命中位置等信息构成,也称为"记录表"(posting file)或"记录列表"(posting list)。

指的是将文档内容中的单词作为索引,将包含该词的文档 ID 作为记录的结构。

一、Elasticsearch搜索数据原理

1.倒排索引的生成过程

文档内容:

productTitle:苏州街维亚大厦 productTitle:桔子酒店苏州街店

倒排索引生成过程:

对文档(苏州街维亚大厦 、桔子酒店苏州街店)进行分词,把分词作为索引对应文档ID建立对应关系建立成链表,就能构成倒排索引。图解如下:

有了倒排索引,能快速、灵活地实现各类搜索需求。整个搜索过程中我们不需要做任何文本的模糊匹配。

例如,如果需要在上述两个文档中查询 苏州街桔子 ,可以通过分词后 苏州街 查到 1、2,通过 桔子 查到 2,然后再进行取交取并等操作得到最终结果。

2.倒排索引的结构

Term Dictionary:存储单词和文档Id对应关系

Postings List:记录表,记录文档Id

3.倒排索引磁盘结构

4.倒排索引存储结构

segment 段存储结构

【愚公系列】2022年05月 .NET架构班 066-分布式中间件 Elasticsearch搜索数据原理

5.倒排索引term索引

term用来存储分词id

6.完整搜索过程

.NET Elasticsearch 分布式

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python 官方文档:入门教程
下一篇:从入门到弃坑:一个后端开发到鸿蒙开发的简单尝试
相关文章