【问题标题】:Give more score to documents that contains all query terms对包含所有查询词的文档给予更高的分数
【发布时间】:2018-10-30 05:32:58
【问题描述】:

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

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

【问题讨论】:

  • 在您的情况下,您会考虑匹配该短语吗?
  • @bhoo-day 不一定。我正在使用短语匹配,它有助于排名很多,但它不能解决我当前的问题。

标签: elasticsearch lucene information-retrieval


【解决方案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 或任何其他参数。

【讨论】:

  • 感谢您的回答,但我不想完全忽略 TF-IDF。
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 2019-07-29
相关资源
最近更新 更多