Elasticsearch过滤查询与过滤器

“过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如

情况1:

{

"query":{

"filtered":{

"query":{

"term":{"title":"kitchen3"}

},

"filter":{

"term":{"price":1000}

}

}

}

}

情况2:

{

"query":{

"term":{"title":"kitchen3"}

},

"filter":{

"term":{"price":1000}

}

}

我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using-

filter-outside-td3960119.html中找到了此讨论,但所引用的URL是404,并且解释过于简洁我。

请示教或提供指出这些区别的任何文件,谢谢。

回答:

差异与性能有关。查询 始终执行顶层的“过滤器” 。这意味着对所有文档执行查询,为所有文档计算分数,等等。-只有不匹配过滤器的文档才会被排除。

使用“过滤的”查询,ES可能会优化此计算,例如,首先执行过滤器,然后对有限的一组文档执行查询,从而节省了测试与查询不匹配过滤器的文档的时间,以及如果他们确实符合查询条件,则为他们计算分数。

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

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

以上是 Elasticsearch过滤查询与过滤器 的全部内容, 来源链接: utcz.com/qa/425554.html

回到顶部