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

Eri*_*ric 5 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

如何进行并创建一个必须匹配三个查询之一的查询,并可选择将第四个查询中的查询排名更高.

Ian*_*bes 17

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

"query": {
    "bool": {
        "must": [
           {
               "bool": {
                   "should": [
                      {
                          //query1
                      },
                      {
                          //query2
                      },
                      {
                          //query3
                      }
                   ],
                   "minimum_number_should_match": 1
               }
           }
        ],
        "should": [
           {
               //query4
           }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • `minimum_should_match` 适用于 v7.1。https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html (3认同)