我想在另一个布尔查询中嵌套一个带有多个must / should的布尔查询,以获得嵌套的AND / OR查询字符串,如下面的查询所示。
{
"query": {
"bool": {
"should": [
**// SHOULD BLOCK 1**
{
<should_query_1>
},
**// SHOULD BLOCK 2**
{
<should_query_2>
},
**// SHOULD BLOCK 3**
{
"bool": {
"must": [
<should_level_2_MUST_query_1>,
<should_level_2_MUST_query_2>,
{
"bool": {
"must": [
<should_level_3_MUST_query_1>,
<should_level_3_MUST_query_2>,
]
}
}
]
}
},
**// SHOULD BLOCK 4**
{
"bool": {
"must": [
<should_MUST_query_1>,
<should_MUST_query_2>
]
}
}
]
}
},
"size": 25,
"from": 0,
"fields": []
}
预期的行为是,我希望块1,2,3,4'或'并且在“应该阻止3”中我希望“Should_level_2_MUST_queries”为“与”。
但实际上当我使用这种语法时,应该阻止3&amp; 4在第一级本身是“与”并且与第1级和第1级进行“或”运算。 2.请帮我重新排列/重写此查询,以实现预期的行为。
提前致谢
答案 0 :(得分:1)
AFAIK,elasticsearch没有和/或类似布尔代数中的那个。最后总会有一个级别。
所以,在你的查询中,你基本上说“我需要3个必须查询”,所以那3个必须查询的组合结果将在最后的回复中。
如果我理解正确,要达到预期的行为,您应该执行以下操作:
"minumum_should_match:N"
规则,其中N是一个整数指南: