我正在尝试创建一个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
如何进行并创建一个必须与三个查询中的一个匹配的查询,并且可选地将那些具有第四个查询的查询排在更高的位置。
答案 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的文档 将排名最高,因为我认为你不是指排他性或。