elasticsearch会自动优化过滤器吗?例如:在“和”过滤器中,如果存在为gte和lte运营商分别定义的多个数字范围筛选器,而不是一个同时具有lte和gte边界的范围筛选器,它会导致性能问题吗?ES会自动优化这些过滤器吗?
"filter" : {
"and" : [
{
"range" : {
"age" : {
"gte": 10
}
}
},
{
"range" : {
"age" : {
"lte": 90
}
}
},
{
"range" : {
"age" : {
"gte": 30
}
}
}
]}更新
想添加:虽然合并边界是有意义的,但当我的用户能够动态创建过滤器时,我想检查这个情况。
发布于 2015-10-17 03:07:52
使用过滤器的主要经验规则是,您应该始终首先应用最严格的筛选器,以便减少匹配的文档集,并允许下一个筛选器处理尽可能少的文档。
此外,在您演示的情况下,为同一个range字段设置三个不同的age过滤器是没有意义的,您应该将它们合并为一个单独的过滤器:
"filter": {
"range": {
"age": {
"gte": 30,
"lte": 90
}
}
}还请注意,在可能的情况下,您应该更喜欢bool/must而不是and过滤器,这主要是因为and过滤器没有缓存。
最后,上面的内容只适用于2.0前的弹性搜索版本。从2.0开始,整个查询/过滤器DSL将是彻底检修,查询将更加智能。
更新
因为您的用户可以创建他们自己的过滤器,所以主要的经验法则仍然存在,也就是说,您应该尝试对过滤器进行排序,以便首先使用最严格的过滤器。然而,如果你的用户真的有能力创建他们自己的过滤器,并且你没有干扰他们提交的内容,那么你应该教育他们(如果有可能的话)如何最好地创建过滤器。
https://stackoverflow.com/questions/33181470
复制相似问题