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


当前回答

基本上,当您想要使用评分对文档执行搜索时,将使用查询。 过滤器用于缩小使用查询获得的结果集。过滤器是布尔型的。

例如,假设您有一个餐馆索引,例如zomato。 现在你想搜索提供“披萨”的餐厅,这基本上就是你的搜索关键词。

因此,您将使用查询来查找所有包含“pizza”的文档,并将获得一些结果。

假设现在你想要一个提供披萨且评分至少为4.0的餐厅名单。

所以你要做的就是在你的查询中使用关键字“比萨饼”,并应用过滤器评级为4.0。

实际情况是,过滤器通常应用于通过查询索引获得的结果。

其他回答

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

基本上,当您想要使用评分对文档执行搜索时,将使用查询。 过滤器用于缩小使用查询获得的结果集。过滤器是布尔型的。

例如,假设您有一个餐馆索引,例如zomato。 现在你想搜索提供“披萨”的餐厅,这基本上就是你的搜索关键词。

因此,您将使用查询来查找所有包含“pizza”的文档,并将获得一些结果。

假设现在你想要一个提供披萨且评分至少为4.0的餐厅名单。

所以你要做的就是在你的查询中使用关键字“比萨饼”,并应用过滤器评级为4.0。

实际情况是,过滤器通常应用于通过查询索引获得的结果。

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

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

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

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

官方文件是这么说的:

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


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