在Elasticsearch的DSL中, 有两个概念需要搞清楚, query 和 filter, 对ES的检索效率是很有影响的。
下面就来搞清楚这两个关键字的具体函数。
query context: 回答的是这个文档在多大程度上匹配查询语句(How well does this document match this query clause?),会计算出一个分数_score。
filter context: 回答的是这个文档与查询语句是否匹配,是 或者 不是(Does this document match this query clause?),不会计算分数。
除了需要匹配程度的查询(有_score的情况)使用query, 其余的查询都应该使用filter。(As a general rule, use query clauses for full-text search or for any condition that should affect the relevance score, and use filters for everything else.)
filter的结果是会被ES缓存的, 以此来提高效率。
另外, filter由于不计算分数及排序, 所以, 速度较 query要快。
下面的例子来自https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html