1

我有以下查询

query = query & Builders<Profile>.Filter.And(query, 
Builders<Profile>.Filter.Regex(p => p.email, '^' + search));

但我知道MongoDb不能在regex查询中使用索引。是否可以实现使用索引的替代方案?此外,我有许多可以实现的正则表达式,例如。按字符串的开头和结尾、字符串包含等搜索。

我用MongoDb v 3.0.2&Official c# driver v 2.0

4

1 回答 1

1

请参阅描述索引如何与正则表达式查询一起使用的MongoDB 文档。它的要点是只有在您的正则表达式是“前缀”表达式的情况下才会有效地使用索引,这意味着匹配的字符串将始终以相同的子字符串开头。

因此,搜索“按字符串的开头”(如您的代码示例中所示)将以有效的方式使用索引。使用正则表达式“按字符串结尾”或“包含”进行搜索只能将索引用于索引扫描,而不能用于索引搜索。索引扫描只能比表扫描快一点,主要是因为相关索引可能已经加载到内存中,而不必从磁盘读取。

编辑:既然您在询问替代方案 - 如果您确实需要对数据进行有效的全文搜索,您可以查看专用的文本搜索引擎,例如LuceneSolr。将它们整合到您的解决方案中需要付出更大的努力,但您的全文查询将非常快。

于 2015-09-23T12:31:02.000 回答