我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Elasticsearch 7 探索之路】(三)倒排索引

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Elasticsearch 7 探索之路】(三)倒排索引

上一篇,我们介绍了 ES 文档的基本 CURE 和批量操作。我们都知道倒排索引是搜索引擎非常重要的一种数据结构,什么是倒排索引,倒排索引的原理是什么。

1 索引过程

在讲解倒排索引前,我们先了解索引创建,下图是 Elasticsearch 中数据索引过程的流程。

从上图可以看到,文档未在 ES 中进行索引,而是 由 Analyzer 组件对其执行一些操作并将其拆分为 token/term。然后将这些术语作为倒排索引存储在磁盘中。假设我们有两个名为 name 和 age 字段,当要将文档索引到 ES 时,Analyzers 组件 以某些定界符(有默认定界符,例如空格,句号等)将它们分割开获取 token,再对每个 token 应用特定的过滤器。经过分析的这些标记称为 term。然后将这些 term 针对该字段)存储在倒排列表中。

2 倒排索引

2.1 正排与倒排索引

一般在我们阅读图书,我们会根据目录快速定位想要阅读的章节,过了一段时间,你想要的回顾之前某一个知识点,你发现从目录难以查找到对应的地方,这时你可能就会从索引页从去查找对应内容索引,从而找到页码。

搜索引擎其实跟我们的使用图书很相似,下面我来对图书和搜索引擎进行一个简单的类比,来看一下搜素引擎中正排和倒排索引。

  • 图书
    • 正排索引-目录页
    • 倒排索引-索引页
  • 搜索引擎
    • 正排索引-文档 Id 到文档内容和单词的关联
    • 倒排索引-单词到文档 Id 的关系

2.2 倒排索引的核心组成

举个例子,假设我们有 3 个文档:

Doc 1:breakthrough drug for schizophrenia

Doc 2:new schizophrenia drug 

Doc 3:new approach for treatment of schizophrenia

经过分析,文件中的术语如下

文档 分词结果
Doc 1 breakthrough,drug,for,schizophrenia
Doc 2 new,schizophrenia,drug
Doc 3 new,approach,for,treatment,of

倒排列表的元数据结构:

(DocID;TF;)

其中:

  • DocID:出现某单词的文档ID

  • TF(词频):单词在该文档中出现的次数

  • POS:单词在文档中的位置

则它们生成的倒排索引

单词 逆向文档频率 倒排列表(DocID;TF;))
breakthrough 1 (1;1;<1>)
drug 2 (1;1;<2>),(2;1;<3>)
for 2 (1;1;<3>),(3;1;<3>)
schizophrenia 2 (1;1;<4>),(2;1;<2>)
new 2 (2;1;<1>),(3;1;<1>)
approach 1 (3;1;<2>)
treatment 1 (3;1;<4>)
of 1 (3;1;<5>)
  • ES 倒排索引包含两个部分

    • 单词词典 (Term Dictionary),索引最小单位,记录所有文档的单词,记录单词到倒排列表的关联关系
      • 单词词典一般都会非常多,通过 B+ 树或 Hash 表方式以满足高性能的插入与查询
    • 倒排列表(Posting List)-由倒排索引项(Posting)组成
      • 文档 ID
      • 词频 TF,该单词在文档中出现的次数,用于相关性评分
      • 位置(Position),单词在文档中分词的位置。用于语句搜索(phrase query)
      • 偏移(Offset),记录单词的开始结束位置,实现高亮显示

ES 也可以指定对某些字段不做索引

  • 优点:节省存储空间
  • 缺点:字段无法被搜索

3 总结

在之前文章说了 ES 的文档是基于 JSON 格式,在我们创建索引的时候,对每一个文档记录对应索引相关的信息。在对倒排索引进行搜索时,查询单词是否在单词字典,获取单词在倒排列表的指针,获取有该单词单词的文档 Id 列表,通过 ES 的倒排索引,我们轻易对全文进行快速搜素。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Elasticsearch 7 探索之路】(三)倒排索引

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Elasticsearch 7 探索之路】(三)倒排索引

上一篇,我们介绍了 ES 文档的基本 CURE 和批量操作。我们都知道倒排索引是搜索引擎非常重要的一种数据结构,什么是倒排索引,倒排索引的原理是什么。1 索引过程在讲解倒排索引前,我们先了解索引创建,下图是 Elasticsearch 中数据索引过程的流程。从
【Elasticsearch 7 探索之路】(三)倒排索引
2019-11-04

搜索引擎之倒排索引浅析

上一篇文章 ElasticSearch 术语中提到了倒排索引,那么这篇文章就来讲解下什么是倒排索引,倒排索引的数据结构以及 ElasticSearch 中的倒排索引。倒排索引倒排索引(Inverted Index) 也常被称为反向索引,是搜索引擎中非常重要的数
搜索引擎之倒排索引浅析
2016-11-02

搜索一文入门ElasticSearch(节点分片CRUD倒排索引分词)

这篇文章主要为大家介绍了搜索一文入门ElasticSearch(节点分片CRUD倒排索引分词)的基础详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-23

ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析

这篇文章主要介绍了ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析文章都
2023-07-05

编程热搜

目录