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

es中常规的根据字段查询时走什么索引(说明:「常规的根据字段查询」不包含分词查询)

在Elasticsearch中,“常规的根据字段查询”且不涉及分词的查询(如精确匹配、范围查询),主要依赖以下索引机制:

一、核心索引类型及适用场景

字段类型索引结构典型查询方式应用场景
keyword倒排索引(未分词)termtermsexists订单ID、状态码、标签等精确匹配
数值/日期BKD树索引(多维空间划分)range><聚合价格区间、时间范围筛选
boolean倒排索引(二元值)term状态标记(如is_active=true
ip特殊编码倒排索引termprefixcidrIP地址过滤与网段查询

:所有精确匹配类查询均跳过文本分析(Analysis)环节,直接基于原始值检索。

二、查询执行流程(以keyword为例)

  1. 值标准化
    查询值"ES2025" → 按字段类型处理(如keyword保持原值);
  2. 倒排索引检索
    定位词项词典(Term Dictionary)中的"ES2025",获取其倒排列表(Posting List);
  3. 结果返回
    直接返回匹配文档ID集合,无相关性评分(因filter上下文不计算得分)。

三、性能优化关键点

  1. 索引设计

    • keyword替代text:对无需分词的字段(如ID、枚举值)显式定义为keyword,避免无效分词开销;
    • 禁用norms:对仅用于过滤的keyword字段设置"norms": false,减少磁盘占用;
  2. 查询策略

    • 使用filter上下文:利用位图(BitSet)缓存结果,重复查询速度提升100倍+;
      "bool": {"filter": [  // 无评分计算{"term": {"status": "published"}},{"range": {"price": {"gte": 100}}}]
      }
      
    • 分片路由优化:对高频过滤字段(如user_id)设置routing_path,使查询集中到特定分片;
  3. 存储压缩

    • doc_values启用:默认开启,支持对keyword/数值字段高效聚合、排序;
    • 列式存储优化:BKD树索引对数值范围查询采用数据压缩,减少I/O压力。

四、注意事项

  • text字段的精确匹配陷阱
    即使使用term查询text字段,ES仍会先分词再匹配(如"Quick Fox"被拆分为["quick","fox"]),导致无法精确命中 → 必须改用.keyword子字段。
  • 高基数keyword字段
    值基数过高(如user_id)时,需监控堆内存,避免Fielddata膨胀。

五、总结

常规非分词字段查询的核心索引机制:

  • 精确匹配 → keyword类型倒排索引(值完全匹配);
  • 范围查询 → 数值/日期类型BKD树索引(高效空间划分);
    优化本质:跳过文本分析、利用列式存储与缓存,实现亚毫秒级响应。
http://www.xdnf.cn/news/14648.html

相关文章:

  • 2025-06-22 思考-人的意识与不断走向死亡的过程
  • 文心一言(ERNIE Bot):百度打造的知识增强大语言模型
  • 端侧调用云存储实现头像存储
  • Redis快的原因
  • 扫雷中的数学原理
  • 如何用AI开发完整的小程序<9>—UI自适应与游戏页优化
  • 基于python代码的通过爬虫方式实现TK下载视频(2025年6月)
  • 【期末速成】编译原理
  • 【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)
  • C++ 中 QVector 的判断与操作
  • 【Linux第四章】gcc、makefile、git、GDB
  • TensorFlow 安装与 GPU 驱动兼容(h800)
  • 编程基础:调用访问
  • 【设计模式】4.代理模式
  • 基于YOLO的智能车辆检测与记录系统
  • `customRef` 在实战中的使用:防抖、计算属性缓存和异步数据获取
  • 【StarRocks系列】建表优化
  • SpringBoot电脑商城项目--显示勾选+确认订单页收货地址
  • ZooKeeper 3.9.2 集群安装指南
  • Jupyter notebook调试:设置断点运行
  • Kubernetes 集群性能优化实战:从资源分配到调度策略
  • `teleport` 传送 API 的使用:在 Vue 3 中的最佳实践
  • 为WIN10微软输入法的全角切换Bug禁用Shift+Space组合键
  • C++ unordered_set基础概念、对象创建、赋值操作、数据插入、数据删除、代码练习 1 2
  • 前端开发面试题总结-vue3框架篇(二)
  • 《map和set的使用介绍》
  • stm32串口(uart)2转发到串口(uart)3实现
  • Qt实战:自定义二级选项框 | 附完整源码
  • 为车辆提供路径规划解决方案:技术演进、挑战与未来蓝图
  • 网络编程及原理(六):三次握手、四次挥手