MongoDb使用索引替代c#通过regex查找文档

时间:2015-09-23 12:19:49

标签: c# regex mongodb mongodb-csharp-2.0

我有以下查询

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

但我知道MongoDb无法在regex次查询中使用索引。是否可以实现使用索引工作的替代方案?另外,我有许多可以实现的正则表达式,例如。按字符串的开头和字符串结束搜索,字符串包含和其他。

我使用MongoDb v 3.0.2&amp; Official c# driver v 2.0

1 个答案:

答案 0 :(得分:1)

请参阅描述索引如何使用正则表达式查询的MongoDB documentation。它的要点是,只有当你的正则表达式是一个&#34;前缀&#34;时才能有效地使用索引。表达式,意味着匹配的字符串将始终以相同的子字符串开头。

通过字符串的开始搜索&#34;&#34; (如在您的代码示例中)以有效的方式使用索引。用正则表达式搜索&#34;字符串结束&#34;或&#34;包含&#34;只能使用索引扫描,而不能使用索引搜索。索引扫描只能比表扫描略快,主要是因为相关索引可能已经加载到内存中而不必从磁盘读取。

编辑:由于您在询问替代方案 - 如果您确实需要对数据进行有效的全文搜索,则可以查看专用文本搜索引擎,例如{{3} }和Lucene。将它们整合到您的解决方案中需要花费更多的精力,但您的全文查询将会非常快速。