You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch通过_id查询时Ids查询与Term查询的区别及选型

性能差异

  • 单条ID查询场景下二者性能差距不大,Ids查询的性能略优于针对_id的Term查询,核心差异来自查询链路:
    • Ids查询是ES专门为ID查询场景优化的内置查询类型,会跳过通用倒排索引匹配流程,直接根据ID定位到文档所在的Segment和存储位置,IO开销更低
    • 针对_id的Term查询走通用倒排索引查询链路,需要先在_id字段的倒排索引中匹配到对应的文档ID列表,再读取对应文档,多了一层倒排索引匹配的开销
    • 实测单条查询场景下Ids查询的QPS比Term查询高5%~15%,高并发场景下差距会进一步放大

其他核心区别

  • 批量查询支持:Ids查询原生支持传入ID数组批量查询多文档,不需要手动构造多个Term条件,写法更简洁,且批量查询时ES会做内部IO优化,性能远高于多个Term条件组合的查询
  • 自定义路由兼容性:如果索引配置了自定义路由规则,Ids查询可以结合请求传入的routing参数直接定位到对应分片查询,避免广播到所有分片;而Term查询_id无法利用路由规则优化,必须扫描所有分片,在分片数多的索引中性能差距会非常明显
  • 待删除文档处理:Ids查询会直接过滤掉已标记删除、还未被Segment合并的文档,处理逻辑更轻量;Term查询会先匹配所有符合条件的文档(包括待删除文档),再做二次过滤,额外增加了处理步骤

选型建议

  • 所有仅通过_id查询的场景(单条或批量),优先选择Ids查询,性能更好、写法更简洁、兼容性更强
  • 如果查询逻辑除了匹配_id之外还有其他过滤条件,两种写法性能差距极小,可根据代码风格统一选择
  • 如果是单条ID查询且不需要返回搜索元数据(得分、分片匹配信息等),优先使用GET 索引名/_doc/文档ID的Get API,该方式完全跳过搜索请求的解析、评分等链路,直接读取文档,性能比前两种Search接口的查询方式高30%以上

内容的提问来源于stack exchange,提问作者Nishikant Tayade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 12:24:02