Elasticsearch:这个复杂的filtere查询可以简化吗?

时间:2015-09-18 21:01:09

标签: elasticsearch

我有以下过滤后的查询:

{
  "query": {
        "filtered" : {
            "query": { 
                ....
            },
            "filter" : {
                "bool" : {
                    "should" : [
                        {
                            bool : {
                                "must" : [
                                    { "term1" : { "name1" : "value1" } },
                                    { "term2" : { "name2" : "value2" } }
                                ]
                            }
                        },
                        {
                            "bool" : {
                                "must" : [
                                    ......
                                ]
                            }
                        },
                        {
                            "bool" : {
                                "must" : [ 
                                    ......
                                ]
                            }
                        },  
                        {
                            "bool" : {
                                "must" : [
                                    .......
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }  
}

我是否有空间在不损害性能的情况下改进复杂的滤波器?怎么样?

我觉得过滤器部分可以简化,但不确定。也不确定任何性能影响。

谢谢!

更新

在每个必须条款下,有一组条款。请参阅第一个必须条款以获取示例。

更新2

根据Duc的意见和Mario的更新答案,我很高兴我到目前为止所做的是正确的方式。无需进行任何更改。

我选择马里奥的回答作为答案,因为它证实了我的回答是正确的。

1 个答案:

答案 0 :(得分:1)

您只需要一个必须条款就不需要Bool。您将条件直接放在外部should

{
  "query": {
        "filtered" : {
            "query": { 
                ....
            },
            "filter" : {
                "bool" : {
                    "should" : [
                        {
                                    .......
                        },
                        {
                                    .......
                        },
                        {
                                    .......
                        },  
                        {
                                    .......
                        }
                    ]
                }
            }
        }
    }  
}

更新:,因为我从您的更新中看到您的嵌套must语句中有多个子句,我的建议不再有效。您的查询过滤器就像它一样(除了term1term2无效,但这不是问题的重点)