ElasticSearch搜索引擎之倒排索引及其底层算法

news2025/6/12 14:40:57

文章目录

    • 一、搜索引擎
      • 1、什么是搜索引擎?
      • 2、搜索引擎的分类
      • 3、常用的搜索引擎
      • 4、搜索引擎的特点
    • 二、倒排索引
      • 1、简介
      • 2、为什么倒排索引不用B+树
        • 1.创建时间长,文件大。
        • 2.其次,树深,IO次数可怕。
        • 3.索引可能会失效。
        • 4.精准度差。
    • 三. 倒排索引
    • 四、算法
      • 1、Term Index的算法
      • 2、 PostingList的算法
        • 2.1、为什么要用到压缩算法?
        • 2.2、PostingList用的两种算法
          • 2.2.1、FOR压缩算法(Frame Of Reference)
          • 2.2.2、RBM算法(Roaring bitmaps)
          • 2.2.3、容器转换总结

一、搜索引擎

1、什么是搜索引擎?

搜索引擎就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术。如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等。
—百度百科

2、搜索引擎的分类

搜索引擎分类一般是按搜索方式分类的:

  • 全文搜索引擎:一般是在没有明确检索意图情况下进行的索引,这种搜索方式方便、简捷,并容易获得所有相关信息,但搜索到的信息过于庞杂。例如:百度、搜狗、谷歌等
  • 元搜索引擎:不同的搜索引擎性能及其信息反馈能力各有不同。而元搜索引擎就是利用其他搜索引擎之间的优势互补进行搜索的。
  • 垂直搜索引擎:有明确搜索意图的情况下进行的检索。例如:汽车之家、小米有品。
  • 目录搜索引擎:一般是网站内部常用的检索方式。

3、常用的搜索引擎

对于程序员来说,搜索引擎可是开发面试中经常碰到的。例如:LuceneNutchElasticSearchSolandraIndexTankCompassSolrLIREEgothor等等。

4、搜索引擎的特点

  • 快:他们都有高效的压缩算法,能够快速编码解码。
  • 准确:查询的信息准确率比较高。
  • 召回率高
    • 底层算法采用了FOR压缩算法跟RBM算法。解决了速度问题。
    • 底层采用了使用了BM25和TF-IDF算法。提高了准确率和召回率。例如:ElasticSearch、Lucene使用了倒排索引,最底层的算法是FOR压缩算法跟RBM算法。

二、倒排索引

1、简介

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。[百度百科]
啥意思?意思是,倒排索引是专门用来通过文件或字符串进行定位文件位置的索引。也就是通过字符串或者是文件内容来搜索文件的索引。

2、为什么倒排索引不用B+树

说起这个,就要不得不提一下数据库的索引,数据库的索引大家都知道,底层数据结构大都是B树或者是B+树。
拿mysql为例,一张数据表:

id goods_name ……
1 小米 ……
2 小米至尊纪念版 ……
3 小米 NFC 手机 ……
4 蓝牙耳机 ……
5 小米耳机 ……
1.创建时间长,文件大。

分别以id建立索引和goods_name建立索引。通过B+的数据结构,能够发现,B+树存储索引信息了,当咱们以goods_name建立索引就会发现,索引文件会特大。当咱们的索引字段数据越多那索引文件就会越大。建立索引时间也就越长。
别忘了,goods_name这只是咱们制造的数据,一般倒排索引建立索引的字段都是大型文本。

2.其次,树深,IO次数可怕。

随着数据越多,比起规律的id字段,goods_name字段数据长度不一致,为了不增加索引树的深度,也就意味,需要增加分支数量。分支数量一多,那就意味每层树的IO判断增加,效率反而下降。极端下,可能会出现层数N*分支数量M的次数IO读写。

3.索引可能会失效。
4.精准度差。

在这里插入图片描述
由此可见

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

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

相关文章

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…

12.找到字符串中所有字母异位词

🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…

零基础设计模式——行为型模式 - 责任链模式

第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…