【发布时间】:2015-09-18 23:02:07
【问题描述】:
我在 neo4j 中使用此查询获取节点的第一个 n 个邻居: (在本例中,n = 6)
我有一个加权图,所以我也按重量排序结果:
START start_node=node(1859988)
MATCH start_node-[rel]-(neighbor)
RETURN DISTINCT neighbor,
rel.weight AS weight ORDER BY proximity DESC LIMIT 6;
我想获取整个子图,包括第二个邻居(前六个孩子的第一个邻居)。
我试过 smtg 之类的:
START start_node=node(1859988)
MATCH start_node-[rel]-(neighbor)
FOREACH (neighbor | MATCH neighbor-[rel2]-(neighbor2) )
RETURN DISTINCT neighbor1, neighbor2, rel.proximity AS proximity ORDER BY proximity DESC LIMIT 6, rel2.proximity AS proximity ORDER BY proximity DESC LIMIT 6;
语法仍然错误,但我也不确定输出: 我想要一个元组表,父、子和权重: [node_A - node_B - 权重]
我想看看它是执行一个查询还是六个查询更好。 有人可以帮助澄清如何迭代查询(FOREACH)并格式化输出吗?
谢谢!
【问题讨论】:
-
您熟悉variable length path Cypher 模式吗?
(n)-[*1..3]->(m) -
是的,它计算从第一个节点(0 包括根节点)到最后一个节点的跳数。所以在我的模式中,每个连接到父母的孩子都是 [*0..1]。
标签: performance neo4j cypher subgraph iterated-function