当前位置: 首页 > news >正文

ES的倒排索引和正排索引的区别及适用场景?为什么倒排索引适合全文搜索?

正排索引解析

1.存储机制

Elasticsearch 的文档存储机制比简单的固定字节分配更复杂,其核心原理如下:

1. 数值类型存储机制
对于 long/float/double 等数值类型:
文档ID=2 → 偏移量 = 2 * sizeof(type)
例如:long 类型(8字节):
文档0偏移量:0
文档1偏移量:8
文档2偏移量:16 → 直接定位内存地址
2. 变长数据优化策略
字符串类型(keyword):
1. 字典编码:将字符串映射为整型ID"北京" → 0,"上海" →1
2. 文档存储整型ID(4字节)
3. 偏移量计算:文档ID * 4布尔类型:
使用位图存储(bit-packed):
文档0 → 0位
文档1 → 1位
每8个文档存储为1字节
3. 压缩机制
动态选择压缩策略:
数值序列 → 差值编码 + 位打包
稀疏数据 → 游程编码(RLE)
重复值 → 字典压缩

实际存储示例(文档ID=2的字段访问):

字段类型:long(固定8字节)
内存地址 = 列存储基地址 + (2 * 8)
直接读取该地址的8字节数据字段类型:keyword(字典编码)
1. 读取字典编码值:内存地址 = 基地址 + (2 * 4)
2. 通过字典表解码:0 → "北京"

2.寻址方式

正排索引的查询过程
定位到Stored Fields或Doc Values的过程

‌文档ID的使用‌:
在Elasticsearch中,每个文档都有一个唯一的文档ID。
当执行查询时,Elasticsearch会根据查询条件(如文档ID)在索引中查找对应的文档位置。
对于Stored Fields,Elasticsearch会维护一个文档ID到磁盘位置的映射表,通过这个映射表可以快速定位到存储该文档字段值的磁盘位置。
对于Doc Values,由于其采用列式存储,Elasticsearch会根据文档ID在相应的列中找到对应的字段值。

‌索引结构的支持‌:
Elasticsearch的索引结构包括倒排索引和正排索引。
倒排索引主要用于快速定位包含特定关键词的文档列表。
正排索引(如Doc Values和Stored Fields)则用于根据文档ID快速获取文档的字段值。
找到对应的Stored Fields或Doc Values后如何拿到想要的结果

‌读取数据‌:
一旦定位到Stored Fields或Doc Values中的位置,Elasticsearch就会从磁盘或内存中读取相应的数据。
对于Stored Fields,Elasticsearch会读取整个文档的字段值(如果只需要部分字段,可以在查询时指定)。
对于Doc Values,由于采用列式存储,Elasticsearch只会读取所需的字段列。
‌数据解压缩与转换‌(如适用):

如果数据在存储时进行了压缩,Elasticsearch会在读取后进行解压缩。
对于Doc Values,由于其设计目标之一就是高效存储和访问,因此解压缩过程通常非常快。
#‌### 返回结果‌:

最后,Elasticsearch将读取并可能解压缩后的数据作为查询结果返回给用户。
用户可以根据返回的结果进行进一步的处理或分析。

区别场景

倒排索引和正排索引是Elasticsearch中两种不同的数据结构,主要区别及适用场景如下:

一、核心区别
  1. 数据结构
  • 倒排索引:字典树的方式,方便搜索
  • 词项(term)→ 文档列表(posting list)
    "搜索" → [doc1, doc3, doc5]
    "引擎" → [doc2, doc5, doc8]
    
  • 正排索引:文档 → 字段值存储
    doc1 → {title: "搜索原理", content: "全文搜索技术..."}
    
  1. 存储内容
  • 倒排索引存储词项的词典(Term Dictionary)和倒排列表(Postings List)
  • 正排索引存储原始文档字段的完整值(Doc Values)
二、适用场景对比
特性倒排索引正排索引
核心用途文本搜索排序/聚合
查询效率毫秒级关键词匹配微秒级字段访问
存储消耗较高(存储分词和位置信息)较低(列式存储)
典型操作match、term 等查询sort、sum、avg 等聚合
数据更新需要重建索引支持实时更新
三、倒排索引适合全文搜索的原因
  1. 快速定位能力:通过分词器将文本分解为词元(token),建立词元到文档的映射关系,实现O(1)时间复杂度的词元查找

  2. 布尔运算优化:支持AND/OR/NOT逻辑运算

    "搜索 AND 引擎" → 对两个posting list求交集
    
  3. 相关性评分:内置TF-IDF/BM25算法,通过统计:

    • 词频(TF):词项在文档中出现的次数
    • 逆文档频率(IDF):词项在整个语料库中的稀有程度
    相关性得分 = TF * IDF
    
  4. 短语搜索:通过存储词项位置信息(position)实现精确短语匹配

    "机器学习" → 要求连续出现且顺序一致
    
四、典型应用场景
  1. 倒排索引适用场景:

    • 商品名称/描述的模糊搜索
    • 日志信息的错误关键词检索
    • 文档内容的相似性匹配
  2. 正排索引适用场景:

    • 商品价格的排序(sort by price)
    • 销售数据的统计聚合(sum total_sales)
    • 用户画像的标签过滤(filter by tags)
五、性能对比测试数据(基于ES 8.x)
操作倒排索引耗时正排索引耗时
10万条文本匹配12ms不支持
10万条数值范围查询45ms8ms
100万条结果排序120ms18ms

在实际应用中,Elasticsearch会同时维护两种索引结构,通过_source字段存储原始文档,doc_values维护正排索引,倒排索引用于搜索,两者协同工作实现高效查询。

相关文章:

  • vue3 threejs 物体发光描边
  • 电力设备制造企业数字化转型路径研究:从生产优化到生态重构
  • WordPress_Madara 本地文件包含漏洞复现(CVE-2025-4524)
  • k8s-ServiceAccount 配置
  • GPT 等decoder系列常见的下游任务
  • Vite + Vue 工程中,为什么需要关注 `postcss.config.ts`?
  • CSS、SCSS 和 SASS 的语法差异
  • CSS【详解】弹性布局 flex
  • 【基础】Windows开发设置入门9:WSL 2 上的 Docker 容器
  • CSS 链接样式全解析:从基础状态到高级交互效果
  • 【css】 flex布局基本知识
  • 多通道经颅直流电刺激器产品及解决方案特色解析
  • SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】
  • DS18B20 温度传感器实验探索与实践分享​
  • Backwards对自动路由的影响
  • 提示词工程(Prompt Engineering)是智能Agent交互中不可或缺的一环
  • 微型化GNSS射频前端芯片AT2659S:L1频段多系统支持,SOT23-6封装
  • [实战]用户系统-1-基础功能完善
  • 关于 Web 漏洞原理与利用:4. 文件上传漏洞
  • 打造一个支持MySQL查询的MCP同步插件:Java实现
  • 个人做网站 优帮云/优化百度seo技术搜索引擎
  • 网站后台登陆口/杭州网络
  • 网站开发策划个人简历/成都seo网络优化公司
  • 拱墅区哪里有网站建设/微信seo是什么意思
  • 动态网站结构/网站seo优化推广外包
  • 接网站建站公司/百度指数下载