Elasticsearch——Query and filter context

相关性得分

默认情况下,Elasticsearch根据相关性得分对匹配的搜索结果进行排序,相关性得分衡量每个文档与查询的匹配程度。

相关性分数是一个正浮点数,在搜索API的_score元数据字段中返回。分数越高,文档就越相关。虽然每种查询类型可以不同地计算相关性分数,但分数计算还取决于查询子句是在query上下文中运行还是在filter上下文中运行。

Query context

在query上下文中,查询子句回答问题“此文档与此查询子句的匹配程度如何?”除了决定文档是否匹配外,查询子句还计算_score元数据字段中的相关性分数。

只要将查询子句传递给查询参数(例如搜索API中的查询参数),查询上下文就会生效。

Filter context

在filter上下文中,查询子句回答问题“此文档是否与此查询子句匹配?”答案是简单的是或否 — 不计算分数。filter上下文主要用于筛选结构化数据,例如。

  • 该时间戳是否属于2015年至2016年的范围?

  • status字段是否设置为“published”?

经常使用的过滤器将由Elasticsearch自动缓存,以提高性能。

每当将查询子句传递给filter参数(例如bool查询中的filter或must_not参数、constant_score查询中的filter参数或filter aggregation)时,filter上下文都有效。

query and filter contexts例子:

下面是在search API的query和filter上下文中使用的查询子句的示例。此查询将匹配满足以下所有条件的文档:

  • title字段包含search 单词。

  • context字段包含单词elasticsearch。

  • “status”字段包含published的确切单词。

  • “publish_date”字段包含从2015年1月1日起的日期。

GET /_search
{
  "query": {      (1)
    "bool": {     (2)
      "must": [
        { "match": { "title":   "Search"        }},
        { "match": { "content": "Elasticsearch" }}
      ],
      "filter": [  (3)
        { "term":  { "status": "published" }},
        { "range": { "publish_date": { "gte": "2015-01-01" }}}
      ]
    }
  }
}

(1)查询参数指示查询上下文。

(2)bool和两个match子句用于查询上下文,这意味着它们用于对每个文档的匹配程度进行评分。

(3)filter参数表示filter上下文。它的term和range子句用于筛选器上下文。它们将过滤掉不匹配的文档,但不会影响匹配文档的分数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值