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

问题描述 投票:0回答:1

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

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

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

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

任何指针都将非常感激。

database mongodb database-design nosql
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.