MongoDB查询优化搜索文本

时间:2017-10-20 15:18:56

标签: node.js mongodb optimization query-optimization

我有一个在NodeJS中开发的应用程序,它作为REST API工作并使用来自MongoDB的数据

在MongoDB中,我有一个名为'ftp'的集合,其中包含超过1000万个具有以下结构的文档

{
        "_id" : ObjectId("59e7c66911506bd1725cf145"),
        "ip" : "72.32.177.76",
        "timestamp" : "2017-10-16T02:30:26-04:00",
        "data" : {
                "banner" : "220-FileZilla Server version 0.9.41 beta\r\n"
        }       
}

“data.banner”字段是一个hased索引

从NoodeJs我创建一个聚合查询,使用正则表达式过滤一串文本,对结果进行分组和计数。

function getData(timeInit, table, textSearch, res) {
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        db.collection(table).aggregate([
            {
                $match: { 'data.banner': $regex:textSearch}
            }, {
                $group: {
                    _id: '$data.banner',
                    num: { $sum: 1 },                   
                }
            },
            {
                $sort: {
                    num: -1
                }
            },{
                $limit:5
            }
        ], {
                allowDiskUse: true
            }
        ).toArray(function (err, result) {
            if (err) throw err;
            var timeFinal = new Date();
            var data = {
                result: result,
                timeLapse: (timeFinal - timeInit) / 1000,
                numResult: result.length
            };
            res.send(data);
            db.close();
        });
    });
};

使用正则表达式的查询大约需要8秒才能返回结果,我认为时间过长,因为正则表达式不是最佳的。

我的问题是如何使过滤器以最佳方式搜索包含文本的文档,从而缩短响应时间。

如果有人知道如何优化这种类型的查询,我会非常感激。

0 个答案:

没有答案