Disjunction max 查询编辑

返回与一个或多个包装查询(称为查询子句或子句)匹配的文档。

如果返回的文档与多个查询子句匹配,则 dis_max 查询会为该文档分配来自任何匹配子句的最高相关性分数,以及为任何其他匹配子查询增加的平局增量。

示例请求编辑

response = client.search(
  body: {
    query: {
      dis_max: {
        queries: [
          {
            term: {
              title: 'Quick pets'
            }
          },
          {
            term: {
              body: 'Quick pets'
            }
          }
        ],
        tie_breaker: 0.7
      }
    }
  }
)
puts response
GET /_search
{
  "query": {
    "dis_max": {
      "queries": [
        { "term": { "title": "Quick pets" } },
        { "term": { "body": "Quick pets" } }
      ],
      "tie_breaker": 0.7
    }
  }
}

dis_max 的顶级参数编辑

查询
(必填,查询对象数组)包含一个或多个查询子句。 返回的文档 必须与其中一个或多个查询匹配。 如果文档与多个查询匹配,Elasticsearch 将使用最高的 相关性分数
tie_breaker

(可选,浮点数)介于 01.0 之间的浮点数,用于增加与多个查询子句匹配的文档的 相关性分数。 默认为 0.0

您可以使用 tie_breaker 值为在多个字段中包含相同词项的文档分配比仅在这些多个字段中最佳字段中包含此词项的文档更高的相关性分数,而不会将其与多个字段中包含两个不同词项的更好情况混淆。

如果文档与多个子句匹配,则 dis_max 查询按如下方式计算文档的相关性分数

  1. 取分数最高的匹配子句的相关性分数。
  2. 将任何其他匹配子句的分数乘以 tie_breaker 值。
  3. 将最高分数添加到相乘的分数中。

如果 tie_breaker 值大于 0.0,则所有匹配的子句都算数,但分数最高的子句算数最多。