我正在尝试使用mongo $ text搜索替换在多个字段上使用$ regex的现有查询,并发现分数与我期望的不符。我在下面创建了一个小样本来演示:
db.pers.insert({ 'name': 'Thoma', 'firstName': 'Albert'})
db.pers.insert({ 'name': 'Thoma', 'firstName': 'Berta'})
db.pers.insert({ 'name': 'Thoma', 'firstName': 'Charlie'})
db.pers.insert({ 'name': 'Thomas', 'firstName': 'David'})
db.pers.createIndex( {name: "text"} )
db.pers.find( {$text: { $search: 'Thomas'} }, { 'score': { $meta: 'textScore' } } ).pretty()
...这是结果:
{
"_id" : ObjectId("5d88a2914185d8425164d564"),
"name" : "Thomas",
"firstName" : "David",
"score" : 1
}
{
"_id" : ObjectId("5d88a2674185d8425164d561"),
"name" : "Thoma",
"firstName" : "Albert",
"score" : 1.1
}
{
"_id" : ObjectId("5d88a26e4185d8425164d562"),
"name" : "Thoma",
"firstName" : "Berta",
"score" : 1.1
}
{
"_id" : ObjectId("5d88a2794185d8425164d563"),
"name" : "Thoma",
"firstName" : "Charlie",
"score" : 1.1
}
令我惊讶的是,完全匹配Thomas
的得分低于其他结果。
这是什么原因?
是否有一种方法可以影响得分,以便精确匹配得分更高?
我想将分数用于排序目的。这样的结果很好,因为我想在上面的示例中找到Thoma
。但是-我也希望在搜索结果的顶部完全匹配。
非常感谢您提供有关评分的任何意见或针对不同解决方案的建议。