Mongoose加速了对多个领域的搜索

时间:2016-09-17 07:51:51

标签: node.js mongodb amazon-ec2 mongoose mongoose-schema

我正在研究mongoose文档的搜索功能,我必须搜索超过250,000个文档。 在此功能中,我必须在多个字段上添加搜索索引。 在文档中,一些字段是字符串类型, 一些是多层次的对象。 我已将所有可能的字段编入索引。

在当地,我有100,000个文件,当我搜索它们时,花了大约300-400毫秒。 但是当我在服务器上搜索它们时,需要大约10-15秒才能响应。

搜索查询是基于条件的,但我正在共享一个小代码段。

   $and(

{
    $or:[
        {'field1': {$regex: re }},
        {'field2': {$regex: re }},
        {'level1.level2.value': {$regex: re }}
    ]
},
{
    $and:[ 
        {
            lowAge: {$lte: parseInt(age)}
        },
        {
            highAge: {$gte: parseInt(age)}
        },
        {
            $or:[
                {
                   gender:gender
                },
                {
                   gender:"N/A"
                }
            ]
        }
    ]
}
 )

有人可以建议我如何加快服务器上的流程。

1 个答案:

答案 0 :(得分:0)

为了进一步提高速度,您可以使用文本索引。

但文本索引附带以下存储要求和性能成本

  • 文本索引可能很大。它们为每个插入的文档的每个索引字段中的每个唯一的后梗词包含一个索引条目。
  • 构建文本索引与构建大型多键索引非常相似,并且比在相同数据上构建简单的有序(标量)索引需要更长的时间。 在现有集合上构建大型文本索引时,请确保对打开的文件描述符具有足够高的限制。请参阅建议的设置。
  • 文本索引会影响插入吞吐量,因为MongoDB必须为每个新源文档的每个索引字段中的每个唯一后置词添加索引条目。
  • 此外,文本索引不存储有关文档中单词邻近度的短语或信息。因此,当整个集合适合RAM时,短语查询将更有效地运行。

请参阅以下参考资料

https://docs.mongodb.com/manual/core/index-text/

https://www.tutorialspoint.com/mongodb/mongodb_text_search.htm

希望它有所帮助!