我在弹性搜索中得分有问题。当用户输入包含3个术语的查询时,有时候文档中包含两个单词,超出包含所有三个单词的文档。例如,如果用户输入“elasticsearch查询教程”,我希望包含所有这些单词的文档得分高于包含大量“教程”和“弹性搜索”术语的文档。
PS:我在我的查询中使用最小值匹配和shingls。他们也使排名好多了,他们并没有完全解决这个问题。我需要像lucene的实用评分函数中的查询协调之类的东西。 BM-25有弹性的东西吗?
答案 0 :(得分:1)
其中一种可能的解决方案是使用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或任何其他参数。