elasticsearch - 给包含所有查询词的文档更多的分数

标签 elasticsearch lucene information-retrieval

我在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/

相关文章:

elasticsearch - 使用多个应该查询

Solr * :* and 2 Filter queries VS. 1 查询 1 过滤查询

java - Java中的搜索引擎算法?

java - 信息检索系统的数据结构/算法

elasticsearch - 在 Elasticsearch 中为数据建立索引后将字段映射到地理点

docker - Syslog 驱动程序不适用于 docker compose 和 elk stack

javascript - Elasticsearch JS的getMapping函数使用方法

grails - Grails可搜索插件查询

lucene - Lucene 3.5中分组和构面之间有什么区别

information-retrieval - 如何使用欧氏距离计算三对文档的相似度值