【发布时间】:2016-11-24 15:25:48
【问题描述】:
Query DSL 中 Elastic Search 中的 Query Context 和 Filter Context 有什么区别。
我的理解是查询上下文 - 文档与查询参数的匹配程度。
例如:
{ "match": { "title": "Search" }}
如果我正在搜索标题为“搜索”的文档,那么如果我包含两个文档
i)title:"Search"
ii)title:"Search 123"
那么第一个文档是完全匹配的,而文档二是半匹配的。然后第一个文档排在第一位,第二个文档排在第二位。我的理解正确吗?
过滤上下文:
例如:
{ "term": { "status": "published" }}
如果我正在搜索状态为“已发布”的文档,那么如果我包含两个文档
i)status:"published"
ii)status:"published 123"
那么第一个文档是完美的所以它被返回,第二个匹配不是完美匹配所以它不被返回。我的理解正确吗?
【问题讨论】:
-
那我的理解正确吗?
-
过滤器可用于根据是/否答案选择文档(并且没有评分),而查询主要用于全文搜索(和评分)。主要思想是尽可能过滤文档,以便可以在尽可能少的文档上执行查询。所以你的理解是正确的。
-
不,您不正确,如果将标准分析器用于状态字段,则第二个文档也匹配。查询上下文和过滤上下文有多重区别,但是从索引的角度来看,分析方面并没有什么不同。这是从查询的角度来看的。如果您搜索已发布和已发布,情况会有所不同。
-
问题是过滤器用“是”或“否”回答问题。查询告诉你“多少”。过滤器将为您返回分数为 1.0 的结果,此时 Query 将为您提供一些您可以使用 _explain API 进行调试的数字
标签: elasticsearch dsl elasticsearch-query