倒排索引

ElasticSearch的搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。那么,倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。

分词:在value中提取出各个关键词的过程

DocId Doc
1 谷歌地图之父跳槽 Facebook
2 谷歌地图之父加盟 Facebook
3 谷歌地图创始人拉斯离开谷歌加盟 Facebook
4 谷歌地图之父跳槽 Facebook 与 Wave 项目取消有关
5 谷歌地图之父拉斯加盟社交网站 Facebook

对文档进行分词之后,得到以下倒排索引

WordId Word DocIds
1 谷歌 1, 2, 3, 4, 5
2 地图 1, 2, 3, 4, 5
3 之父 1, 2, 4, 5
4 跳槽 1, 4
5 Facebook 1, 2, 3, 4, 5
6 加盟 2, 3, 5
7 创始人 3
8 拉斯 3, 5
9 离开 3
10 4
.. .. ..

有了倒排索引,搜索引擎可以很快速地响应用户的查询。比如用户输入"地图",通过倒排索引,可以快速的找到含有"地图"的文档是id为1, 2, 3, 4, 5,的文档。从而达到快速的全文检索的目的。

ES中的倒排索引

ES 在 term 的基础上利用 term 的前缀或者后缀构建了 term index, 用于对 term 本身进行索引,ES 实际的索引结构如下图所示

这样当我们去搜索某个关键词时,ES 首先根据它的前缀或者后缀迅速缩小关键词的在 term dictionary 中的范围,大大减少了磁盘IO的次数。

单词词典(Term Dictionary):记录所有文档的单词,记录单词到倒排列表的关联关系

倒排列表(Posting List)-记录了单词对应的文档结合,由倒排索引项组成。
倒排索引项(Posting):

  • 文档ID;
  • 词频TF–该单词在文档中出现的次数,用于相关性评分;
  • 位置(Position)-单词在文档中分词的位置。用于短语搜索(match phrase query);
  • 偏移(Offset)-记录单词的开始结束位置,实现高亮显示;

全文检索的实现流程

ES可以理解为是一个分布式的存储和检索系统,在存储的时候默认是根据每条记录的_id字段做路由分发的,这意味着es服务端是准确知道每个document分布在那个shard上的。相对而言search是一个比较复杂的执行模式,因为我们不知道那些document会被匹配到,任何一个shard上都有可能,所以一个search请求必须查询一个索引或多个索引里面的所有shard才能完整的查询到我们想要的结果。

 找到所有匹配的结果是查询的第一步,来自多个shard上的数据集在分页返回到客户端的之前会被合并到一个排序后的list列表,由于需要经过一步取top N的操作,所以search需要进过两个阶段才能完成,分别是query和fetch

query(查询阶段)

  1. 客户端发送search请求到NODE 3。
  2. Node 3将查询请求转发到索引的每个主分片或副分片中。
  3. 每个分片在本地执行查询,并使用本地的Term/Document Frequency信息进行打分,添加结果到大小为from + size的本地有序优先队列中。
  4. 每个分片返回各自优先队列中所有文档的ID和排序值给协调节点,协调节点合并这些值到自己的优先队列中,产生一个全局排序后的列表

注意:协调节点它的职责是广播search请求到所有相关的shard上,然后合并他们的响应结果到一个全局的排序列表中然后进行第二个fetch阶段,注意这个结果集仅仅包含docId和所有排序的字段值,search请求可以被主shard或者副本shard处理,这也是为什么我们说增加副本的个数就能增加搜索吞吐量的原因,协调节点将会通过round-robin的方式自动负载均衡。

fetch(读取阶段)

  1. 协调节点标识了那些document需要被拉取出来,并发送一个批量的mutil get请求到相关的shard上。
  2. 每个shard加载相关document,如果需要他们将会被返回到协调节点上。
  3. 一旦所有的document被拉取回来,协调节点将会返回结果集到客户端上。

