讲师中心 微信公众号
AI工具推荐 视频效率加速

Elasticsearch 查询原理详解:倒排索引是如何工作的

千辰姑娘_7476

千辰姑娘_7476

发布时间:2026-05-12 17:06:02

|

501人浏览过

|

来源于php中文网

原创

Elasticsearch通过倒排索引实现毫秒级全文检索:先经Analyzer分词查词典定位倒排列表,再解压获取文档ID及位置信息,接着多词项布尔运算合并结果,然后用BM25公式基于TF/IDF等评分排序,最后通过正排索引加载原文并高亮。

elasticsearch 查询原理详解:倒排索引是如何工作的 - php中文网

当您向Elasticsearch发起一个全文查询请求时,系统并非逐条扫描所有文档进行匹配,而是直接利用预构建的倒排索引结构快速定位目标文档。这种机制是Elasticsearch实现毫秒级响应的核心所在。以下是倒排索引在查询过程中实际运作的关键环节:

一、词项解析与词典查找

查询字符串首先被送入Analyzer进行标准化处理,包括分词、小写转换、停用词过滤等步骤,生成一组规范化的词项(Term)。随后,Elasticsearch在内存中加载的词项索引(Term Index)中执行前缀查找或二分搜索,快速定位到词项在词项字典(Term Dictionary)中的物理偏移位置。

1、将用户输入的查询语句"elasticsearch inverted index"送入标准分析器standard analyzer。

2、输出三个规范化词项:"elasticsearch"、"inverted"、"index"。

3、对每个词项,在Term Index中查找其在Term Dictionary中的起始地址。

4、根据地址跳转至Term Dictionary,读取该词项对应的倒排列表指针。

二、倒排列表获取与解压

词项字典中存储的并非完整倒排列表,而是一个指向磁盘上压缩倒排数据块的指针。Elasticsearch依据该指针读取对应段(Segment)中的倒排文件,并使用如FOR(Frame of Reference)编码或RLE(Run-Length Encoding)等算法实时解压,还原出原始文档ID序列及附加元数据(TF、Position、Offset)。

1、从Segment_001的.fdt文件中定位到"index"词项的倒排数据块。

2、读取压缩后的文档ID差分序列:[1, 3, 2, 5]。

3、执行差分解码,得到绝对文档ID:[1, 4, 6, 11]。

4、同步解压并加载各文档中"index"出现的位置信息(如[2, 8]表示第2和第8个token位置)。

三、多词项布尔运算与结果合并

对于含多个查询词的语句(如"elasticsearch AND index"),Elasticsearch分别获取各词项的倒排列表后,在内存中执行集合运算。AND操作对应交集计算,OR操作对应并集,NOT操作对应补集。运算过程采用跳跃指针(Skip List)加速遍历,避免线性扫描整个列表。

1、获取"elasticsearch"的文档ID列表:[1, 2, 3, 5, 7]。

2、获取"index"的文档ID列表:[2, 4, 5, 6, 11]。

3、启动双指针归并算法,比较两列表元素:当指针分别指向2和2时匹配成功;继续推进至5和5再次匹配。

4、输出交集结果:[2, 5]作为初步命中文档集。

四、相关性评分与排序

命中文档ID列表仅是中间结果。Elasticsearch进一步读取各文档的字段长度、词频(TF)、逆文档频率(IDF)、字段权重等信息,代入BM25评分公式计算相关性得分。该过程在倒排列表中已预存的TF和文档长度信息支持下完成,无需回查原始文档内容。

1、对文档2,读取"elasticsearch"的TF值(假设为4)、字段总token数(假设为120)。

2、查询全局词频统计,获取"elasticsearch"在全部文档中的DF值(假设为187)。

3、结合索引配置的k1=1.2、b=0.75参数,代入BM25公式计算初始得分。

4、若查询含多个词项,对各词项得分加权求和,生成最终排序依据。

五、原始文档加载与高亮渲染

经排序后的前N个文档ID被提交至协调节点,触发Fetch阶段。此时系统不再依赖倒排索引,而是通过正排索引(Doc Values 或 _source 字段)直接读取原始JSON内容。若启用高亮,系统依据倒排列表中存储的Offset位置信息在原文本中标记匹配片段。

1、根据文档ID 2,从_segment_001.doc文件中读取存储的_source JSON对象。

2、提取"content"字段原始文本:"Elasticsearch uses an inverted index for fast search..."。

3、调用highlighter模块,依据"index"词项的Offset [18, 23]区间,在文本中包裹标签。

4、返回包含高亮HTML片段的响应体。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
elk是什么意思
elk是什么意思

ELK指的是Elasticsearch、Logstash和Kibana三个开源软件的组合。想了解更多elk的相关内容,可以阅读本专题下面的文章。

3060

2023.12.18

Elasticsearch 从入门到搜索引擎实战
Elasticsearch 从入门到搜索引擎实战

本专题带你从零掌握 Elasticsearch 分布式搜索引擎。深入解析倒排索引核心原理,涵盖单机与 Docker 环境搭建、IK 中文分词器配置及索引文档的 CRUD 操作。通过丰富的 Query DSL 实战案例,详解布尔查询、聚合分析与高亮显示,助你快速构建毫秒级响应的企业级高性能搜索服务。

39

2026.05.12

Elasticsearch 高级查询与性能优化
Elasticsearch 高级查询与性能优化

本专题深入解析 Elasticsearch 高级查询与性能优化实战。详解 Bool 复合查询、复杂过滤及聚合分析技巧,解决多条件精准检索难题。从索引设计、JVM 调优到硬件规划,全方位分享 Filter 缓存、深分页优化及集群架构调优策略,助你突破性能瓶颈,打造毫秒级响应的高并发企业级搜索服务。

64

2026.05.12

Elasticsearch 企业级开发与运维实践专题
Elasticsearch 企业级开发与运维实践专题

本专题聚焦 Elasticsearch 企业级开发与运维实战。深入解析生产环境集群架构规划、节点角色分离及冷热数据分层策略。涵盖索引生命周期管理(ILM)、安全权限控制、快照备份及全链路监控告警体系搭建。通过分享高可用部署与故障排查经验,助你构建安全、稳定且可扩展的企业级分布式搜索平台。

61

2026.05.12

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

80

2026.10.10

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

40

2026.10.10

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

20

2026.10.10

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

20

2026.10.10

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

20

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn