Elasticsearch:禁用多匹配查询的协调因子

时间:2015-02-13 15:58:00

标签: elasticsearch

我在每个字段上使用不同权重的多匹配查询。 我将tie_breaker设置为1以禁用use_dis_max并使用sum而不是max来获得分数。

GET index_name/index_type/_search?explain
{
 "size": 1,
  "query": {
  "multi_match": {
   "query": "ticket",
   "fields": ["title^9", "descr^4", "*section_body"],
   "tie_breaker": 1
  }
 }
}

ES将每个字段的分数相加,然后将其乘以协调因子。

我想禁用协调因子,所以我尝试将多匹配查询包装到bool查询中,并将disable_coord设置为true,如下所示:

GET index_name/index_type/_search?explain
{
  "size": 1,
  "query": {
    "bool": {
       "disable_coord": true,
       "should": [
         {
          "multi_match": {
          "query": "ticket",
          "fields": ["title^9", "descr^4", "*section_body"],
          "tie_breaker": 1
           }
         }
      ]
    }
 }
}

但是我可以看到评分公式没有任何变化,ES仍在对所有不同领域的分数求和,然后将结果乘以协调因子。

如何禁用协调因子?

1 个答案:

答案 0 :(得分:1)

我建议将should的个别条件分开并单独加强它们。这可能类似于以下内容:

{
  "size": 1,
  "query": {
    "bool": {
      "disable_coord": true,
      "should": [
        {"match" : {"title" : {"query" : "ticket", "boost" : 9}}},
        {"match" : {"descr" : {"query" : "ticket", "boost" : 4}}},
        {"multi_match" : {
          "fields" : ["*section_body"],
          "query" : "ticket"
        }}
      ]
    }
  }
}

对于我打开的一组愚蠢的测试数据,它看起来确实会导致不再应用协调因子,即当disable_coord为{{1}时,每个文档的得分都会更高}当它设置为true时。