我看不到任何关于何时应该使用查询或过滤器或两者的某种组合的描述。它们之间的区别是什么?有人能解释一下吗?


当前回答

区别很简单:过滤器被缓存,不影响分数,因此比查询快。看看这里。假设一个查询通常是用户键入的并且几乎不可预测的,而过滤器帮助用户缩小搜索结果,例如使用facet。

其他回答

过滤器->这个文档匹配吗?是或否的二元答案

查询->这个文档匹配吗?匹配度如何?使用得分

自Elasticsearch版本2以来,过滤器和查询已经合并,任何查询子句都可以用作过滤器或查询(取决于上下文)。与版本1一样,过滤器是缓存的,如果评分不重要,就应该使用它。

来源:https://logz.io/blog/elasticsearch-queries/

官方文件是这么说的:

作为一般规则,应该使用过滤器而不是查询: 用于二进制是/否搜索 用于查询确切的值


作为一般规则,应该使用查询而不是过滤器: 全文检索 结果取决于相关性评分

区别很简单:过滤器被缓存,不影响分数,因此比查询快。看看这里。假设一个查询通常是用户键入的并且几乎不可预测的,而过滤器帮助用户缩小搜索结果,例如使用facet。

查询:计算分数;因此,它们能够返回按相关性排序的结果。 过滤器:不计算分数,使他们更快,更容易缓存。