Elasticsearch:禁用多匹配查询的协调因子
Elasticsearch: disable coordination factor for multi match query
我在每个字段上使用不同权重的多重匹配查询。
我将 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 仍在对所有不同领域的分数求和,然后将结果乘以协调因子。
如何禁用协调因子?
我建议将 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
.
时的对比
我在每个字段上使用不同权重的多重匹配查询。 我将 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 仍在对所有不同领域的分数求和,然后将结果乘以协调因子。
如何禁用协调因子?
我建议将 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
.