在elasticsearch中,必须匹配一个数组,并带有可选的额外查询项

时间:2016-03-07 17:40:42

标签: elasticsearch

我正在尝试创建一个elasticsearch查询,该查询必须匹配单独字段上的三个查询之一,并且还有一个不需要匹配的额外查询。执行bool查询和MUST子句的问题是它必须匹配所有3,并且应该尽可能匹配所需的,除非使用minimum_should_match设置为2.在这种情况下,它与文档不匹配因为最小匹配而匹配3个必需的中的一个。

我当前的查询是这样的(抱歉,这里没有代码)

query - bool - must - query 1 - query 2 - query 3 - should - query 4

我也尝试了以下内容,但它没有使第4个查询可选

query - bool - should - query 1 - query 2 - query 3 - query 4 - minimum_should_match: 2

如何进行并创建一个必须与三个查询中的一个匹配的查询,并且可选地将那些具有第四个查询的查询排在更高的位置。

1 个答案:

答案 0 :(得分:11)

嵌套bool查询可以获得您正在寻找的结果。我们需要匹配查询一,二或三,同时可选地匹配查询4.

"query": {
    "bool": {
        "must": [
           {
               "bool": {
                   "should": [
                      {
                          //query1
                      },
                      {
                          //query2
                      },
                      {
                          //query3
                      }
                   ],
                   "minimum_number_should_match": 1
               }
           }
        ],
        "should": [
           {
               //query4
           }
        ]
    }
}

查询必须匹配查询1到3中至少一个should子句,并且可选地应匹配查询4.

同时匹配查询1,2,3和4的文档 将排名最高,因为我认为你不是指排他性或。