【ES】ElasticSearch搜索的底层原理?倒排索引和TF-IDF打分算法

article/2025/8/28 4:52:02

目录

  • Elasticsearch搜索的底层原理
  • 倒排索引及其结构
  • TF-IDF打分算法
  • 参考

Elasticsearch搜索的底层原理

ES搜索是分词后,每个字可以利用FST高速找到倒排索引的位置,并迅速获取文档id列表,大大的提升了性能,减少磁盘IO。

ES的搜索原理就是倒排索引 + TF-IDF打分算法。

倒排索引及其结构

传统的正向索引是通过文章,逐个遍历找到对应关键词的位置。

倒排索引也叫反向索引,是通过词找到词在文档中的出现位置。

在这里插入图片描述

Term(单词):就是单词,或者叫分词。

Term Index(单词索引):Term Index存储某些单词的前缀,它在内存中以 有限状态转移器FST(Finite State Transducers)的数据结构保存的,可以更快的找到目标单词。

Term Dictionary(单词字典):维护了单词Term的集合。Term Dictionary的单词非常多,所以会对它们进行排序,查找的时候就可以通过二分查找来查,不需要遍历整个Term Dictionary。

Posting List(倒排列表):记录了出现过某单词的所有文档ID,和单词在这些文档中出现的位置信息,每条记录叫一个倒排项(Posting),根据倒排列表,可以知道哪些文档包含目标单词。PostingList会使用Frame Of Reference(FOR)编码技术对里边的数据进行压缩,节约磁盘空间。(PS:实际的倒排列表中并不只是存了文档ID这么简单,还有一些其它的信息,比如:词频(Term出现的次数)、偏移量(offset)等,可以想象成是Python中的元组,或者Java中的对象)

在这里插入图片描述

倒排索引的Term Index实现是基于:FST(Finite State Transducer)数据结构。FST有两个优点:
1)空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;
2)查询速度快。O(len(str))的查询时间复杂度。

FST是将单词拆成单个字母存在节点上,每个节点存一个字母,根节点不存,从根节点出发到特定节点所经过的字母就可以组成目标单词,具体可以参考:
http://examples.mikemccandless.com/fst.py?terms=mop%2F0%0D%0Acat%2F1%0D%0Adog%2F2%0D%0Amemory%2F3%0D%0Amax%2F4&cmd=Build+it%21

FST基于字典树,可以参考:
https://blog.csdn.net/forever_dreams/article/details/81009580

TF-IDF打分算法

TF-IDF打分算法:
TF: 词频,每一个ID中包含的关键字越多,值越高。
DF: 文档频率,即包含关键字的文档ID个数。
IDF: 对DF取倒数:1/DF
TF-IDF分值: TF * IDF。TF-IDF 分值越高则搜索的优先级越高。

在这里插入图片描述
如上图hello出现的在ID中的次数为3,即 DF = 3 ,IDF = 1/3
id为1中 hello 出现1次,TF-IDF = 1/3 = 0.33
id为2中 hello 出现3次,TF-IDF = 3/3 = 1
id为3中 hello 出现1次,TD-IDF = 1/3 = 0.33

参考

https://mp.weixin.qq.com/s/iay2B4XGl5MuEqRBWqoipA

https://www.zhihu.com/question/323811022/answer/981341195

https://blog.csdn.net/qq_38929920/article/details/116527009


http://chatgpt.dhexx.cn/article/k0XDW6LN.shtml

相关文章

详细描述一下Elasticsearch搜索的过程

详细描述一下Elasticsearch搜索的过程 我们都知道es是一个分布式的存储和检索系统,在存储的时候默认是根据每条记录的_id字段做路由分发的,这意味着es服务端是准确知道每个document分布在那个shard上的。 相对比于CURD上操作,search一个比较…

es搜索引擎

ES的优势及使用场景、ES的功能及使用简介 简介: Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数 据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并…

ElasticSearch搜索引擎结合Mysql数据库,查询mysql数据

需要下载的东西 ElasticSearch——https://www.elastic.co/cn/downloads/elasticsearchLogstash(版本需要和ES对应)——https://www.elastic.co/cn/downloads/logstashmysql驱动jar包——https://dev.mysql.com/downloads/connector/j/ ElasticSearch 下载完ElasticSearch后…

ElasticSearch搜索引擎原理,都给你整理好了

“ 最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析,就对 ES 进行了一些学习。本文整理自我自己的一次技术分享。 本文不会关注 ES 里面的分布式技术、相关 API 的使用,而是专注分享下“ES 如何快速检索”这…

搜索引擎 Elasticsearch 的三大坑

搜索引擎的坑 ES 搜索引擎系列文章汇总: 一、别只会搜日志了,求你懂点原理吧 二、ES 终于可以搜到”悟空哥“了! 三、1W字|40 图|硬核 ES 实战 本文主要内容如下: 搜索引擎现在是用得越来越多了&#…