ElasticSearch全文检索原理及过程相关推荐

  1. elasticsearch全文检索流程

    elasticsearch全文检索流程 elasticsearch全文检索流程 索引过程 创建索引 获得原始文档 创建文档对象 分析文档 创建索引 查询索引 elasticsearch全文检索流程 索 ...

  2. ElasticSearch倒排索引原理 数据的写入与查询过程

    Elasticsearch在生产中充当的角色 业务上,最早启用Elasticsearch(下称ES)是为了解决模糊查询的问题.具体业务场景为大量抓取回来的短视频内容.热门微博.公众号文章.小红书笔记. ...

  3. Lucene 原理分析之-全文检索的一般过程-笔记

    2019独角兽企业重金招聘Python工程师标准>>> 描述了全文检索的一般过程 全文检索大体分两个过程,索引创建 (Indexing) 和搜索索引 (Search) . 索引创建: ...

  4. Elasticsearch - 全文检索服务器

    一.Elasticsearch 简介 Elasticsearch 是一个基于 Lucene 的全文检索服务器,提供了基于 RESTful web接口的分布式全文搜索引擎. 总结: Elasticsea ...

  5. 全文搜索引擎Elasticsearch,这篇文章给讲透了!(Elasticsearch技术原理及实现方式)

    关于Elasticsearch的技术原理及实现方式看了两篇讲的非常好的文章,在这里分享给大家. 其中一篇是: Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文 ...

  6. ELK系列(十五)、Elasticsearch核心原理一篇全搞定

    目录 Lucene 介绍 核心术语 如何理解倒排索引? 检索方式 分段存储 段合并策略 Elasticsearch 核心概念 节点类型 集群状态 3C和脑裂 1.共识性(Consensus) 2.并发 ...

  7. Elasticsearch实现原理分析

    介绍 本文是分析Elasticsearch系列文章中的一篇,是一个译文.共有三个部分,每部分讲解部分Elasticsearch的实现原理.     在翻译的过程中,也需要查看对应部分的源码,来加深对实 ...

  8. mysql全文检索原理与实例分析

    mysql到版本3.23.23时,开始支持全文检索,通过语句SELECT ... FROM ... MATCH(...) AGAINST(...) 来在整个表中检索是否有匹配的,全文索引是一个定义为f ...

  9. ElasticSearch 全文检索实战

    一.概述 Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,它基于 Lucene 实现了强大的全文检索功能.本文针对一个通用的应用场景,讲解如何利用 Elastic ...

最新文章

  1. SQLite 使用教程2 语法
  2. java常用算法分析和实现 amp,Java常用算法实现
  3. 作者:宋杰(1980-),男,博士,东北大学软件学院副教授
  4. vscode we cannot connect_秋季常规赛分秒必争,PC BET直播:TES能否拿下西安WE
  5. 发现两个有趣的CSS3效果
  6. html做换装游戏,index.html
  7. python数据挖掘与分析
  8. ps一点等于多少厘米_ps像素和厘米换算(ps100像素等于多少厘米)
  9. 激活Office 365移动设备管理MDM服务
  10. python层次分析法案例_在R语言中使用层次分析法-案例1
  11. ie8 ajax 缓存问题,IE8/IE9下Ajax缓存问题
  12. 企业内的ITSM软件/ITIL流程管理系统与OA系统有什么区别和关系?
  13. 社会生活中的著名法则- -
  14. 科大讯飞AIUI-应用集成6麦解决方案
  15. python科学计算之numpy+pandas+matplotlib+mysql
  16. HTML5期末大作业:电商购物网站设计——电商购物网站设计(55页) 电商网页设计制作 简单静态HTML网页作品 购物网页作业成品 学生商城网站模板
  17. 我国实战攻防演练的发展现状
  18. M5(项目)-01-尚硅谷谷粒商城项目分布式基础篇开发文档
  19. 课程向:深度学习与人类语言处理 ——李宏毅,2020 (P17) -2
  20. CEF中Browser进程与Render进程间通信

热门文章

  1. python 时间格式化字符串
  2. 区块链技术与司法碰撞会檫出怎样的火花?
  3. GB/T 25000.51-2016解读系列之性能效率
  4. Java的注解Annotation
  5. CSI-RS和DMRS
  6. 2020思想道德修养与法律基础-【必看】
  7. python实训报告5000字_Ps实习报告范文5000字
  8. gp服务发布服务的地图,web客户端显示的位置跟arcgis中显示的位置不一致,不相符(我的是等值面发布的gp服务)
  9. 计算机网络常见端口号
  10. 用<C#> 随机一个1~100之间的数字 。猜测随机的数字