gpt4 book ai didi

elasticsearch - 用 bool 过滤器替换OR/AND/NOT过滤器会创建一个难以理解的查询,其中包含太多的级别?

转载 作者:行者123 更新时间:2023-12-02 23:36:58 25 4
gpt4 key购买 nike

我在过滤查询中有以下过滤器。如图所示,它在不同级别具有许多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 / AND / NOT过滤器会创建一个级别过多且难以理解的查询。例如,替换
"or": [
....
]

我必须:
"bool" {
"should": [
]
}

我是否认为以 bool(boolean) 过滤器替换OR / AND / NOT是以牺牲易懂性为代价的?

相关问题

如果我必须替换OR / AND / NOT过滤器以提高性能,是否应该替换这些OR / AND / NOT过滤器的 ALL ,还是仅替换其中一部分,例如顶部的过滤器?

感谢致敬。

最佳答案

除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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com