首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用default_operator as的查询字符串,在ES2.4和ES6.8中的工作方式不同

问使用default_operator as的查询字符串,在ES2.4和ES6.8中的工作方式不同
EN

Stack Overflow用户
提问于 2021-12-01 09:24:34
回答 1查看 175关注 0票数 0

query_string似乎正在返回与ES 2.4中的字段参数中指定的字段匹配的所有术语的文档,而在ES6.8中,每个字段中匹配所有术语的文档将被返回。

复制步骤:将下列文件插入ES 2.4和ES 6.8组:

代码语言:javascript
复制
PUT yields_test/il4/1
{
    "security_name":"high term1",
    "doc_type":"YIELDS"
}

PUT yields_test/il4/2
{
    "security_name":"high term2",
    "doc_type":"YIELDS"
}

PUT yields_test/il4/3
{
    "security_name":"low term2",
    "doc_type":"YIELDS"
}

PUT yields_test/il4/4
{
    "security_name":"low term1",
    "doc_type":"YIELDS"
}

PUT yields_test/il4/5
{
    "security_name":"high yield",
    "doc_type":"YIELDS"
}

PUT yields_test/il4/6
{
    "security_name":"high yields",
    "doc_type":"YIELDS"
}

PUT yields_test/il4/7
{
    "security_name":"high term3",
    "doc_type":"YIELD"
}

并尝试在这两个查询中使用以下query_string查询进行搜索:

代码语言:javascript
复制
GET yields_test/_search
{
    "query": {
        "query_string": {
           "fields": [
              "security_name",
                  "doc_type"
           ], 
           "query": "high yield",
           "default_operator": "AND"
        }
    }
}

ES 2.4返回下列文件:

代码语言:javascript
复制
[
         {
            "_index": "yields_test",
            "_type": "il4",
            "_id": "7",
            "_score": 0.5098911,
            "_source": {
               "security_name": "high term3",
               "doc_type": "YIELD"
            }
         },
         {
            "_index": "yields_test",
            "_type": "il4",
            "_id": "5",
            "_score": 0.08322528,
            "_source": {
               "security_name": "high yield",
               "doc_type": "YIELDS"
            }
         }
      ]

而ES 6.8则返回以下内容:

代码语言:javascript
复制
[
         {
            "_index": "yields_test",
            "_type": "il4",
            "_id": "5",
            "_score": 0.5753642,
            "_source": {
               "security_name": "high yield",
               "doc_type": "YIELDS"
            }
         }
]

通过在请求体中使用配置文件字段,我能够找到版本之间的更改。为两者创建的Lucene查询是不同的。

Es2.4:+(security_name:high | doc_type:high) +(security_name:yield | doc_type:yield)生成的Lucene查询

由ES 6.8:((+security_name:high +security_name:yield) | (+doc_type:high +doc_type:yield))

关于如何返回ES 6.8中相同的文件,我的另一个问题仍然存在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-10 06:36:07

您可以使用bool查询:

代码语言:javascript
复制
{
  "query" : {
    "bool" : { 
      "must" : [
        {"query_string": {
             "fields": [ "security_name","doc_type" ], 
             "query": "high",           
            }},
        { "query_string": {
             "fields": [ "security_name","doc_type" ], 
             "query": "yeild", }}
      ]
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70181749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档