我有具有FirstName,LastName属性的用户节点。现在,我想从两个站点的两个属性中搜索一些值。让我来解释一下。

FirstName  LastName
---------  --------
Manish     Pal
Pal        Dharmesh
Rajpal     Yadav
sharma     shreepal


现在,我要搜索哪个节点的名字或姓氏包含“ pal”。
我已经写了这样的查询。

START users=node(*)
WHERE (users.FirstName =~ '(?i)pal.*' OR users.LastName =~ '(?i)pal.*')
RETURN users;


它只给了我2个节点,但我希望所有的节点都包含“ pal”

如果我这样尝试

START users=node(*)
WHERE (users.FirstName =~ '(?i)*.pal.*' OR users.LastName =~ '(?i)*.pal.*')
RETURN users;


它给了我以下错误。

“ PatternSyntaxException”

悬挂在索引4(?i).ant附近的元字符''。 ^ *

我已设置示例here供您随时参考。

谢谢。

最佳答案

第二个查询包含无效的正则表达式语法。我想你的意思是:

START users=node(*)
WHERE (users.FirstName =~ '(?i).*pal.*' OR users.LastName =~ '(?i).*pal.*')
RETURN users


请注意与您的帖子中查询的区别:


'(?i)*.pal.*'在您的帖子中,以及
上述查询中的'(?i).*pal.*'


星号*表示在我之前的表达式[星号]可以出现任意次,包括零次。但是(?i)不是正则表达式,而只是忽略实际表达式大小写的修饰符。我认为您的意思是.*。正则表达式.匹配任何字符,星号允许任何字符出现任意次数。

因此,'(?i).*pal.*'说:[忽略大小写]

上面的查询为我返回了四个结果:

users.FirstName  | users.LastName
---------------------------------
sharma           | shreepal
Rajpal           | Yadav
Pal              | Dharmesh
Manish           | Pal


如果我正确理解您的要求,那就是您想要的。

关于neo4j - 密码的模糊搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18015175/

10-12 20:50