我有一个大型 Neo4j 数据库,下面是节点和关系的小子集。
我有 3 种不同类型的节点:
使用 Cypher 很容易找到下面的模式,只需使用
MATCH
指示模式即可。
c1 -[:MADE]-> 交易 1 -[:AT]-> 终端 <-[:AT]- transaction2 <-[:MADE]- c2
我们认为这意味着
c2
节点是 c1
的第二个连接度邻居。
但是这可以简单地针对连接度 2 来完成。对于 k>2 ,我如何找到给定客户节点的第
k
连接度邻居?我只寻找 Customer
邻居节点。
我正在使用 Python 在 neo4j 中执行我的密码查询。我知道我也许可以在查询字符串中附加模式
k
次来实现这一目标,但我想知道是否可以在一个特定的密码查询中指示这一点。
如果有任何解决方案可以让我在密码查询中明确选择
k
,那就太好了。我找不到类似的东西。
要获取与
Customer
的 Customer
节点相距四度的所有 id = 'c1'
节点,您可以使用以下命令:
MATCH (c1:Customer {id: 'c1'})
(()-[:MADE]->(:Transaction)-[:AT]->(:Terminal)
<-[:AT]-(:Transaction)<-[:MADE]-(:Customer)){4} (c2)
WHERE c1 <> c2
RETURN DISTINCT c2
请注意,您所说的第二度连接在这里将是第一度。
该解决方案忽略了这样一个事实:可能有多个不同长度的路径连接给定的节点对。要仅返回每个
Customer
节点的最小度数,请找到每对之间的最短路径:
MATCH SHORTEST 1
(c1:Customer {id: 'c1'})
(()-[:MADE]->(:Transaction)-[:AT]->(:Terminal)
<-[:AT]-(:Transaction)<-[:MADE]-(:Customer)){4} (c2)
WHERE c1 <> c2
RETURN DISTINCT c2