如何对mongo中的索引进行多重锚正则表达式查询

时间:2013-11-04 14:02:47

标签: java regex mongodb

我正在使用正则表达式锚搜索索引,如下所示:

/^[Anchor1]/

这一切都很好。它匹配以“Anchor1”开头的所有值,并使用idex来执行此操作。

但是,我想匹配许多起始字符串中的一个,如下所示:

/^[Anchor1][Anchor2][Anchor3][Anchor4]/

它太慢而且没有回来。这适用于任何超过3个锚点的情况。我很确定这很简单。要么我的正则表达式是垃圾(我希望这种情况如此 - 我讨厌正则表达式)或者我的mongo-fu很弱。我正在使用Java驱动程序,如果这是相关的。

我的问题是:

我在这里做错了什么?我希望能够利用mongo索引来匹配几个可能的起始字符串之一。

更新

DOH。我的正则表达是垃圾。它应该是(感谢Sammaye):

^(Anchor1|Anchor2|Anchor3)

但它仍然很慢。我会打开一个更清晰的问题。

1 个答案:

答案 0 :(得分:1)

嗯,你仍然没有多大意义,因为^[Anchor]在字符串的开头不匹配Anchor,而是匹配任何An,字符串开头的,chor,这种情况正在发生,因为您使用的是字符类[]

要匹配您需要使用的字符串开头名为Anchor的锚:

^Anchor

您不需要任何角色类。

如果有多个锚点,那么你可以这样做:

^(?:Anchor|Anchor1|Anchor2|...|AnchorN)

除非您告诉我们您要匹配的确切锚点,否则无法进一步优化。