Query for ElasticSearch中必须和应该存在的问题

时间:2019-07-08 16:06:09

标签: elasticsearch

我想在bool中同时包含“必须”和“应该”两者,但没有得到理想的结果。

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

updated_dict = {k:v for k,v in wordFreqDic.items() if v != "blonde"}

要在一个查询中获取所有文档,我已像下面这样编写,但仍然仅获取了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}}}
        ],
    "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
        }
        }
}

我只想使用单个查询获取所有文档

2 个答案:

答案 0 :(得分:0)

尝试像这样:

{
  "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
    }
  }
}

答案 1 :(得分:0)

以下为我工作

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