ES 查询上下文
2020-09-28 本文已影响0人
handsomemao666
相关性分数
默认情况下,ES根据相关性分数对结果进行排序。
相关性分数是一个浮点型数字,通过元数据字段_score
返回,分数越高,代表文档的相关性越大。分数计算依赖于这个查询是在查询上下文中(query context)还是在过滤上下文中(filter context)。
查询上下文(query context)
在查询上下文中,一个查询语句表示一个文档和查询语句的匹配程度。无论文档匹配与否,查询语句总能计算出一个相关性分数在_score
字段上。
过滤上下文(filter context)
在过滤上下文中,一个查询语句表示一个文档是否匹配该查询语句。结果为是或者不是,无需计算分数。过滤上下文最经常被使用在结构化数据中,例如:
-
timestamp
是否在 2015 到2016的区间呢? -
status
字段是否为 ``"published"
ES会字段缓存高频使用的过滤查询,从而提升性能。
过滤上下文出现在filter
参数中,比如 在bool
查询中的filter
或者must_not
参数,参数可以使用constant_score
表示分数
GET /_search { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } } }
query
参数代表查询上下文
bool
和两个 match
用在查询上下文
filter
参数用在过滤上下文