Elasticsearch搜索引擎安装使用及Java中使用

Elasticsearch(一)Docker搭建ES集群 关闭防火墙 后面我们要使用多个端口,为了避免繁琐的开放端口操作,我们关掉防火墙 # 关闭防火墙 systemctl stop firewalld.service# 禁用防火墙 systemctl disable firewalld.service安装Do…

elasticsearch搜索引擎搭建

课程作业的简单记录。 环境说明: 操作系统:windows 10Jdk:java 11Elasticsearch 7.16.0谷歌浏览器:97.0.4692.71(正式版本) (64 位) 一、目标: 1、淘宝抓取商品信息…

详解最热门搜索引擎——ES

一、产生背景 ​ 互联网发展早期的时候,对于一般的公司储存的数据量不是那么的大,所以很多公司更倾向于使用数据库去存储和查询数据,如:现在去MySQL中查询数据,大概的查询方式就是:select * from table wh…

Es搜索引擎概述和语句案例

ES概述 ES是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上,它提供了一个分布式多用户能力的搜索引擎,且ES支持RestFulweb风格的url访问。 全文检索:是指计算机索引程序通过扫描文章中的每一个词&#xf…

es之搜索详解

Elasticesearch的核心功能是搜索,现在介绍ES的搜索API及其用法。 为了有助于讲解,这里准备一些测试数据,把数据保存到文件website.json中: {"index":{"_index":"website","_id":"1…

Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合

Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合 一、Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索。 1、Elasticsearch 搜索入门 …

uAVS2 AVS2实时编码器

测试平台  PC平台:  i7-4790K, 4.5GHz;超线程开启; 8G内存, 2400MHz。  OS:Win8.1  手机平台:  华为荣耀6。 测试序列  AVS2通测序列 测试指标 编码性能:各种preset下相对RD12.…

谁将引领新一代视频编码标准:HEVC、AVS2和AV1性能对比报告

2013年1月,新一代视频编码标准H.265/HEVC正式发布。然而它并没有像H.264那样占据市场。在这期间,AVS2、AV1等竞争者也在逐步推出,究竟谁才能引领新一代视频编码标准呢? 作者 | 李旭峰 王振宇 王荣刚 编辑 | 李旭峰 本…

关于avs和avs2编码stuffing bit的一点理解

avs和avs2编码标准关于结尾有一点和h264的不同。 比如一段视频通过avsx编码后,如果最后1位是字节对齐的(也就是说编码后的流刚好是8*n bit),那么就要在最后1bit后面再增加一字节0x80(1000 0000). 如果最后1bit没有对齐&#xff0c…

AVS2运动搜索方法简介

AVS2配置文件中有这一项: FME: 3 #Fast Motion Estimation method (1:DIA, 2:HEX,3:UMH,4:TZ) 表示采用不同的运动搜索方法,下面简单的介绍一下这几种方法。 0.ESA.全像素运动估计搜索算法(不使用) 这…

一个有趣的avs编码器(注意,是avs,而不是avs2噢)

本章附件是一个清华大学写的关于avs编解码器: https://download.csdn.net/download/weixin_43360707/87793302 该编码器遵循了stuffing bit: 打开文件夹后,如下: 可以看出这个是个跨平台的工程,提供了windows vs2015的工程文件sln&#x…

新一代视频编码标准:HEVC、AVS2和AV1性能对比报告

转自:http://media.pkusz.edu.cn/achievements/?p138 H.265/HEVC 距离H.265/HEVC标准正式发布已经有4年多的时间,虽然其压缩效率比H.264/AVC高出一倍,可以为视频公司节约带宽成本,但H.264仍是目前最流行的视频编码格式。除了复杂…

【AVS系列】AVS2参考软件RD17.0

Date: 2019-4-16 前言 AVS2标准从2017年开始批准使用,至今也有2年了,传说这个标准是对标H265,压缩效率在一些场景下的压缩率优于H.265,但是当前该标准的推广使用仍旧较少,主要用于广电和卫星电视传输。本文主要对AVS2标…

AVS2实时编码器xavs2的运行

Windows10 下 AVS2实时编码器xavs2的下载,编译,运行 xavs2的下载网址: https://gitee.com/pkuvcl/xavs2 可以选择master版本,或者tag版本,具体区别我也不太清楚,我的是1.3版本,我是下载最先的t…

【X265】Win10环境编译FFmpeg,集成 x264、x265、avs2

在Win10中编译完x264、x265后,开始编译FFmpeg,并将集成这几个主流视频编解码算法 准备 系统环境: Win10 VS2019 编译环境: Mingw64 msys2 cmake yasm nasm 编码算法:x264_161、x265_3.3、avs2(xavs2…