Запрос на совпадение Elasticsearch 5.x: вычислить оценку с использованием частоты термина и игнорировать частоту обратных документов
Я пытаюсь запросить поле, содержащее много слов, в то время как каждое слово уже умножено на его доминирование в документе. Поэтому, здесь мне нужна частота, а idf действительно меняет оценку документов.
Например, у меня есть два документа, которые содержат поле "слова", первый документ имеет слово "мода" 1000 раз, а второй документ также содержит слово "ребенок" 1000 раз. Оценка баллов по частоте терминов вернула бы одинаковый балл (приблизительно) для обоих, но дополнительная оценка idf изменяет результаты, которых я бы хотел избежать.
Отображение у меня довольно простое:
"query": {
"match": {
"words": {
"query": "fashion baby"
}
}
}
И запрос является простым запросом на совпадение:
План объяснения выглядит следующим образом:
{
"_shard": "[keywords_words][4]",
"_node": "QQC692ZKQIif-_2eo_wO6Q",
"_index": "keywords_words",
"_type": "topic_words",
"_id": "133",
"_score": 407.61816,
"_source": {},
"_explanation": {
"value": 407.61816,
"description": "sum of:",
"details": [
{
"value": 407.61816,
"description": "weight(words:baby in 0) [PerFieldSimilarity], result of:",
"details": [
{
"value": 407.61816,
"description": "score(doc=0,freq=1000.0), product of:",
"details": [
{
"value": 3.5902672,
"description": "queryWeight, product of:",
"details": [
{
"value": 3.5902672,
"description": "idf, computed as log((docCount+1)/(docFreq+1)) + 1 from:",
"details": [
{
"value": 2,
"description": "docFreq",
"details": []
},
{
"value": 39,
"description": "docCount",
"details": []
}
]
},
{
"value": 1,
"description": "queryNorm",
"details": []
}
]
},
{
"value": 113.53422,
"description": "fieldWeight in 0, product of:",
"details": [
{
"value": 31.622776,
"description": "tf(freq=1000.0), with freq of:",
"details": [
{
"value": 1000,
"description": "termFreq=1000.0",
"details": []
}
]
},
{
"value": 3.5902672,
"description": "idf, computed as log((docCount+1)/(docFreq+1)) + 1 from:",
"details": [
{
"value": 2,
"description": "docFreq",
"details": []
},
{
"value": 39,
"description": "docCount",
"details": []
}
]
},
{
"value": 1,
"description": "fieldNorm(doc=0)",
"details": []
}
]
}
]
}
]
}
]
}
},
{
"_shard": "[keywords_words][1]",
"_node": "QQC692ZKQIif-_2eo_wO6Q",
"_index": "keywords_words",
"_type": "topic_words",
"_id": "490",
"_score": 344.91177,
"_source": {},
"_explanation": {
"value": 344.9118,
"description": "sum of:",
"details": [
{
"value": 344.9118,
"description": "weight(words:fashion in 2) [PerFieldSimilarity], result of:",
"details": [
{
"value": 344.9118,
"description": "score(doc=2,freq=1000.0), product of:",
"details": [
{
"value": 3.3025851,
"description": "queryWeight, product of:",
"details": [
{
"value": 3.3025851,
"description": "idf, computed as log((docCount+1)/(docFreq+1)) + 1 from:",
"details": [
{
"value": 2,
"description": "docFreq",
"details": []
},
{
"value": 29,
"description": "docCount",
"details": []
}
]
},
{
"value": 1,
"description": "queryNorm",
"details": []
}
]
},
{
"value": 104.43691,
"description": "fieldWeight in 2, product of:",
"details": [
{
"value": 31.622776,
"description": "tf(freq=1000.0), with freq of:",
"details": [
{
"value": 1000,
"description": "termFreq=1000.0",
"details": []
}
]
},
{
"value": 3.3025851,
"description": "idf, computed as log((docCount+1)/(docFreq+1)) + 1 from:",
"details": [
{
"value": 2,
"description": "docFreq",
"details": []
},
{
"value": 29,
"description": "docCount",
"details": []
}
]
},
{
"value": 1,
"description": "fieldNorm(doc=2)",
"details": []
}
]
}
]
}
]
}
]
}
}
Результаты очень важны, поэтому, к сожалению, запрос constant_score в данном случае не актуален. Есть ли способ заставить запрос использовать только термин "частота"?
Заранее большое спасибо!