ES倒排索引?正排索引?存储结构?怎么用的?快在哪?

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ES倒排索引?正排索引?存储结构?怎么用的?快在哪?

Elasticsearch 的倒排索引和正排索引

Elasticsearch 是一个基于 Lucene 构建的开源搜索引擎,它广泛应用于全文搜索、日志分析等场景。Elasticsearch 中的索引机制是其高效搜索能力的关键所在,主要包括倒排索引和正排索引。

倒排索引(Inverted Index)

倒排索引是 Elasticsearch 中用于快速全文搜索的关键数据结构。它的工作原理是将文档中的内容分解成一系列的单词(或称为词项),然后为每个词项创建一个索引,指向包含该词项的所有文档。

存储结构

倒排索引主要由两个部分组成:

  1. 「词典(Term Dictionary)」:存储所有词项,通常会对词项进行排序,以便快速查找。
  2. 「倒排列表(Postings List)」:对于词典中的每个词项,都有一个对应的倒排列表,记录了包含该词项的所有文档的ID,以及词项在每个文档中的位置信息等。

使用方式

当执行搜索查询时,Elasticsearch 会将查询字符串分解成词项,然后在词典中查找这些词项,获取对应的倒排列表,最后通过合并这些倒排列表来找到包含所有搜索词项的文档。

速度优势

倒排索引的速度优势在于:

  • 「高效的检索」:由于词项是预先索引好的,因此可以快速定位到包含特定词项的文档。
  • 「空间压缩」:通过词项的去重和压缩存储,减少了存储空间的需求。
  • 「排序和相关性打分」:倒排索引可以快速进行相关性打分和结果排序,因为它保存了词项在文档中的位置信息。

正排索引(Forward Index)

正排索引是文档到词项的映射。在 Elasticsearch 中,正排索引通常用于存储文档的结构化数据,比如数字、日期等,以便进行精确值的过滤、排序和聚合操作。

存储结构

正排索引的存储结构通常是一个文档ID到字段值的映射表,每个文档ID对应一个或多个字段的值。

使用方式

当需要对特定字段进行过滤、排序或聚合时,Elasticsearch 会使用正排索引来快速访问这些字段的值。

速度优势

正排索引的速度优势在于:

  • 「快速的字段访问」:正排索引允许直接访问文档的字段值,这对于排序和聚合操作尤其重要。
  • 「内存效率」:正排索引通常存储在内存中,这样可以提供快速的数据访问。

总结

Elasticsearch 中的倒排索引和正排索引各自有不同的优势和使用场景。倒排索引主要用于全文搜索,而正排索引则用于结构化数据的过滤、排序和聚合。两者的结合使得 Elasticsearch 能够提供强大而灵活的搜索和分析能力。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
存储 自然语言处理 算法
ES高频面试问题:一张图带你读懂 Elasticsearch 中“正排索引(正向索引)”和“倒排索引(反向索引)”区别
ES高频面试问题:一张图带你读懂 Elasticsearch 中“正排索引(正向索引)”和“倒排索引(反向索引)”区别
ES高频面试问题:一张图带你读懂 Elasticsearch 中“正排索引(正向索引)”和“倒排索引(反向索引)”区别
|
6月前
|
JSON 自然语言处理 数据格式
5.索引原理
5.索引原理
|
5月前
|
存储 自然语言处理 NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之倒排索引(三)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之倒排索引(三)
|
存储 缓存 算法
倒排索引:ES倒排索引底层原理及FST算法的实现过程(二)
倒排索引:ES倒排索引底层原理及FST算法的实现过程(二)
倒排索引:ES倒排索引底层原理及FST算法的实现过程(二)
|
存储 自然语言处理 算法
倒排索引:ES倒排索引底层原理及FST算法的实现过程(一)
倒排索引:ES倒排索引底层原理及FST算法的实现过程
倒排索引:ES倒排索引底层原理及FST算法的实现过程(一)
|
存储 算法 对象存储
倒排索引:ES倒排索引底层原理及FST算法的实现过程(三)
倒排索引:ES倒排索引底层原理及FST算法的实现过程(三)
倒排索引:ES倒排索引底层原理及FST算法的实现过程(三)
|
存储 关系型数据库 MySQL
索引结构与检索原理|学习笔记
快速学习索引结构与检索原理
110 0
索引结构与检索原理|学习笔记
|
存储 SQL 算法
FAQ系列 | B+树索引和哈希索引的区别
FAQ系列 | B+树索引和哈希索引的区别
223 0
FAQ系列 | B+树索引和哈希索引的区别
|
存储 SQL 关系型数据库
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
664 0
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它