作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在过滤查询中有以下过滤器。如图所示,它在不同级别具有许多OR / AND / NOT过滤器。出于性能原因,建议我将其替换为bool过滤器,而我将这样做。
"filter" : {
"or" : [
{
"and" : [
{ "range" : { "start" : { "lte": 201407292300 } } },
{ "range" : { "end" : { "gte": 201407292300 } } },
{ "term" : { "condtion1" : false } },
{
"or" : [
{
"and" : [
{ "term" : { "condtion2" : false } },
{
"or": [
{
"and" : [
{ "missing" : { "field" : "condtion6" } },
{ "missing" : { "field" : "condtion7" } }
]
},
{ "term" : { "condtion6" : "nop" } }
{ "term" : { "condtion7" : "rst" } }
]
}
]
},
{
"and" : [
{ "term" : { "condtion2" : true } },
{
"or": [
{
"and" : [
{ "missing" : { "field" : "condtion3" } },
{ "missing" : { "field" : "condtion4" } },
{ "missing" : { "field" : "condtion5" } },
{ "missing" : { "field" : "condtion6" } },
{ "missing" : { "field" : "condtion7" } }
]
},
{ "term" : { "condtion3" : "abc" } },
{ "term" : { "condtion4" : "def" } },
{ "term" : { "condtion5" : "ghj" } },
{ "term" : { "condtion6" : "nop" } },
{ "term" : { "condtion7" : "rst" } }
]
}
]
}
]
}
]
},
{
"and" : [
{
"term": { "condtion8" : "TIME_POINT_1" }
},
{ "range" : { "start" : { "lte": 201407302300 } } },
{
"or": [
{ "term" : { "condtion9" : "GROUP_B" } },
{
"and" : [
{ "term" : { "condtion9" : "GROUP_A" } },
{ "ids" : { values: [100, 10] } }
]
}
]
}
]
},
{
"and" : [
{
"term": { "condtion8" : "TIME_POINT_2" }
},
{ "ids" : { values: [100, 10] } }
]
},
{
"and" : [
{
"term": { "condtion8" : "TIME_POINT_3" }
},
{
"or": [
{ "term" : { "condtion1" : true } },
{ "range" : { "end" : { "lt": 201407302300 } } }
]
},
{
"or": [
{ "term" : { "condtion9" : "GROUP_B" } },
{
"and" : [
{ "term" : { "condtion9" : "GROUP_A" } },
{ "ids" : { values: [100, 10] } }
]
}
]
}
]
}
]
}
"or": [
....
]
"bool" {
"should": [
]
}
最佳答案
除geo / script / range过滤器外,您都应全部替换。话虽如此,了解每个过滤器的可能影响也可以为您提供帮助。例如,如果其中一个过滤器要过滤掉说90%的结果,那么您可能想在开始时将其放在and过滤器中。由于和/或筛选器是顺序执行的,因此其余筛选器将具有较少的文档要处理。对于 bool(boolean) 过滤器,所有过滤器都在单个位集中进行组合。您可能已经read about it.
我认为您不可以通过使用 bool(boolean) 过滤器替换OR / AND / NOT来牺牲稳定性。如您所给出的示例,对于单个过滤器或过滤器,应将过滤器看起来像查询结构的增加,但在总体组合中,结构几乎相似。
关于elasticsearch - 用 bool 过滤器替换OR/AND/NOT过滤器会创建一个难以理解的查询,其中包含太多的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29906324/
我想模拟这个函数: function getMetaData(key) { var deferred = $q.defer(); var s3 = vm.ini
我是一名优秀的程序员,十分优秀!