析取最大化查询

编辑

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

如果返回的文档匹配多个查询子句,则 dis_max 查询会为该文档分配任何匹配子句中的最高相关性分数,并为任何其他匹配的子查询增加一个平分决胜增量。

请求示例

编辑
resp = client.search(
    query={
        "dis_max": {
            "queries": [
                {
                    "term": {
                        "title": "Quick pets"
                    }
                },
                {
                    "term": {
                        "body": "Quick pets"
                    }
                }
            ],
            "tie_breaker": 0.7
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      dis_max: {
        queries: [
          {
            term: {
              title: 'Quick pets'
            }
          },
          {
            term: {
              body: 'Quick pets'
            }
          }
        ],
        tie_breaker: 0.7
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    dis_max: {
      queries: [
        {
          term: {
            title: "Quick pets",
          },
        },
        {
          term: {
            body: "Quick pets",
          },
        },
      ],
      tie_breaker: 0.7,
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "dis_max": {
      "queries": [
        { "term": { "title": "Quick pets" } },
        { "term": { "body": "Quick pets" } }
      ],
      "tie_breaker": 0.7
    }
  }
}

dis_max 的顶层参数

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

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

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

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

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

如果 tie_breaker 值大于 0.0,则所有匹配的子句都会计算在内,但得分最高的子句计算的权重最大。