过去3个月我一直在使用Neo4j。
我已经构建了一个10M节点图数据库。
我一直在阅读:http://neo4j.com/docs/stable/introduction-pattern.html
我的目标是通过它的属性(简单部分)查找单个节点的值,然后我需要发现连接到具有特定边缘标签的查找节点的所有节点。我的问题是我的行为非常不同,我真的不明白为什么。
底线是我需要一个模式,允许我查找Node1并查找连接到具有特定边缘标签的Node1的每个节点,然后为其分配单个标识符值(这样我就可以说这个组100个节点是ClusterIDGroup1的一部分。
模式1
MATCH (l:CodeType { id_value : '050001' })-[:IDENTIFIED_BY*]-(m:CodeType)
WHERE 1=1
RETURN *
LIMIT 10000
;
返回:62个节点
模式2
MATCH (l:CodeType { id_value : '050001' })-[:IDENTIFIED_BY*30]-(m:CodeType)
WHERE 1=1
RETURN *
LIMIT 10000
;
返回:90个节点
模式3
MATCH (l:CodeType { id_value : '050001' })-[:IDENTIFIED_BY*0..30]-(m:CodeType)
WHERE 1=1
RETURN *
LIMIT 10000
;
返回:115个节点
为什么我会根据变长表达式获得115,90和62?我认为1)*会让我获得最多的节点2)* 0..30会让我获得第二名和3)* 30会让我得到最少的。
由于
答案 0 :(得分:1)
如果两个节点之间的距离为零,则根据定义它们 同一节点。
所以,回答你的问题:
l
节点相距30个关系的节点。l
节点获得每个节点的关系深度为0到30。我认为仅返回l
应该会对您有所帮助,return *
在我看来绝不是一个好选择。
此外,使用WHERE 1=1
在您的查询中无用,您可以安全地删除它。