我有以下过滤后的查询:
{
"query": {
"filtered" : {
"query": {
....
},
"filter" : {
"bool" : {
"should" : [
{
bool : {
"must" : [
{ "term1" : { "name1" : "value1" } },
{ "term2" : { "name2" : "value2" } }
]
}
},
{
"bool" : {
"must" : [
......
]
}
},
{
"bool" : {
"must" : [
......
]
}
},
{
"bool" : {
"must" : [
.......
]
}
}
]
}
}
}
}
}
我是否有空间在不损害性能的情况下改进复杂的滤波器?怎么样?
我觉得过滤器部分可以简化,但不确定。也不确定任何性能影响。
谢谢!
更新
在每个必须条款下,有一组条款。请参阅第一个必须条款以获取示例。
更新2
根据Duc的意见和Mario的更新答案,我很高兴我到目前为止所做的是正确的方式。无需进行任何更改。
我选择马里奥的回答作为答案,因为它证实了我的回答是正确的。
答案 0 :(得分:1)
您只需要一个必须条款就不需要Bool。您将条件直接放在外部should
。
{
"query": {
"filtered" : {
"query": {
....
},
"filter" : {
"bool" : {
"should" : [
{
.......
},
{
.......
},
{
.......
},
{
.......
}
]
}
}
}
}
}
更新:,因为我从您的更新中看到您的嵌套must
语句中有多个子句,我的建议不再有效。您的查询过滤器就像它一样(除了term1
和term2
无效,但这不是问题的重点)