一尘不染

Elasticsearch范围查询和范围过滤器之间的区别

elasticsearch

我想查询日期范围内的elasticsearch文档。我现在有两个选择,两个都适合我。已经测试了他们两个。1.范围查询2.范围过滤器

由于我现在的数据集很小,因此无法测试它们的性能。两者有什么区别?哪个会导致更快地检索文档和更快地响应?


阅读 374

收藏
2020-06-22

共1个答案

一尘不染

查询和过滤器之间的主要区别在于评分。查询将返回每个文档具有相对排名得分的文档。过滤器没有。这种差异使过滤器更快,有两个原因。首先,它不会产生为每个文档计算分数的成本。其次,它可以缓存结果,因为它不必时不时地处理分数的变化-
它只是一个布尔值,文档是否匹配?

从文档中:

过滤器通常比查询更快,因为:

他们不必为每个文档计算相关性_score,答案只是一个布尔值:“是,文档与过滤条件匹配”或“否,文档与过滤条件不匹配”。大多数过滤器的结果都可以缓存在内存中,从而加快后续执行速度。

实际上,问题是您是否以任何方式使用相关性得分?如果没有,那么过滤器是必经之路。如果这样做,过滤器可能仍然有用,但应在有意义的地方使用。例如,如果您的文档中有一个语言字段(例如,语言:“
EN”),并且想通过语言和相关性得分进行查询,则可以将用于文本搜索的查询与用于语言。筛选器将缓存所有英文文档的文档ID,然后将查询应用于该子集。

我有点简化了,但这是基础。阅读此内容的好地方:

http://www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/query-dsl-filtered-
query.html

http://www.elasticsearch.org/guide/zh-CN/elasticsearch/reference/0.90/query-
dsl-filtered-
query.html

http://exploringelasticsearch.com/searching_data.html

http://elasticsearch-users.115913.n3.nabble.com/Filters-vs-Queries-
td3219558.html

2020-06-22