【问题标题】:Issue in must and should in Query for ElasticSearch查询 ElasticSearch 中的 must 和 should 中的问题
【发布时间】:2019-07-09 12:52:22
【问题描述】:

我想在我的布尔值中同时包含“必须”和“应该”,但没有得到想要的结果。

对于以下查询,我分别有 3 个和 1 个文档。

{
    "timeout":"5s",
    "query":{
    "bool":{
    "must":[
        {"term":{"rgtnRelt.reltRcptIdI":{"value":"9175","boost":1.0}}},
        {"term":{"rgtnRelt.reltRcptIdI":{"value":"9844","boost":1.0}}},
        {"term":{"rgtnRelt.reltRcptIdI":{"value":"0075","boost":1.0}}},
        {"term":{"rgtnRelt.reltRcptIdI":{"value":"7678","boost":1.0}}}
        ],
    "adjust_pure_negative":true,"boost":1.0
        }
        }
}





{
    "timeout":"5s",
    "query":{
    "bool":{
    "must":[
        {"term":{"_id":{"value":"9175-9844-0075-7678","boost":1.0}}}
        ],
    "adjust_pure_negative":true,"boost":1.0
        }
        }
}

为了在一个查询中获取所有文档,我编写如下,但仍然只获取 3 个文档。

{
    "timeout":"5s",
    "query":{
    "bool":{
    "must":[
        {"term":{"rgtnRelt.reltRcptIdI":{"value":"9175","boost":1.0}}},
        {"term":{"rgtnRelt.reltRcptIdI":{"value":"9844","boost":1.0}}},
        {"term":{"rgtnRelt.reltRcptIdI":{"value":"0075","boost":1.0}}},
        {"term":{"rgtnRelt.reltRcptIdI":{"value":"7678","boost":1.0}}}
        ],
    "should":[
        {"term":{"_id":{"value":"9175-9844-0075-7678"}}}
        ],
    "adjust_pure_negative":true,"boost":1.0
        }
        }
}

我只想要使用单个查询的所有文档

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    试试这样吧:

    {
      "timeout": "5s",
      "query": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "terms": {
                "rgtnRelt.reltRcptIdI": [
                  "9175",
                  "9844",
                  "0075",
                  "7678"
                ]
              }
            },
            {
              "term": {
                "_id": {
                  "value": "9175-9844-0075-7678"
                }
              }
            }
          ],
          "adjust_pure_negative": true,
          "boost": 1
        }
      }
    }
    

    或者像这样:

    {
      "timeout": "5s",
      "query": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "bool": {
                "must": [
                  {
                    "term": {
                      "rgtnRelt.reltRcptIdI": {
                        "value": "9175",
                        "boost": 1
                      }
                    }
                  },
                  {
                    "term": {
                      "rgtnRelt.reltRcptIdI": {
                        "value": "9844",
                        "boost": 1
                      }
                    }
                  },
                  {
                    "term": {
                      "rgtnRelt.reltRcptIdI": {
                        "value": "0075",
                        "boost": 1
                      }
                    }
                  },
                  {
                    "term": {
                      "rgtnRelt.reltRcptIdI": {
                        "value": "7678",
                        "boost": 1
                      }
                    }
                  }
                ]
              }
            },
            {
              "term": {
                "_id": {
                  "value": "9175-9844-0075-7678"
                }
              }
            }
          ],
          "adjust_pure_negative": true,
          "boost": 1
        }
      }
    }
    

    【讨论】:

    • 没有得到想要的结果
    • 我使用了下面的查询,它对我有用。谢谢
    【解决方案2】:

    下面为我工作

    {
        "query":{
            "bool":{"should":[
                {"match_phrase":{"rgtnRelt.reltRcptIdI":"9175-9844-0075-7678"}},
            {"match":{"_id":"9175-9844-0075-7678"}}]
        }   }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-06
      • 2015-04-30
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 2014-03-11
      相关资源
      最近更新 更多