为什么 Mongodb Atlas Search $search 运算符在精确查询匹配时不 return score=1?
Why does the Mongodb Atlas Search $search operator not return score=1 on exact query match?
我的objective是用Mongodb图集全文搜索实现一个效果用户名搜索聚合。它不是很顺利。目前我很难理解,为什么以下不会导致得分为 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”不是 return 1 分,毕竟它是一个准确的分数?
Atlas Search 是一个基于 Lucene 的系统,它使用复杂的评分模型 (BM25 by default),考虑了文档中的术语频率、整个数据集中的倒数频率和文档长度等因素。在此特定示例中,text
查询还包含 2 个由 space 分隔的术语,因此 Lucene 会将整个查询分解为 2 个子查询,并在求和为总分之前分别对它们进行评分。另请注意,Lucene 分数在特定查询的上下文中是相对的且有效的,因此他们的唯一目标是对命中进行排序 - 没有任何正确性保证作为绝对数字
我的objective是用Mongodb图集全文搜索实现一个效果用户名搜索聚合。它不是很顺利。目前我很难理解,为什么以下不会导致得分为 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”不是 return 1 分,毕竟它是一个准确的分数?
Atlas Search 是一个基于 Lucene 的系统,它使用复杂的评分模型 (BM25 by default),考虑了文档中的术语频率、整个数据集中的倒数频率和文档长度等因素。在此特定示例中,text
查询还包含 2 个由 space 分隔的术语,因此 Lucene 会将整个查询分解为 2 个子查询,并在求和为总分之前分别对它们进行评分。另请注意,Lucene 分数在特定查询的上下文中是相对的且有效的,因此他们的唯一目标是对命中进行排序 - 没有任何正确性保证作为绝对数字