let minimum_should_match仅适用于should子句的子集

时间:2018-02-18 15:49:08

标签: elasticsearch

bool查询中,我尝试匹配匹配field1{field2, field3, field4}中任意两个的文档。我知道我可以使用minimum_should_match: 2达到第二个条件但是如何确保should的{​​{1}}子句被排除在minimum_should_match之外?

1 个答案:

答案 0 :(得分:0)

您可以将查询重写为包含两个查询的bool:

  • field1的匹配查询

  • 包含必须部分中字段2,3和4的多重匹配的bool查询,以及不包括field1的must_not。

以下是一个例子:

GET test/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "field1": "value"
          }
        },
        {
          "bool": {
            "must": [
              {
                "multi_match": {
                  "query": "value",
                  "fields": [
                    "field2",
                    "field3",
                    "field4"
                  ]
                }
              }
            ],
            "must_not": [
              {
                "match": {
                  "field1": "value"
                }
              }
            ]
          }
        }
      ]
    }
  }
}