在 ES 中,提供了 Query 和 Filter 两种搜索:
在 query context 中,查询子句回答 “此文档与该查询子句的匹配程度如何” 的问题。除了确定文档是否匹配外,查询子句还计算 _score
字段中的相关性得分。
每当将查询子句传递到 query 参数(例如 search API 中的 query 参数)时,query context 即生效。例如:
在 filter context
中,查询子句回答问题 “此文档是否与此查询子句匹配?” 答案是简单的 “是” 或 “否” ,即不计算分数。 filter context 主要用于过滤结构化数据,例如
此时间戳记是否在2015年到2016年之间?
状态字段设置为“已发布”吗?
每当将查询子句传递到 filter 参数(例如 bool 查询中的 filter 或 must_not 参数,constant_score 查询中的 filter 参数或 filter 聚合)时,filter context
即生效。
例如:
GET /products/_search
{
"query": {
"bool": {
"filter": {
"term": {
"name": "pasta"
}
}
}
}
}
通过查询结果中可以看到 _score
都是 0。