MongoDB OR与正则表达式不使用复合索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB OR与正则表达式不使用复合索引相关的知识,希望对你有一定的参考价值。
真的在智慧结束;我正在使用以下查询来搜索大约300K文档的集合
query = { $or: [
{description: { $regex: ".*app.*"}},
{username: { $regex: ".*app.*"}},
]};
并简单地将其放在.find()函数中。它非常慢。像每个查询至少需要20秒。
我已经在用户名和描述上尝试了单独的索引,现在在{description:1,username:1}上有一个复合索引,但它似乎没有任何区别。如果我检查MongoDB实时指标,它根本不使用索引。
任何指针都将非常感激。
答案
使用部分字符串匹配的正则表达式从不使用索引,因为顾名思义,对于部分字符串匹配,它不知道从哪里开始查找匹配,并且必须遍历所有字符串。
作为一种解决方案,您可以将数据库挂钩到像Lucene这样的专门用于此类查询的东西。
以上是关于MongoDB OR与正则表达式不使用复合索引的主要内容,如果未能解决你的问题,请参考以下文章