MongoDB OR与正则表达式不使用复合索引

时间:2018-03-23 04:56:33

标签: database mongodb database-design nosql

真的在智慧结束;我使用以下查询来搜索包含大约300K文档的集合

query = { $or: [
  {description: { $regex: ".*app.*"}},
  {username: { $regex: ".*app.*"}}, 
]};

并简单地将其放在.find()函数中。它非常慢。像每个查询至少需要20秒。

我已经在用户名和描述上尝试了单独的索引,现在在{description:1,username:1}上有一个复合索引,但它似乎没有任何区别。如果我检查MongoDB实时指标,它根本不使用索引。

任何指针都将非常感激。

1 个答案:

答案 0 :(得分:0)

使用部分字符串匹配的正则表达从不使用索引,因为顾名思义,部分字符串匹配它不知道从哪里开始寻找匹配,并且必须遍历所有字符串。

作为一种解决方案,您可以将数据库挂钩到像Lucene这样专门从事此类查询的工作。