首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch:禁用多匹配查询的协调因子

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

Stack Overflow用户
提问于 2015-02-13 15:58:00
回答 1查看 1.4K关注 0票数 2

我使用一个多匹配查询,在每个字段上有不同的权重。我将tie_breaker设置为1以禁用use_dis_max,并使用和而不是得分的最大值。

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
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仍然在对所有不同字段的分数进行求和,然后将结果乘以协调因子。

我怎样才能禁用协调因素?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-13 19:20:13

我建议将should的个别情况分开,并单独增加。它看起来可能如下所示:

代码语言:javascript
复制
{
  "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_coordtrue时,每个文档的结果分数比设置为false时的分数要高。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28503578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档