Elasticsearch的倒排索引是什么?

文章目录

    • 什么是ES?
    • 什么是倒排索引?
    • 为什么叫做倒排索引?
    • 分词器的使用

什么是ES?

Elasticsearch是基于 Apache Lucene【lusen】的搜索引擎,支持Restful API风格【可以使用常见的HTTP请求来访问】,并且搜索速度很快,可以提供实时的搜索服务。

其实Elasticsearch的功能有很多,比如分布式存储、实时数据分析等很多方面。使用ES的好处有几点:

  1. 系统解耦。使用ES之后,我们的搜索功能就完全独立于数据库了,这样就不会影响到其他业务的性能。
  2. 数据分析。深度分析用户行为,用户对于哪个社区感兴趣,对于哪一条帖子感兴趣,对我们来说至关重要。
  3. 可以达到毫秒级的查询。因为使用的是倒排索引。

什么是倒排索引?

倒排索引创建流程

  1. 倒排索引会首先将文档(索引中的记录)进行分词,得到多组数组,类似于<词条,文档ID>;
  2. 然后将词条和文档ID关联,记录当前词条在多少个文档中存在。

在这里插入图片描述

倒排索引检索流程

  1. 通过Term Index定位:首先,系统使用Term Index(以FST(有限状态转换器)的形式保存在内存中)来快速定位到词典中可能包含目标词项的区块(Block)。由于Term Index只存储词项的前缀信息,并且使用了高效的FST结构,这一步的查找速度非常快,并且内存消耗很低。
  2. 在词典中查找:一旦定位到了可能的区块,系统就可以在词典(Term Dictionary)中按照其内部的数据结构(如排序数组、B树等)进行精确的查找。由于这一步的查找范围已经大大缩小,因此查找速度也很快。

通过这种方式,词项索引(Term Index)和词典(Term Dictionary)的结合使用可以在不消耗大量内存的情况下实现高效的词典查找,从而支持全文检索系统中的快速查找操作。

倒排索引数据结构
倒排索引由Trem Index, 字典和倒排列表组成。

  • Trem Index在内存中,保存前缀词,用FST这种数据结构维护。
  • 词汇表就是使用分词器拆分出来的词语,一般用B + 树来维护;
  • 倒排列表就是包含这个词语的文档信息集合。【文档信息包括:文档ID、词语出现频率、词语出现位置、词语开始结束位置等信息】

为什么叫做倒排索引?

想象一个场景,我们想要在很多篇文章中找到每一个关键词,常规的寻找方法是遍历每一篇文章,找有没有该关键词。是由文档指向词汇的。
但是在倒排索引中,我们记录了该词汇在哪些文档中出现过,是词汇指向文档的,所以叫做倒排索引。

分词器的使用

分词器是搜索引擎的一个核心组件,负责对文档内容进行分词(在 ES 里面被称为 Analysis),也就是将一个文档转换成 单词词典(Term Dictionary) 。单词词典是由文档中出现过的所有单词构成的字符串集合。为了满足不同的分词需求,分词器有很多种,不同的分词器分词逻辑可能会不一样。
● IK Analyzer: 最常用的开源中文分词器,Github 地址:https://github.com/medcl/elasticsearch-analysis-ik。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖店如何上架商品?这些细节要注意!否则罚款了别怪我没提醒你!

哈喽~我是电商月月 有朋友私信我一个问题&#xff0c;说是他上架商品后&#xff0c;被判类目错放了 情节严重扣了全部的2000块保证金 申述后没通过&#xff0c;还能要回来吗&#xff1f; 其实这种情况你确实是有错放的现象&#xff0c;误判的可能性很小&#xff0c;所以申述…

metasploit使用及内网笔记

1 基本操作 Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework&#xff0c;简称叫做MSF。Metasploit作为全球最受欢迎的工具&#xff0c;不仅仅是因为它的方便性和强大性&#xff0c;更重要的是它的框架。它允许使用者开发自己的漏洞脚本&#xff0c;从而进行…

进销存管理系统:食品批发零售迈向数字化未来-亿发

随着消费逐步复苏&#xff0c;食品批发零售行业也迎来了客流的回升&#xff0c;实体店重新焕发了生机。然而&#xff0c;随着数字化时代的来临&#xff0c;传统的食品批发零售企业面临着新的挑战和机遇。些企业正积极实施数字化转型&#xff0c;通过布局线上线下多业态的融合发…

Linux系统使用Docker部署MeterSphere并实现公网访问本地测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

Linux:查询类型的命令type

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 type命令是Linux中一个查询类型的命令&#xff0c;它可以查询name是alias别名、keyword关键字、function函数名、builtin内建命令名&#xff08;这很有用&#xff09;或…

嵌入式秋招项目(环境监测系统节点+云服务器+QT界面设计)

文章目录 1. 项目简介2. 项目文档与资源提供3. 项目实现效果 1. 项目简介 本项目实现的是环境监测系统&#xff0c;包括节点数据采集&#xff0c;云服务器部署&#xff0c;以及QT上位机界面设计&#xff0c;具体框图可见下图 节点端&#xff1a;采用STM32控制芯片&#xff0c;…

