MongoDB全文search和按相关性sorting的多个单词

我有以下全文search查询示例:

db.collection.find({ $text: { $search: "dog cat" } }) 

这将返回包含dog OR cat文件,但我想按相关性sorting结果:

  • 包含所有search词的结果应首先列出,
  • 其次是仅包含search词之一的词。

当然,我正在寻找一个解决scheme,以及3个或更多的search词。

我发现在MongoDB中有一个聚合pipe道 ,可能太晚了,我的脑子被炸了,但是不知道在这种情况下我可以如何使用它。

— Node.js和MongoJS中的解决scheme—

只是将所有东西放在一起以备将来参考,在Node.js / MongoJS中实现了Tug Grall的解决scheme:

 .get(function(req, res) { db.docs.find({ $text: { $search: req.query.q } }, {score : { $meta: "textScore" } }) .sort( { score: { $meta: "textScore" } }, function(err, results) { if (err) { res.send(err); } else { res.json(results); } } ); }); 

在MongoDB 2.6.x中,您可以直接在查询中使用$ meta textScore:

 db.docs.find( { $text : {$search : "dog cat"} } , {score : { $meta: "textScore" } } ).sort( { score: { $meta: "textScore" } } ) 

结果按相关性sorting:

  db.docs.find( { $text : {$search : "dogs cat"} } , {score : { $meta: "textScore" } } ).sort( { score: { $meta: "textScore" } } ) { "_id" : "3", "text" : "I like dogs and cats", "score" : 1.3333333333333333 } { "_id" : "4", "text" : "I like dogs. But I do not like cats", "score" : 1.25 } { "_id" : "1", "text" : "I like dogs", "score" : 0.75 } { "_id" : "2", "text" : "I like cats", "score" : 0.75 }