ES搜索原理

ES搜索原理

bg: 搜索的时候,使用模糊查询经常出现搜索不到的情况,不如mysql的like有效。

https://www.bilibili.com/video/BV1yb421J7oX/?spm_id_from=333.337.search-card.all.click&vd_source=3f917722acc36b0fcca7cca2d21394e2

基础概念

在这里插入图片描述

  • 索引(Index):相当于关系型数据库中的数据库,是一个拥有相似特征的文档的集合。例如,可以为客户数据、商品目录、订单数据等分别建立不同的索引12.
  • 文档(Document):是可以被索引的基本信息单元,以 JSON 格式表示,类似于关系型数据库中的一行数据。一个文档可以包含多个字段,每个字段有其对应的值,如一篇文章、一个用户信息等都可以作为一个文档存储在 ES 中12.
  • 字段(Field):组成文档的最小单位,相当于关系型数据库中的一列数据23.
  • 映射(Mapping):用来定义一个文档以及其所包含的字段如何被存储和索引,包括定义字段的名称、类型,以及所使用的分词器等,类似于关系型数据库中的 Schema23.
  • 分片(Shards):由于数据量可能很大,一个索引会被分成多个分片来存储在不同的节点上,以实现水平扩展和分布式存储,每个分片可以是单个节点的一部分,也可以跨越多个节点。每个分片包含一部分数据,并且每个分片都有一个主分片和一个或多个复制分片,主分片负责处理写入操作,而复制分片用于容错和读取操作13.

倒排索引(反向索引)搜索原理

倒排索引的构建过程
文档预处理阶段
  • 分词(Tokenization): 将文档拆分成单词或词汇单元。这个过程使用分词器,将文本切分成有意义的词语,形成一个词汇列表。
  • 去停用词(Stopword Removal): 移除常见且在搜索中没有实际意义的词语,如“的”、“是”等。这有助于提高倒排索引的效率和准确性。
  • 词干提取(Stemming): 将词语还原为其词干形式,去除词尾,以便将相关的词汇映射到同一词根,减少索引的大小。
倒排生成阶段
  • 建立词汇表: 将预处理后的文档中的所有唯一词语构建成一个词汇表。每个词汇都有一个唯一的标识符。+ 建立词汇表: 将预处理后的文档中的所有唯一词语构建成一个词汇表。每个词汇都有一个唯一的标识符。
  • 映射关键词到文档ID: 遍历每个文档,对于文档中的每个关键词,将其映射到文档的唯一标识符(文档ID)。这样的映射关系通常以字典的形式保存。+ 映射关键词到文档ID: 遍历每个文档,对于文档中的每个关键词,将其映射到文档的唯一标识符(文档ID)。这样的映射关系通常以字典的形式保存。
  • 生成倒排列表: 对于每个关键词,创建一个倒排列表,其中包含映射到该关键词的所有文档ID。倒排列表实际上是一个映射,将关键词与包含该关键词的文档关联起来。+ 生成倒排列表: 对于每个关键词,创建一个倒排列表,其中包含映射到该关键词的所有文档ID。倒排列表实际上是一个映射,将关键词与包含该关键词的文档关联起来。

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2024%2Fpng%2F22028291%2F1733676886031-c5a3898c-7648-468b-a188-647ad31a07d8.png&pos_id=img-xcLT1K00-173475058792

检索过程分析

搜索引擎的检索过程是通过倒排索引来实现的,这个过程可以分为几个关键步骤,让我们逐步解析搜索引擎如何利用倒排索引进行检索,并强调倒排索引在快速定位相关文档方面的高效性。

1. 用户查询输入:

  • 用户在搜索引擎中输入关键词或查询短语,希望找到相关的文档。

2. 关键词分析:

  • 搜索引擎对用户输入的查询进行关键词分析,进行类似于文档预处理的步骤,包括分词、去停用词、词干提取等。

3. 查询到关键词的倒排列表:

  • 对于每个关键词,搜索引擎通过倒排索引找到与之相关的文档ID列表。

4. 倒排列表的交集操作:

  • 如果查询包含多个关键词,搜索引擎会对这些关键词的倒排列表进行交集操作,得到包含所有关键词的文档ID列表。

5. 文档排序和排名:

  • 搜索引擎根据某种算法对得到的文档ID列表进行排序和排名,以便将最相关的文档排在前面。

6. 返回搜索结果:

  • 最终,搜索引擎将排名最高的文档作为搜索结果返回给用户,呈现在搜索结果页面上。

倒排索引的设计使得搜索引擎能够在海量文档中迅速定位包含查询关键词的文档,因此在检索过程中具有高效性。通过直接访问倒排列表,搜索引擎可以快速获取包含关键词的文档ID,而不需要逐一扫描所有文档。这种高效的检索过程是搜索引擎能够迅速响应用户查询的关键。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松上手:使用 Vercel 部署 HTML 页面教程

😀 在学习前端的过程中,部署项目往往是一个令人头疼的问题。然而,Vercel 为我们提供了一个便捷且免费的解决方案。 Vercel 是一个强大的云平台,专门用于前端项目的部署和托管。它不仅支持多种前端框架和静态网站生成器&#xff0…

STL 剖析

STL 六大组件 「STL 六大组件的交互关系」 Container 通过 Allocator 取得数据储存空间Algorithm 通过 Iterator 存取 Container 内容Functor 可以协助 Algorithm 完成不同的策略变化Adapter 可以修饰或套接 Functor、Iterator 配置器(allocator) 配置器:负责空间…

