node.js - MongoDB 和 NodeJS 中的全文搜索,并以不同值进行文本评分排序

标签 node.js mongodb full-text-search distinct

我正在尝试使用 mongodb 3.4、nodejs 和 socket.io 实现全文搜索,并进行区分和排序。到目前为止一切顺利,我的代码可以正常工作,但没有排序部分:

socket.on('searchProductName', function (data) {
    MongoClient.connect(config.database.url, function (err, db) {
        db.collection(config.database.collection.products).distinct('productName',
        {   
            $text: {$search: data}}, {score: {$meta: "textScore"}
        },
        function (err, doc) {
            socket.emit('searchProductNameResults', doc);
            db.close();
        });

    });
});

我正在尝试找到一种基于 textScore 排序方法来使用它的方法,但对于不同的值:

db.collection.find(
   <query>,
   { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

有什么想法吗?

谢谢

最佳答案

使用aggregate() 聚合框架中的函数可以利用 text search within the $match , $sort $group 管道运营商将帮助您实现 想要的结果。

以以下管道为例,它使用 $match 运算符作为初始步骤,包括 $text操作。分数可以是 $sort 的一部分管道规范和前面的管道,$group 使用 $addToSet 创建按分数排序的不同值 运算符:

socket.on('searchProductName', function (data) {
    MongoClient.connect(config.database.url, function (err, db) {
        var pipeline = [
            { 
                "$match": {
                    "$text": {
                        "$search": data
                    }
                }
            }, 
            { "$sort": { "score": { "$meta": "textScore" } } },
            {
                "$group": {
                    "_id": null,
                    "products": { "$addToSet": "$productName" }                     
                }
            }
        ];
        db.collection(config.database.collection.products)
          .aggregate(pipeline, function (err, docs) {
                socket.emit('searchProductNameResults', docs[0].products);
                db.close();
            }
        );

    });
});

关于node.js - MongoDB 和 NodeJS 中的全文搜索,并以不同值进行文本评分排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652038/

相关文章:

javascript - mongo游标findOne

MongoDB C# 驱动程序 'Cursor not found'

node.js - 从 TeamCity 运行 Bower?

node.js - Puppeteer - 新窗口关于 :blank

ruby-on-rails - Mongoid:通过id数组查找

python - 如何在波斯语文本上创建可搜索树?

elasticsearch - 在Elastic的_all字段中搜索并返回突出显示的结果

database - 在 MongoDB 全文搜索中突出显示匹配项

node.js - IIS 覆盖 Express 响应的正文

javascript - NodeJS动态读取目录