Я работаю в индексе продуктов наasticsearch. У меня есть запрос bool с группами множественного соответствия для получения результатов, которые я хочу:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "term",
"fields": [
"name^3.0",
"name.fullName^10.0",
"description",
"description.fullDesc",
"detail",
"detail.fullDetail"
],
"type": "cross_fields",
"operator": "AND",
"slop": 0,
"prefix_length": 0,
"max_expansions": 50,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 10
}
},
{
"multi_match": {
"query": "term",
"fields": [
"name.fullName",
"description.fullDesc",
"detail.fullDetail"
],
"type": "cross_fields",
"operator": "OR",
"slop": 0,
"prefix_length": 0,
"max_expansions": 50,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 6
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
}
}
Мне нужно оценивать каждую группу документов, полученных в запросе с несколькими совпадениями, отдельно. Я рассмотрел использование функции оценки, но она позволяет мне определить одну функцию оценки для всего запроса bool следующим образом:
{
"from": 0,
"size": 500,
"query": {
"function_score": {
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "term",
"fields": [
"name^3.0",
"name.fullName^10.0",
"description",
"description.fullDesc",
"detail",
"detail.fullDetail"
],
"type": "cross_fields",
"operator": "AND",
"slop": 0,
"prefix_length": 0,
"max_expansions": 50,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 10
}
},
{
"multi_match": {
"query": "term",
"fields": [
"name.fullName",
"description.fullDesc",
"detail.fullDetail"
],
"type": "cross_fields",
"operator": "OR",
"slop": 0,
"prefix_length": 0,
"max_expansions": 50,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 6
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"boost": "5",
"field_value_factor": {
"field": "gain",
"factor": 1.2,
"modifier": "sqrt",
"missing": 1
},
"boost_mode": "multiply"
}
},
"version": true
}
Мне нужно определить различные функции оценки (по одной для каждого запроса на несколько совпадений), чтобы оценивать результаты независимо.