我正在执行以下两个查询,我得到了一些结果。
第一次查询
START
person=node:NODE_TYPE(NODE_TYPE='PERSON')
MATCH
(person)-[?:contacts]->(var1)-[?:addresses]->(var2)-[?:details]->(var3)-[?:items]->(var4)-[?:items]->(var5)-[?:value]->(var6)
WHERE
var2.`#nodeId` ='at0000' and var3.`#nodeId` ='at0001' and var4.`#nodeId` ='at0002' and var5.`#nodeId` ='at0028' and var6.`value` =~'address.*'
return distinct person;
第二次查询
START
person=node:NODE_TYPE(NODE_TYPE='PERSON')
MATCH
(person)-[?:contacts]->(var1)-[?:addresses]->(var2)-[?:details]->(var3)-[?:items]->(var4)-[?:value]->(var5)
WHERE
var2.`#nodeId` ='at0000' and var3.`#nodeId` ='at0001' and var4.`#nodeId` ='at0009' and var5.`value` =~'india.*'
return distinct person;
但是当我将两个查询组合到一个查询中以获得符合这两个条件的人时,它就无法正常工作。
组合查询
START
person=node:NODE_TYPE(NODE_TYPE='PERSON')
MATCH
(person)-[?:contacts]->(var1)-[?:addresses]->(var2)-[?:details]->(var3)-[?:items]->(var4)-[?:items]->(var5)-[?:value]->(var6) , (person)-[?:contacts]->(var7)-[?:addresses]->(var8)-[?:details]->(var9)-[?:items]->(var10)-[?:value]->(var11)
WHERE
var2.`#nodeId` ='at0000' and var3.`#nodeId` ='at0001' and var4.`#nodeId` ='at0002' and var5.`#nodeId` ='at0028' and var6.`value` =~'address.*' and
var8.`#nodeId` ='at0000' and var9.`#nodeId` ='at0001' and var10.`#nodeId` ='at0009' and var11.`value` =~'india.*'
return distinct person;
此查询返回一个空迭代器。
我使用'逗号'来组合MATCH条件和'和'来组合WHERE条件。 这有什么问题吗?
(我正在实现一个查询构建器来构建密码查询。我必须检查多个条件匹配。执行此操作的最佳方法是什么?)
Neo4j 1.9M04
答案 0 :(得分:3)
您可能会遇到here所述的“标识符唯一性”条件(请参阅Michael Hunger的第一篇文章)。
如果您在同一个(person)
节点上匹配并且此处只有1 :contacts
个关系,则标识符var1
在此匹配中“使用”连接的节点并{{1无法分配到同一节点。
换句话说,match语句找到的节点只能由同一var7
语句中的一个标识符使用。
您可以尝试使用match
子句,然后使用另一个WITH
来解决此问题。
MATCH