【问题标题】:Why does the Mongodb Atlas Search $search operator not return score=1 on exact query match?为什么 Mongodb Atlas Search $search 运算符在精确查询匹配时不返回 score=1?
【发布时间】:2021-08-30 19:17:55
【问题描述】:

我的目标是使用 Mongodb Atlas 全文搜索实现一个效果用户名搜索聚合。进展并不顺利。目前我很难理解,为什么下面的分数没有得到 1?

数据

[{name:  "John Doe"}, {"John Eriksen", {"Lara Croft"} ]

搜索索引

{ "mappings": { "dynamic": true } }

管道

[
  {
    '$search': {
      'text': {
        'query': 'John Doe', 
        'path': 'name'
      }
    }
  }, {
    '$addFields': {
      'score': {
        '$meta': 'searchScore'
      }
    }
  }
]

结果

John Doe → 0.66
John Eriksen" → 0.21

为什么“John Doe”返回的分数不是 1,毕竟是一个精确的分数?

【问题讨论】:

    标签: mongodb-atlas-search


    【解决方案1】:

    Atlas Search 是一个基于 Lucene 的系统,它使用复杂的评分模型 (BM25 by default),考虑了文档中的词频、整个数据集中的反频率和文档长度等因素。在这个特定示例中,text 查询还包含 2 个用空格分隔的术语,因此 Lucene 会将整个查询分解为 2 个子查询,并在总分之前对它们进行独立评分。另请注意,Lucene 分数在特定查询的上下文中是相对且有效的,因此它们的唯一目标是对命中进行排序 - 没有任何绝对数字的正确性保证

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 2021-06-01
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      相关资源
      最近更新 更多