查询和过滤上下文
edit查询和过滤上下文
edit相关性分数
edit默认情况下,Elasticsearch 会根据 相关性得分 对匹配的搜索结果进行排序,该得分衡量每个文档与查询的匹配程度。
相关性得分是一个正浮点数,在搜索 API 的 _score
元数据字段中返回。_score
越高,文档的相关性越高。虽然每种查询类型可以以不同方式计算相关性得分,但得分的计算还取决于查询子句是在 查询 还是 过滤 上下文中运行的。
查询上下文
edit在查询上下文中,查询子句回答了“这个文档与这个查询子句匹配得如何?”的问题。除了决定文档是否匹配外,查询子句还会在_score
元数据字段中计算一个相关性得分。
每当查询子句传递给query
参数时,查询上下文就会生效,例如搜索API中的query
参数。
过滤上下文
edit在过滤上下文中,查询子句回答的问题是“这个文档是否匹配这个查询子句?” 答案是一个简单的“是”或“否”——不会计算分数。过滤上下文主要用于过滤结构化数据,例如。
-
这个
时间戳
是否在2015年到2016年之间? -
是否将
状态
字段设置为"已发布"
?
常用的过滤器将由Elasticsearch自动缓存,以加快性能。
每当查询子句传递给filter
参数时,过滤上下文就会生效,例如filter
或must_not
参数在bool
查询中,filter
参数在constant_score
查询中,或filter
聚合中。
查询和过滤上下文的示例
edit下面是一个在 search
API 中查询和过滤上下文中使用查询子句的示例。此查询将匹配满足以下所有条件的文档:
-
title
字段包含单词search
。 -
content
字段包含单词elasticsearch
。 -
status
字段包含确切的单词published
。 -
publish_date
字段包含从 2015 年 1 月 1 日开始的日期。
GET /_search { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } } }
The |
|
The |
|
The |
在查询上下文中计算的分数表示为单精度浮点数;它们只有24位用于有效数字的精度。超过有效数字精度的分数计算将被转换为浮点数,并会损失精度。
在查询上下文中使用查询子句来影响匹配文档的分数(即文档的匹配程度),并在过滤上下文中使用所有其他查询子句。