为包含所有查询字词的文档提供更多分数

时间:2018-05-20 10:38:53

标签: elasticsearch lucene information-retrieval

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

PS:我在我的查询中使用最小值匹配和shingls。他们也使排名好多了,他们并没有完全解决这个问题。我需要像lucene的实用评分函数中的查询协调之类的东西。 BM-25有弹性的东西吗?

1 个答案:

答案 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或任何其他参数。