在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的文档一次全部排在第一位 的排名最高,因为我认为您并不是指排他或排除。
这一个完美的作品,做了类似的以前的版本没有添加任何得分,但这一个,非常感谢! – Eric