elasticsearch Elasticsearch过滤查询vs过滤器,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch过滤查询vs过滤器,elasticsearch,elasticsearch" />

elasticsearch Elasticsearch过滤查询vs过滤器

elasticsearch Elasticsearch过滤查询vs过滤器,elasticsearch,elasticsearch,“在筛选中查询和筛选”与“在根目录上查询和筛选”之间有什么区别吗?比如说 案例1: { “查询”:{ “过滤”:{ “查询”:{ “术语”:{“头衔”:“厨房3”} }, “过滤器”:{ “期限”:{“价格”:1000} } } } } 案例2: { “查询”:{ “术语”:{“头衔”:“厨房3”} }, “过滤器”:{ “期限”:{“价格”:1000} } } 我找到了这个讨论,但引用的URL是404,对我来说解释有点过于简洁 请教授或提供任何文件,指出两者之间的差异,谢谢 差异与性能有关

“在筛选中查询和筛选”与“在根目录上查询和筛选”之间有什么区别吗?比如说

案例1:

{
“查询”:{
“过滤”:{
“查询”:{
“术语”:{“头衔”:“厨房3”}
},
“过滤器”:{
“期限”:{“价格”:1000}
}
}
}
}
案例2:

{
“查询”:{
“术语”:{“头衔”:“厨房3”}
},
“过滤器”:{
“期限”:{“价格”:1000}
}
}
我找到了这个讨论,但引用的URL是404,对我来说解释有点过于简洁


请教授或提供任何文件,指出两者之间的差异,谢谢

差异与性能有关。顶层的“过滤器”总是在查询之后执行。这意味着对所有文档执行查询,计算所有文档的分数,等等,只有这样,不匹配筛选器的文档才会被排除

使用“过滤”查询时,ES可能会优化此计算,例如,首先执行过滤器,然后对有限的文档集执行查询,节省测试与过滤器不匹配的文档与查询的时间,以及计算与查询匹配的文档的分数的时间

如果您使用相同的筛选器执行多个查询,那么还有更多的优点:可以缓存筛选器,从而进一步提高每个查询的性能。这适用于您的示例:“term”过滤器在默认情况下是缓存的


您还可以显式控制“过滤”查询的执行(请参阅文档),以针对特定用例对其进行优化。

这两种类型的过滤器也可以称为前置过滤器和后置过滤器。正如@alexey所解释的,根级过滤在查询之后执行,过滤查询中的过滤在查询之前执行

除此之外,您还需要了解同一事件的影响,然后了解它们的执行顺序。“过滤”查询中的过滤器属于查询范围,这意味着在计算聚合时,将考虑过滤的输出,而在根级别的情况下,仅对不包括过滤器的查询结果执行过滤聚合。尽管在这两种情况下,结果文档是相同的


例如,对于您发布的两个查询,两个查询都会给出相同的结果,但是,如果您正在执行聚合,则第一个查询将计算与标题kitchen3和价格10000匹配的文档的聚合计数,而第二个查询将仅计算与标题kitchen3匹配的文档的聚合计数,而不使用价格1000的过滤器。

如果我以前编写过过滤器,请在过滤查询中告诉我那么查询是否会对性能产生任何影响???@sudhanshugar查询JSON中键的顺序不会影响结果。您可以控制可能影响性能的筛选策略,但“筛选查询中的筛选是在查询之前执行的”-这不是必需的