清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Elasticsearch

    • 简介
    • 基本概念
    • 安装
    • 基本用法
    • Query DSL
    • 聚合
    • 映射
    • 分词
    • 配置
    • Query DSL

      • Query and filter context
      • Compound queries
      • Full text queries
      • Match all query
    • Java High Level REST Client

Query and filter context

参考

Query and filter context。

相关性得分

Relevance scores 即为相关性得分。

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

相关性分数是一个正浮点数,在 search API 的 _score 元数据字段中返回。_score 越高,文档越相关。虽然每种查询类型可以以不同的方式计算相关性分数,但分数计算还取决于查询子句是在 Query context(查询上下文)中运行还是在 Filter context(过滤器上下文)中运行。

查询上下文

Query context 即为查询上下文。

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

每当查询子句传递给查询参数(例如 search API 中的 query 参数)时,查询上下文就会生效。

过滤上下文

Filter context 即为过滤上下文。

在过滤器上下文中,查询子句回答“此文档与此查询子句匹配吗?”的问题。答案是简单的“是”或“否”——“不计算分数”。过滤器上下文主要用于过滤结构化数据,例如“该时间戳是否在 2015 年至 2016 年范围内?”、“status 字段是否设置为 published?”。

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

每当查询子句传递给过滤器参数(例如 bool 查询中的 filter 或 must_not 参数、constant_score 查询中的 filter 参数、或 filter 聚合)时,过滤器上下文就会生效。

Example of query and filter contexts

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

  • title 字段包含单词 search
  • content 字段包含单词 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:query 参数表示查询上下文。
2:bool 和两个 match 子句在查询上下文中使用,这意味着它们用于对每个文档的匹配程度进行评分。
3:filter 参数表示过滤上下文。它的 term 和 range 子句用于过滤上下文中。它们会过滤掉不匹配的文档,但不会影响匹配文档的分数。

注意

查询上下文中的查询中,计算的分数表示为单精度浮点数,它们只有 24 位的有效位数精度。超过有效数精度的分数将转换为浮点数,但会损失精度。

提示

如果你的查询条件需要影响匹配文档的分数,请把查询子句放在查询上下文中。否则,把查询子句放在滤上下文中。参考 ElasticSearch查询 第五篇:布尔查询

想要编辑此页?
上次更新: 2025/6/3 20:29
贡献者: Junfeng Dai
Compound queries→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号