使用密码进行模糊搜索

Man*_*kal 2 neo4j cypher

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

FirstName  LastName
---------  --------
Manish     Pal
Pal        Dharmesh
Rajpal     Yadav
sharma     shreepal
Run Code Online (Sandbox Code Playgroud)

现在我想搜索哪个节点的名字或姓氏包含'pal'.我写了这样的查询.

START users=node(*) 
WHERE (users.FirstName =~ '(?i)pal.*' OR users.LastName =~ '(?i)pal.*') 
RETURN users;
Run Code Online (Sandbox Code Playgroud)

它只给我2个节点,但我希望所有节点都包含'pal'

如果我这样试试

START users=node(*) 
WHERE (users.FirstName =~ '(?i)*.pal.*' OR users.LastName =~ '(?i)*.pal.*') 
RETURN users;
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误.

"PatternSyntaxException"

悬空元字符' '近索引4(?i).ant.^*

我已在此处设置示例供您参考.

谢谢.

khi*_*ras 6

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

START users=node(*) 
WHERE (users.FirstName =~ '(?i).*pal.*' OR users.LastName =~ '(?i).*pal.*') 
RETURN users
Run Code Online (Sandbox Code Playgroud)

请注意帖子中查询的不同之处:

  • '(?i)*.pal.*' 在你的帖子中,和
  • '(?i).*pal.*' 在上面的查询中

星号*表示我之前的表达式[星号]可能出现任意次数,包括零.但是(?i)没有正则表达式,只是一个忽略实际表达式的修饰符.我想你的意思.*.正则表达式.匹配任何字符,星号允许任何字符出现任意次数.

因此,'(?i).*pal.*'说:[忽略大小写] <任意字符的任意数量> <确切的字符序列:"pal"> <任意字符的任意数>

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

users.FirstName  | users.LastName
---------------------------------
sharma           | shreepal
Rajpal           | Yadav
Pal              | Dharmesh     
Manish           | Pal
Run Code Online (Sandbox Code Playgroud)

如果我理解你的话,那就是你想要的.