ElasticSearch全文检索原理及过程

news2025/1/16 20:56:54

倒排索引

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

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

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

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

WordIdWordDocIds
1谷歌1, 2, 3, 4, 5
2地图1, 2, 3, 4, 5
3之父1, 2, 4, 5
4跳槽1, 4
5Facebook1, 2, 3, 4, 5
6加盟2, 3, 5
7创始人3
8拉斯3, 5
9离开3
104
......

有了倒排索引,搜索引擎可以很快速地响应用户的查询。比如用户输入"地图",通过倒排索引,可以快速的找到含有"地图"的文档是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被拉取回来,协调节点将会返回结果集到客户端上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

差分---(小明的彩灯)蓝桥杯真题,差分思想很明确的模板

小明的彩灯题目描述暴力解法差分的思路和模板差分解法题目描述 小明拥有 N个彩灯,第 i个彩灯的初始亮度为 ai​。 小明将进行 Q次操作,每次操作可选择一段区间,并使区间内彩灯的亮度 x(x可能为负数)。 求 Q次操作后…

自动控制原理笔记-传递函数

目录 拉普拉斯反变换: 用拉普拉斯变换求解常微分方程的步骤: 部分分式展开法: 留数法: 零极点图: 传递函数 定义: 传递函数的标准形式: 传递函数的性质: 传递函数的局限性&#xff1a…

SOT23-6封装 小封装 超精简外围PD Sink端取电协议芯片

PD协议(USB-PD)的全名是USB Power Delivery,是由 USB-IF 组织制定的一种快速充电规范,是目前主流的快充协议之一,USB-PD 快充协议是以 Type-C 接口输出的,我们经常看到的华为笔记本配的Type-C 65W充电器就是…

【C语言】函数栈帧的创建和销毁

目录 1.函数栈帧的含义 概念 要用到的汇编语言的知识 示例 2.理解栈帧 2.1 main函数栈帧的创建 2.2 局部变量的创建 2.3 函数传参 2.4 调用函数 2.5 函数返回 一个.c文件在调用函数的时候(包括main 函数),其内存中的栈区有什么变…

Qt之实现工具箱界面程序

最近终于有点空闲时间了,就写写博客,就把上次给客户实现的一个程序开发过程写出来;客户要求的是在主界面上能有几个很好看的按钮,单击各个按钮能弹出不同的应用窗口,如游戏窗口,显示图像窗口等等&#xff0…

pcl 基本操作汇总

目录 PCLVisualizer简单的点云可视化 createViewPort创建视窗 代码 效果 点云视窗上打印文本信息 使用addText 合并多个点云 xyzxyz xyz nxnynz 新建自己的Point类型 点云的刚体变换(旋转平移) 以下是pcl点云基本操作,后面会慢慢…

C++--数据结构--最小生成树-- Kruskal--Prim--高阶0713

注:本次修改了添加边的一些其他情况可以采用坐标来添加边 void _AddEdge(size_t srci, size_t dsti, const W& w) {_matrix[srci][dsti] w;// 无向图if (Direction false){_matrix[dsti][srci] w;} }void AddEdge(const V& src, const V& dst, const…

【学习笔记03】vue的组件

目录一、组件二、组件的分类(一)全局组件(二)局部组件1、为什么vue组件 data函数返回一个对象2、bootstrap的使用三、父组件传值给子组件1、父传子实现进度条2、 props的属性四、子组件传值给父组件五、兄弟组件传值一、组件 可以…

【Javassist】快速入门系列04 使用Javassist更改整个方法体

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 文章目录系列文章目录前言引入Javassist jar包使用Javassist更改整个方法体总结说明前言 上一章我们介绍了使用Javas…

2022全年度白酒十大热门品牌销量榜单

白酒为中国特有的一种蒸馏酒,是世界六大蒸馏酒之一,中国是全球最大的蒸馏酒市场,中国的白酒消费也位列世界烈酒行业领先地位。近几年来,由于市场需求的不断提升及居民的消费升级,高档白酒价格也不断增长,从…

会员管理系统可行性研究

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 1.引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2.可行性研究前提 2.1要求 2.2目标 2.3条件、假定和限制 2.4决定可行性的因素 3.现有小程序分析 3.1经…

进程-计算机是如何工作的

文章目录冯诺依曼计算机体系组成寄存器和内存编译型语言vs解释型语言进程进程管理进程的状态虚拟地址空间虚拟内存冯诺依曼计算机体系 组成 (1) 输入设备:键盘,鼠标 (2) 输出设备:显示器,打印机 其中硬盘(可做输入、输出) (3) 存储器:内存 (4) CPU 运…

Composing Programs(SICP python版) chap1 笔记

《Composing Programs》(SICP python版) chap1 笔记 持续更新中 在学习 CS61A 2022fall的时候配着看的 文章目录《Composing Programs》(SICP python版) chap1 笔记Chapter 1: Building Abstractions with Functions1.1 Getting Started1.1.1 Programming in Python1.1.2 Insta…

python安装face_recognition

本人使用系统为windows10,python的版本是3.8,在安装face_recognition之前需要安装以下内容: 1.cmake 2.dlib,dlib的安装依赖于cmake 1 安装CMake 1.1 官网下载:CMake 1.2 开始安装CMake: 1.3 验证是否安装成功: 打开…

10 Mysql中各种锁

概述 MySQL中的也存在一些类型的锁,用来保证多个连接同时操作数据时的安全即数据的一致性问题;同时,虽然锁能够解决一些数据的一致性和有效性,但是我们还是要选择合适的锁来降低锁对于并发问题的影响 1. 全局锁 全局锁就是对整…

傻白探索Chiplet,互连技术研究现状(七)

目录 一、串行互连 二、并行互连 三、串行与并行互连的比较 四、互连标准接口 (1)背景 (2)UCIe Chiplet的可行性常常受到片间互连的性能、可用性以及功耗和成本问题的限制,各种异构芯片的互连接口和标准的设计在技…

Web3中文|恐惧vs伦理:AI艺术评论家错在哪里?

本周,人工智能引发众怒。随着“AI艺术”在网络的流行,一群艺术家正在知名艺术家平台Art Station上掀起一场反AI艺术的抗议活动,而人工智能技术的拥趸者也及时回击了这波反对热潮。 这种充斥着反对意见的热潮是迟早会出现的。现在这些人认为“…

简单说手什么是JWT?

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。 传统的session认证 http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一…

【Lingo】【MATLAB】【求解运筹学问题模板题】

文章目录一、线性规划模型(Lingo)1.线性规划问题(模板)2.求解最优化问题3.包装箱平板车问题4.职员时序安排问题5.运输问题6.排菜单问题7.工地施工问题8.生产计划优化研究(柴油机生产)二、线性规划问题&…

机器学习算法基础——逻辑回归

01逻辑回归可以用来解决简单的二分类问题。 逻辑回归的预测函数为hθ(x)g(θTx)h_\theta (x)g(\theta^Tx)hθ​(x)g(θTx),其中g(x)g(x)g(x)为sigmoidsigmoidsigmoid函数,用于将数值映射到区间[0,1][0,1][0,1]中,然后再取对数值用于刻画损失函…