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

ES 2.4与ES 6.8中default_operator为AND的query_string查询差异问询

解决方案

这个逻辑差异是Elasticsearch 5.0版本迭代时对query_string查询的默认规则调整导致的:5.0+版本将query_string的group_by参数默认值从terms修改为fields,直接导致了你观察到的查询逻辑变化。

修复方法

在你现有query_string的参数中新增"group_by": "terms"配置即可,修改后的查询语句如下:

GET yields_test/_search
{
    "query": {
        "query_string": {
           "fields": [
              "security_name",
              "doc_type"
           ], 
           "query": "high yield",
           "default_operator": "AND",
           "group_by": "terms"
        }
    }
}

逻辑说明

  • group_by: fields(ES 6.8默认):先以字段为分组单位,要求单个字段内匹配所有检索词,再对多个字段的匹配结果取并集,因此只有security_name同时包含high和yield的id=5文档被返回。
  • group_by: terms(ES 2.4默认):先以检索词为分组单位,要求每个检索词在任意指定字段中命中,因此id=7文档(security_name命中high、doc_type命中yield)也会被纳入返回结果。

添加配置后ES 6.8会生成和ES 2.4完全一致的Lucene查询语句,返回结果也会保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:24:05