我在Elasticsearch中得分有问题。当用户输入包含3个词的查询时,有时一个文档包含两个单词,则该文档的得分超过包含所有三个单词的文档。例如,如果用户输入“elasticsearch查询教程”,我希望包含所有这些单词的文档的得分要比其中包含许多“tutorial”和“elasticsearch”术语的文档得分更高。
PS:我在查询中使用的最小值应匹配并对齐。他们的排名也提高了很多,他们没有完全解决这个问题。我需要在Lucene的实际评分功能中使用查询协调之类的方法。 BM-25有没有类似的 flex ?
最佳答案
一种可能的解决方案是使用function score:
{
"query": {
"function_score": {
"query": { "match_all": {} },
"functions": [
{
"filter": { "match": { "title": "elasticserch" } },
"weight": 1
},
{
"filter": { "match": { "title": "tutorial" } },
"weight": 1
}
],
"score_mode": "sum"
}
}
}
在这种情况下,对于具有更多匹配项的文档,您显然将拥有更好的位置。但是,这将完全忽略TF-IDF或任何其他参数。
关于elasticsearch - 给包含所有查询词的文档更多的分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50433955/