我想在日期范围内查询elasticsearch文档。我现在有两种选择,对我来说都很好。测试了他们两个。 1.范围查询 2.范围过滤器
由于我现在有一个小数据集,我无法测试它们的性能。这两者有什么区别?哪一个会导致更快的文件检索和更快的响应?
答案 0 :(得分:7)
查询和过滤器之间的主要区别与评分有关。查询返回具有每个文档的相对排名分数的文档。过滤器没有。由于两个原因,这种差异允许过滤器更快。首先,它不会产生计算每个文档的分数的成本。其次,它可以缓存结果,因为它不必随时处理分数中可能的变化 - 它只是一个布尔值,文档是否匹配?
来自文档:
过滤器通常比查询更快,因为:
他们不必为每个文件计算相关性_score - 答案只是一个布尔“是的,文档匹配过滤器”或 “不,文档与过滤器不匹配”。大多数人的结果 过滤器可以缓存在内存中,使后续执行更快。
实际上,问题是您是否以任何方式使用相关性得分?如果没有,过滤器是可行的方法。如果你这样做,过滤器仍然可能有用,但应该在有意义的地方使用。例如,如果您的文档中有一个语言字段(例如语言:“EN”作为示例),并希望按语言查询相关性分数,则可以将文本搜索的查询与过滤器结合使用。语言。过滤器将使用英语缓存所有文档的文档ID,然后查询可以应用于该子集。
我过度简化了,但那是基础知识。阅读的好地方:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html
http://www.elasticsearch.org/guide/en/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
答案 1 :(得分:0)