在elasticsearch中,你知道为什么
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
conditions1
]
}
},
{
"bool": {
"must": [
conditions2
]
}
}
],
"filter": [
conditions3
]
}
}
}
如果condition3为true,则始终查找文档 即使condition2和condition1为假
答案 0 :(得分:1)
根据https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html上的文档:
如果布尔查询在查询上下文中并且具有必须或过滤器 子句,那么即使没有一个文档将匹配布尔查询 查询应该匹配。在这种情况下,这些子句仅用于 影响分数。如果布尔查询是过滤器上下文或具有 既不必须也不进行过滤,则至少应有一个查询查询 为其匹配文档以匹配布尔查询。此行为可能是 通过设置minimum_should_match参数明确控制。
答案 1 :(得分:0)
通过包装应该解决的问题。请让我知道是否有人有更清洁的解决方案
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{
condition1
},
{
condition2
}
]
}
}
]
}
}
],
"filter": [
{
condition3
}
]
}
}
}