一尘不染

Elasticsearch-从6.7升级到7.0后,此搜索未返回正确的结果

elasticsearch

{  
  "query":{  
    "constant_score":{  
      "filter":{  
        "bool":{  
          "should":{  
            "terms":{  
              "field_a":[  
                "value1", "value2"
              ]
            }
          },
          "must":{  
            "term":{  
              "field_b":"value"
            }
          }
        }
      }
    }
  }
}

假定此搜索返回的结果包含field_a中的value1或value2和field_b中的value。

因此类似于此MySQL查询:

SELECT * FROM table WHERE field_a IN ('value1', 'value2') AND field_b = value

升级后,它将返回所有结果,其中field_b = value。查询的第一部分被完全忽略。
有修复建议吗?


阅读 605

收藏
2020-06-22

共1个答案

一尘不染

您正在遇到这一重大变化minimum_should_match不再设置为1。要更正此问题,请将您minimum_should_match1

您的新查询可以这样修复:

{  
  "query":{  
    "constant_score":{  
      "filter":{  
        "bool":{  
          "should":{  
            "terms":{  
              "field_a":[  
                "value1", "value2"
              ]
            }
          },
          "minimum_should_match": 1,
          "must":{  
            "term":{  
              "field_b":"value"
            }
          }
        }
      }
    }
  }
}
2020-06-22