我使用一个多匹配查询,在每个字段上有不同的权重。我将tie_breaker设置为1以禁用use_dis_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仍然在对所有不同字段的分数进行求和,然后将结果乘以协调因子。
我怎样才能禁用协调因素?
发布于 2015-02-13 19:20:13
我建议将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是true时,每个文档的结果分数比设置为false时的分数要高。
https://stackoverflow.com/questions/28503578
复制相似问题