9

我正在寻找一种在使用 mongodb 2.4 执行全文搜索时按字段值对结果进行排序的方法。

我的文本搜索命令如下所示:

db.books.runCommand( "text", { search: "science" } )

我想做的是:

db.books.runCommand( "text", { search: "science", "sort": "rating" } )

我可以在文档中看到存在限制参数,但除了按相关性分数的默认排序之外,没有其他可以对结果进行排序的东西。

重新排序结果可能效率低下。什么是完成这项工作的好方法?

4

2 回答 2

4

有同样的问题,通过使用'$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 中仅适用于 2.6 版本

同样在 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)
于 2014-07-29T12:06:21.723 回答
0

尝试以下操作,适用于 MongoDB 4.4:

collection.find({
        $text:
          {
            $search: filter,
            $caseSensitive: false,
            $diacriticSensitive: true
          }
        })
        .project({ score: { $meta: "textScore" } })
        .sort({score:{$meta:"textScore"}})
于 2020-11-19T04:00:59.000 回答