“过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如
情况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可能会优化此计算,例如,首先执行过滤器,然后对有限的一组文档执行查询,从而节省了测试与查询不匹配过滤器的文档的时间,以及如果他们确实符合查询条件,则为他们计算分数。
如果使用同一过滤器执行多个查询,则还有更多优点:可以缓存过滤器,从而进一步提高每个查询的性能。这适用于您的示例:默认情况下会缓存“术语”过滤器。
您还可以显式控制“已过滤”查询的执行(请参阅文档),以针对特定用例进行优化。