我正在寻找一种方法,在使用mongodb 2.4执行全文搜索时,按字段值对结果进行排序。
我的文本搜索命令如下所示:
db.books.runCommand( "text", { search: "science" } )
我想做的是:
db.books.runCommand( "text", { search: "science", "sort": "rating" } )
我可以在文档中看到存在一个限制参数,但不能按照相关性得分的默认排序来排序结果。
重新排序结果可能效率低下。完成这项工作的好方法是什么?
答案 0 :(得分:2)
有同样的问题,通过使用'$ meta'运算符代替runCommand来设法解决问题(pymongo):
# create text index
db.collection.ensure_index([("textField", "text")], name = "Text_search_index")
# query
queryDict = { "$text": { "$search": ""science"}}
# cursor
cursor = db.collection.find(queryDict, {'score': {'$meta': 'textScore'}, "_id":1}).sort([('score', {'$meta': 'textScore'})]).limit(limit_value)
看起来至少在pymongo中只有from 2.6 version
同样在Mongo shell中,这相当于:
db.collection.ensureIndex({"textField":"text"})
queryDict = { "$text": { "$search": "science"}}
db.collection.find(queryDict, {'score': {'$meta': 'textScore'}}).sort({'score': {'$met
a': 'textScore'}}).limit(100)
答案 1 :(得分:0)
尝试以下操作,与MongoDB 4.4配合使用:
collection.find({
$text:
{
$search: filter,
$caseSensitive: false,
$diacriticSensitive: true
}
})
.project({ score: { $meta: "textScore" } })
.sort({score:{$meta:"textScore"}})