我想查询某个日期范围内的elasticsearch文档。我现在有两个选择,两个都适合我。两个都测试过。
1.范围查询
2.范围过滤器
由于我现在的数据集很小,因此我无法测试它们的性能。这两者有什么区别?哪一种会导致更快的文档检索和更快的响应?
查询和过滤器之间的主要区别与评分有关。查询返回每个文档的相对排名分数的文档。过滤器则不然。这种差异使得过滤器变得更快有两个原因。首先,它不会产生计算每个文档分数的成本。其次,它可以缓存结果,因为它不必随时处理分数可能发生的变化 - 它实际上只是一个布尔值,文档是否匹配?
从文档中:
过滤器通常比查询更快,因为:
他们不必计算每个文档的相关性_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/current/query-dsl-filtered-query.html
http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/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://exploringelasticsearch.com/searching_data.html
http://elasticsearch-users.115913.n3.nabble.com/Filters-vs-Queries-td3219558.html http://elasticsearch-users.115913.n3.nabble.com/Filters-vs-Queries-td3219558.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)