使用多个匹配子句不会在neo4j cypher查询中返回任何结果

时间:2013-05-17 14:37:32

标签: neo4j cypher graph-databases

我正在执行以下两个查询,我得到了一些结果。

第一次查询

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

1 个答案:

答案 0 :(得分:3)

您可能会遇到here所述的“标识符唯一性”条件(请参阅Michael Hunger的第一篇文章)。 如果您在同一个(person)节点上匹配并且此处只有1 :contacts个关系,则标识符var1在此匹配中“使用”连接的节点并{{1无法分配到同一节点。

换句话说,match语句找到的节点只能由同一var7语句中的一个标识符使用。

您可以尝试使用match子句,然后使用另一个WITH来解决此问题。

MATCH