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

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

Elasticsearch 的倒排索引和正排索引

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

倒排索引(Inverted Index)

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

存储结构

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

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

使用方式

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

速度优势

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

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

正排索引(Forward Index)

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

存储结构

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

使用方式

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

速度优势

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

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

总结

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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
数据安全/隐私保护 iOS开发 MacOS
Mac中使用命令行来加密压缩zip文档
Mac中使用命令行来加密压缩zip文档
780 0
|
存储 自然语言处理 算法
ES高频面试问题:一张图带你读懂 Elasticsearch 中“正排索引(正向索引)”和“倒排索引(反向索引)”区别
ES高频面试问题:一张图带你读懂 Elasticsearch 中“正排索引(正向索引)”和“倒排索引(反向索引)”区别
ES高频面试问题:一张图带你读懂 Elasticsearch 中“正排索引(正向索引)”和“倒排索引(反向索引)”区别
|
SQL 搜索推荐 测试技术
【Havenask实践篇】完整的性能测试
Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。性能测试的目的在于评估搜索引擎在各种负载和条件下的响应速度、稳定性。通过模拟不同的用户行为和查询模式,我们可以揭示潜在的瓶颈、优化索引策略、调整系统配置,并确保Havenask在用户数量激增或数据量剧增时仍能保持稳定运行。本文举例对Havenask进行召回性能测试的一个简单场景,在搭建好Havenask服务并写入数据后,使用wrk对Havenask进行压测,查看QPS和查询耗时等性能指标。
66687 6
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
人工智能 供应链 程序员
# 2026智能体元年爆发:不仅是效率革命,更是六大核心行业的“基因重组”
当我们在2026年讨论Agent(智能体)时,我们不再讨论它“是什么”,而是关注它“改变了什么”。从软件开发的“端到端交付”到医疗健康的“全生命周期管理”,智能体正在从走向千行百业,将行业渗透率从15%推至全球60%。本文将深度解析智能体如何引发新的激动人心的产业革命。
571 0
|
7月前
|
应用服务中间件 网络安全 nginx
Docker部署OpenClaw(Clawdbot) 绑定域名HTTPS开启公网访问 附阿里云快速部署步骤
在2026年AI自动化工具普及的背景下,OpenClaw(曾用名Moltbot、Clawdbot)凭借强大的任务执行能力、多场景适配特性,成为个人与轻量团队打造专属AI助手的热门选择。然而传统部署方式常受限于服务器已有服务,无法直接重装镜像,而Docker容器化部署完美解决这一痛点——通过隔离环境实现OpenClaw独立运行,不影响现有服务,同时支持灵活迁移与扩展。本文将详细拆解Docker部署OpenClaw的全流程,包含SSL证书申请、Nginx反向代理、域名绑定、HTTPS配置等关键步骤,所有代码命令可直接复制执行,同时新增阿里云OpenClaw快速部署步骤,满足不同用户的部署需求
5251 1
|
存储 安全 Java
ThreadLocal - 原理与应用场景详解
ThreadLocal是Java中用于实现线程隔离的重要工具,为每个线程提供独立的变量副本,避免多线程数据共享带来的安全问题。其核心原理是通过 ThreadLocalMap 实现键值对存储,每个线程维护自己的存储空间。ThreadLocal 广泛应用于线程隔离、跨层数据传递、复杂调用链路的全局参数传递及数据库连接管理等场景。此外,InheritableThreadLocal 支持子线程继承父线程的变量值,而 TransmittableThreadLocal 则解决了线程池中变量传递的问题,提升了多线程上下文管理的可靠性。深入理解这些机制,有助于开发者更好地解决多线程环境下的数据隔离与共享挑战。
2342 44
|
10月前
|
云安全 人工智能 安全
云安全自动化:当攻击来敲门,我们用代码说“不”
云安全自动化:当攻击来敲门,我们用代码说“不”
413 17
|
负载均衡 Java 应用服务中间件
杂项10
Spring Cloud Alibaba 与 Spring Cloud 均基于 Spring Boot 构建微服务,遵循相同规范且组件可协同使用。区别在于,Spring Cloud Alibaba 使用 Nacos 实现服务发现与配置管理,推荐 Sentinel 作为断路器,并支持 Dubbo 与 Feign 远程调用。Nginx 可通过配置 upstream 实现负载均衡,作为反向代理,其“反向”体现在外网通过 Nginx 访问内部服务器。
|
搜索推荐 算法 数据库
正排索引 vs 倒排索引 - 搜索引擎具体原理
正排索引 vs 倒排索引 - 搜索引擎具体原理
2391 5

热门文章

最新文章