Latex绘制多行多TSNE列子图

Latex绘制多行多列TSNE子图 问题描述解决办法 问题描述 写论文需要绘制TSNE可视化图像。 解决办法 代码如下 \usepackage{subfigure}\begin{figure*}\centering\small\subfigure[aaa]{\includegraphics[width0.18\textwidth]{Figure/MFPT_v5_train_tsne_user0_bs0.png}}\su…

Linux gcc day2

mkdir -p 递归的创建目录 rm or rmdir&#xff1a; rmdir &#xff1a;是用来删除空目录的 实际上我们更加常用的是rm命令 rm可以删除普通文件,也可以删除目录&#xff0c;目录是从某次开始就是一棵树就是递归&#xff0c;所以就要递归删除 rm -r [文件名] 递归删除目录或者目…

讲解pwngdb的用法,以csapp的bomb lab phase_1为例

参考资料 Guide to Faster, Less Frustrating Debugging 什么情况下会使用gbd 需要逆向ELF文件时(掌握gdb的使用&#xff0c;是二进制安全的基本功)开发程序时&#xff0c;程序执行结果不符合预期 动态调试ELF文件可以使用另外一种方法&#xff1a;IDA的远程linux动态调试。个…

类似b站视频x配速播放3倍速播放 代码及步骤

1 xxx视频页面播放3倍速 步骤 1 f12 打开页面控制 2 选择console 加入下面代码 document.querySelector(video).playbackRate 3 这里实现了3倍速 问题&#xff1a;有些视频自动连播 每次都运行上面代码太麻烦 第二 第一次输入代码可能会不成功 需要手动输入 allow 同意即可…

【卷积神经网络进展】

打基础日常记录 基础知识1. 感知机2. DNN 深度神经网络&#xff08;全连接神经网络&#xff09;DNN 与感知机的区别DNN特点&#xff0c;全连接神经网络DNN前向传播和反向传播 3. CNN结构【提取特征分类】 基础知识 1. 感知机 单层感知机就是一个二分类器&#xff0c;接收输入…

STM32之HAL开发——QSPI协议介绍

QSPI协议 OSPI是Oueued SPl的简写&#xff0c;是Motorola公司推出的 SPI接口的扩展&#xff0c;比SPI应用更加广泛。在 SPI协议的基础上&#xff0c;Motorola公司对其功能进行了增强&#xff0c;增加了队列传输机制&#xff0c;推出了队列串行外围接口协议(即 OSPI协议)。OSPI…

提升K8S故障排除效率:详解Pod内抓包的高效策略!

在Kubernetes环境中&#xff0c;故障排除是管理者日常工作中不可或缺的一部分。随着容器化应用的广泛采用&#xff0c;需要一种高效的方法来诊断和解决Pod内部的问题。本文将重点介绍如何利用抓包技术提升Kubernetes环境中Pod内部故障排除的效率。 为什么需要Pod内抓包 在Kube…

【Canvas与艺术】使用贝塞尔曲线模拟勾画渐开线齿轮轮廓

【关键点】 利用三角函数计算出二次贝塞尔曲线控制点。 【图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>贝塞尔曲线模…

【Linux C | 多线程编程】线程的连接、分离,资源销毁情况

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-04-01 1…

【核心复现】同时考虑考虑孤岛与重构的配电网故障恢复运行策略

目录 主要内容 内容详情 1.问题引出 2.可控负荷 3.网络拓扑约束 4.算法流程 结果一览 1.原文结果 2.程序运行结果 下载链接 主要内容 该模型复现文章《同时考虑考虑孤岛与重构的配电网故障恢复运行策略》&#xff0c;以IEEE33配电网为分析对象&#xff0c;…

【c++初阶】类与对象(下)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

SAP Fiori开发中的JavaScript基础知识6 - 数组(Arrays)

1 背景 在本篇博客中&#xff0c;我将介绍JavaScript中数组&#xff08;Arrays&#xff09;的概念和用法。 2 数组 在JavaScript中&#xff0c;数组是一种特殊的对象&#xff0c;用于存储多个值在单个变量中。 2.1 创建数组 在JavaScript中&#xff0c;创建数组有以下有2种…

引用,内联函数,auto函数,指针nullptr

一&#xff1a;引用 1.1 该文章的引用是对上一篇引用的进行补充和完善 按理来说&#xff0c;double可以隐式转换为int&#xff0c;那起别名的时候为什么不可以类型转换呢&#xff1f; 那是因为&#xff0c;在类型转换的时候&#xff0c;会创建一个临时变量&#xff0c;让后再…

基于8086毫秒数码管计时器仿真设计

**单片机设计介绍&#xff0c;基于8086毫秒数码管计时器仿真设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086毫秒数码管计时器仿真设计概要主要关注于利用8086微处理器实现毫秒级别的计时功能&#xff0c;并通过数码管显示时间…