HTTP—03

触发 GET 请求 1)直接在浏览器 地址栏 输入 URL,此时构成了一个GET请求 2)HTML中的一些特殊标签可能会触发 例如 img,a,link,script... 3)通过Form表单触发(Form本质也是一个HTML标签) 4&#xff0…

C 数组:索引魔杖点化的数据星图阵列

一、数组 1.数组的概念 数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息: 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。 2.数组的分类 数组主要分为一…

苹果手机怎么清理空间:拯救你的拥挤手机

在数字生活的海洋中,我们的苹果手机就像一艘小船,载满了照片、应用、视频和各种下载的“宝贝”。随着时间的推移,这艘小船开始变得拥挤,航行速度放缓,甚至有时候直接卡壳。苹果手机怎么清理空间?是时候学会…

Ubuntu上如何部署Nginx?

环境: Unbuntu 22.04 问题描述: Ubuntu上如何部署Nginx? 解决方案: 在Ubuntu上部署Nginx是一个相对简单的过程,以下是详细的步骤指南。我们将涵盖安装Nginx、启动服务、配置防火墙以及验证安装是否成功。 1. 更新…

javaScriptBOM

1.1、BOM概述 1.1.1、BOM简介 BOM(browser Object)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window。 BOM由一系列的对象构成,并且每个对象都提供了很多方法与属性 BOM缺乏标准…

Unity3D仿星露谷物语开发7之事件创建动画

1、目标 掌握事件通知的Publisher - Subscriber设计模式,并通过事件通知触发动画。 2、发布者/订阅者模式 首先,定义事件Event 然后,Publisher触发事件 最后,Subscriber订阅事件并进行处理 (1)创建动作…

点击展示大图预览

原文链接在table表格里能够实现,点击里面的图片实现大图预览的效果; 一、先安装viewer — 使用npm安装 npm install v-viewer --save二、在main.js中引入 import Viewer from v-viewer //点击图片大图预览 import viewerjs/dist/viewer.css Vue.use(…

安全算法基础(一)

安全算法是算法的分支之一,还的依靠大量的数学基础进行计算,本文参照兜哥的AI安全样本对抗,做一个简单的算法安全概括,从零学习。 最新的安全算法对于我们常规的攻击样本检测,效果是不理想的,为了探究其原…

aioice里面candidate固定UDP端口测试

环境: aioice0.9.0 问题描述: aioice里面candidate固定UDP端口测试 解决方案: /miniconda3/envs/nerfstream/lib/python3.10/site-packages/aioice import hashlib import ipaddress import random from typing import Optional import…

UE UMG 多级弹出菜单踩坑

多级弹出菜单 https://www.bilibili.com/video/BV1ub411J7nA 运行时添加 widget 的方法 create widget 然后 add child 到某个组件,比如 canvas 运行时修改 widget 位置的方法 set widget slot position 用起来没效果 怀疑是因为我没有传入 slot 但是暂时不知…

金碟中间件-AAS-V10.0安装

金蝶中间件AAS-V10.0 AAS-V10.0安装 1.解压AAS-v10.0安装包 unzip AAS-V10.zip2.更新license.xml cd /root/ApusicAS/aas# 这里要将license复制到该路径 [rootvdb1 aas]# ls bin docs jmods lib modules templates config domains …

linux-----网络编程

网络编程基础概念 IP地址:是互联网协议地址,用于在网络中唯一标识一台设备。在IPv4中,地址是32位的二进制数,通常以点分十进制表示,如192.168.1.1。IPv6是128位的地址,用于提供更多的地址空间,格…

基于蓝牙通信的手机遥控智能灯(论文+源码)

1.系统设计 灯具作为人们日常生活的照明工具为人们生活提供光亮,本次基于蓝牙通信的手机遥控智能灯设计功能如下: (1)用户可以通过蓝牙通信模块的作用下,在手机端遥控切换智能灯不同的工作模式; &#x…

阿里云百炼大模型生成贪吃蛇小游戏

阿里云百炼大模型生成贪吃蛇小游戏 为了在贪吃蛇游戏中添加背景音乐,我们可以使用Pygame的mixer模块。以下是修改后的代码,包含了背景音乐的加载和播放功能: 安装Pygame(如果你还没有安装): pip install p…

Pytorch | 利用FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集FGSM介绍算法原理算法特点应用场景局限性 FGSM代码实现FGSM算法实现攻击效果 代码汇总fgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR1…

3D Gaussian Splatting for Real-Time Radiance Field Rendering-简洁版

1. 研究背景与问题 传统的3D场景表示方法,如网格和点云,适合GPU加速的光栅化操作,但缺乏灵活性。而基于神经辐射场(NeRF)的表示方式,尽管质量高,但需要高成本的训练和渲染时间。此外&#xff0…

安卓环境配置及打开新项目教程,2024年12月20日最新版

1.去官网下载最新的Android Studio,网址:https://developer.android.com/studio?hlzh-cn 2.下载加速器,注册账号,开启加速器。网址:放在文末。 3.下载安卓代码,项目的路径上不能有中文,特别是…

不会心理描写,神态描写怎么办?

不会心理描写,神态描写怎么办? 文学创作,精微之处在于心理与神态之描绘。 一、夯实基础,积累素材。 欲使心理与神态描写生动,需先厚积薄发。博览群书,尤重经典之作。 “读万卷书,行万里路。…