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

问题描述:

我正在尝试创建一个elasticsearch查询,该查询必须与三个查询中的一个匹配,并且还有一个不需要匹配的额外查询。执行bool查询和MUST子句的问题在于它必须匹配所有3个,并且应该与所需的匹配,除非使用minimum_should_match设置为2.在这种情况下,它不匹配文档由于最小匹配,所以匹配3个所需的一个。在elasticsearch中,必须匹配其中一个数组,并带有可选的额外查询词

我当前的查询是这样的(对不起,没有这个代码就在这里)

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

我也曾尝试以下,但它不使可选的第四查询

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

如何去创建一个查询,它必须与三个查询中的一个匹配,并且可以选择使用第四个查询排列的查询。

嵌套布尔查询应该为您找到您正在寻找的结果。我们需要可以查询一个,两个或三个匹配,同时可选匹配查询4.

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

查询必须通过一个3查询的条款应至少一个匹配,并且可选应该匹配查询4.

匹配查询1,2,3和4的文档一次全部排在第一位 的排名最高,因为我认为您并不是指排他或排除。

+1

这一个完美的作品,做了类似的以前的版本没有添加任何得分,但这一个,非常感谢! – Eric