首页 > 其他分享 >Elasticsearch底层的倒排索引技术是什么?

Elasticsearch底层的倒排索引技术是什么?

时间:2024-10-16 18:11:19浏览次数:1  
标签:搜索 词条 倒排 索引 文档 Elasticsearch id

倒排索引

倒排索引的概念是基于MySQL这样的正向索引而言的。

技术应用在Elasticsearch,得益于倒排索引,用来实现高性能的搜索功能

正向索引

例如有一张名为tb_goods的表:

id title price
1 小米手机 3499
2 华为手机 4999
3 华为小米充电器 49
4 小米手环 49
... ... ...

其中的id字段已经创建了索引,由于索引底层采用了B+树结构,因此我们根据id搜索的速度会非常快。但是其他字段例如title,只在叶子节点上存在。

因此要根据title搜索的时候只能遍历树中的每一个叶子节点,判断title数据是否符合要求。

比如用户的SQL语句为:

select * from tb_goods where title like '%手机%';

那搜索的大概流程如图:

说明:

  • 1)检查到搜索条件为like '%手机%',需要找到title中包含手机的数据
  • 2)逐条遍历每行数据(每个叶子节点),比如第1次拿到id为1的数据
  • 3)判断数据中的title字段值是否符合条件
  • 4)如果符合则放入结果集,不符合则丢弃
  • 5)回到步骤1

综上,根据id精确匹配时,可以走索引,查询效率较高。而当搜索条件为模糊匹配时,由于索引无法生效,导致从索引查询退化为全表扫描,效率很差。

因此,正向索引适合于根据索引字段的精确搜索,不适合基于部分词条的模糊匹配。

而倒排索引恰好解决的就是根据部分词条模糊匹配的问题。

倒排索引

倒排索引中有两个概念

  • 文档(Document):每一条数据就是一个文档。

例如一个网页、一个商品信息

  • 词条(Term):文档按照语义分成的词语

例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

倒排索引创建流程

创建倒排索引是对正向索引的一种特殊处理和应用,流程如下

  1. 先把文档进行分词,形成词条与文档的ID对应关系,为词条建立索引,而且具备唯一性
  2. 对搜索内容进行分词,把分词后的关键字列表,更具关键字去词条中匹配,再找到对应的文档ID
  3. 让后根据文档ID列表,找到对应的文档信息

此时形成的这张以词条为索引的表,就是倒排索引表,两者对比如下:

正向索引

id(索引) title price
1 小米手机 3499
2 华为手机 4999
3 华为小米充电器 49
4 小米手环 49
... ... ...

倒排索引

词条(索引) 文档id
小米 1,3,4
手机 1,2
华为 2,3
充电器 3
手环 4

倒排索引的搜索流程

倒排索引的搜索流程如下(以搜索"华为手机"为例)

流程描述:

1)用户输入条件"华为手机"进行搜索。

2)对用户输入条件分词,得到词条:华为手机

3)拿着词条在倒排索引中查找(由于词条有索引,查询效率很高),即可得到包含词条的文档id:1、2、3

4)拿着文档id到正向索引中查找具体文档即可(由于id也有索引,查询效率也很高)。

虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。

正向和倒排

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程
  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

正向和倒排优缺点

正向索引

  • 优点:
    • 可以给多个字段创建索引
    • 根据索引字段搜索、排序速度非常快
  • 缺点:
    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引

  • 优点:
    • 根据词条搜索、模糊搜索时,速度非常快
  • 缺点:
    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序

标签:搜索,词条,倒排,索引,文档,Elasticsearch,id
From: https://www.cnblogs.com/yqiang/p/18470488

相关文章

  • 倒排索引及ES相关概念对比MySQL
    一、倒排索引1、先把文档内容进行分词,形成词条与文档ID的对应关系,叫做词条库,词条具备唯一性,建立索引2、对搜索内容进行分词,分词后得到一个关键词列表,根据关键词去词条库中匹配,在找对应的文档ID列表3、然后根据文档ID列表,找到对应的文档信息对比:   二、ES相关概念对比My......
  • Elasticsearch相关概念对比mysql
    一、简介ElasticSearch是强大的搜索和分析引擎。能快速存储、检索和处理大量数据,提供实时搜索结果,擅长处理复杂查询,助力企业从海量数据中获取有价值信息,优化业务决策和提升用户体验。二、术语2.1索引Elasticsearch中的索引类似MySQL中的表,是相同类型文档的集合。它如同表......
  • 倒排索引
    什么是倒排索引倒排索引(InvertedIndex)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。倒排索引的结构倒排索引通常包含两个主要部分:词项字典(TermDictionary):存储所有词项及其相关信息(如词频、位置等)。倒排列表(Posting......
  • 使用博查Web Search API获取搜索引擎的网页链接和文本摘要,给AI/RAG应用增加联网搜索功
    为什么需要WebSearchAPI?各类AINative应用、RAG应用、AIAgent智能体在开发过程都会遇到联网获取互联网网页信息的需求,此时需要得到原始网页链接以及文本摘要,以用于给pipeline中的大模型作为上下文总结使用。但目前仅国外的搜索引擎例如Bing、Google提供此类WebSearch......
  • Elasticsearch
    ElasticsearchES是一个可以实现复杂搜索的全文检索服务器一、安装1.安装Elasticsearch指定分配521m内存,可以改为256m,安装完成访问9200端口测试dockerrun-d\--namees\-e"ES_JAVA_OPTS=-Xms512m-Xmx512m"\-e"discovery.type=single-node"\-ves-data:/us......
  • elasticsearch之倒排索引
    倒排索引elasticsearch有如此高的搜索性能,无异于使用了倒排索引。倒排索引中有两个重要的概念:文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我......
  • 倒排索引
    倒排索引:‌倒排索引(InvertedIndex)‌是一种索引方法,主要用于存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是由属性值来确定记录的位置,而不是由记录来确定属性值,因此被称为倒排索引。倒排索引被广泛应用于‌文档检索系统中,是文档检索系统中常用的数据结......
  • 软件测试笔记|数据库基础|创建索引的原则
    创建数据库索引有以下原则:一、选择合适的列创建索引1.选择经常用于查询条件的列:如果某一列经常在WHERE子句中作为条件出现,那么为该列创建索引可以大大提高查询速度。例如,在一个员工表中,如果经常根据员工的姓名进行查询,那么为“姓名”列创建索引是一个不错的选择。2.选择......
  • Elasticsearch(一)
    ES相关概念对比MySQLElasticsearch(ES):用于数据存储、计算和搜索安装ES:ES是部署在Linux操作系统下的,可以通过Docker去部署:首先引入ES的镜像,可以官网下载或者用dockerpull拉取镜像可以执行该命令,注意es版本dockerrun-d\--namees\-e"ES_JAVA_OPTS=-Xms512m-Xmx512......
  • ElasticSearch的倒排索引和相关概念与MySQL的对比
    ElasticSearch的倒排索引和相关概念在用关系型数据库时,一些频繁用作查询条件的字段我们都会去建立索引来提升查询效率。在关系型数据库中,我们一般都采用B树索引进行存储,所以B树索引也是我们接触比较多的一种索引数据结构,但是在使用过程中,我们发现无法使用关系型数据库进行类......