使用MongoDB全文搜索排序

时间:2013-05-01 04:00:00

标签: mongodb

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

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

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

我想做的是:

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

我可以在文档中看到存在一个限制参数,但不能按照相关性得分的默认排序来排序结果。

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

2 个答案:

答案 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"}})