首页 > 解决方案 > 对包含所有查询词的文档给予更高的分数

问题描述

我在弹性搜索中得分有问题。当用户输入一个包含 3 个词的查询时,有时一个包含两个词的文档会超过包含所有三个词的文档。例如,如果用户输入“elasticsearch query tutorial”,我希望包含所有这些单词的文档得分高于其中包含大量“tutorial”和“elasticsearch”术语的文档。

PS:我在查询中使用了 minimum should match 和 shingls。他们也让排名变得更好,他们并没有完全解决这个问题。我需要 lucene 的实用评分功能中的查询协调之类的东西。BM-25有弹性吗?

标签: elasticsearchluceneinformation-retrieval

解决方案


可能的解决方案之一是使用函数 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 或任何其他参数。


推荐阅读