繁体   English   中英

来自 Neo4j 的 py2neo 查询子图

[英]py2neo query subgraph from Neo4j

我想从具有给定源的大型图形数据库中查询子图。 假设我想要给定节点的前 25 个邻居,以及这组节点之间的所有关系,我的查询应该如何?

目前我有:

MATCH (source {label:'source'}) -[:relation]-> (neighbors)
RETURN source,neighbors
LIMIT 25

这适用于 neo4j 浏览器,返回 26 个节点以及这些节点之间的所有现有关系。 但是,当我尝试通过 py2neo 执行相同的查询时:

py2neo.cypher.execute(query)

它只返回 26 个节点以及源和 25 个邻居之间的 25 个直接边连接,这是有道理的。 但我想知道为什么浏览器结果与 py2neo 结果之间存在差异。 以及如何通过返回的所有边缘连接实现相同的结果。

一般来说,我想知道以下较小的问题:

  • 如何将单个节点附加到neo4j中的节点列表? 例如 nlist = 邻居 + 节点

  • 如何返回两组节点之间的所有关系? 例如 return (a in nlist) -[:relation]-> (b in nlist)

编辑:

为了可视化,我希望结果图是这样的

子图

而不是像这样的星图

星星

感谢您的任何评论。

关于 Neo4j 浏览器和 py2neo 结果之间的区别:可能您正在使用启用“连接结果节点”选项的图形可视化模式。 例如,尝试禁用(下图)它或将可视化模式更改为“文本”。

图形可视化选项

关于 Cypher 查询,您可以使用collect()合并sourceneighbors

MATCH (source {label:'source'})-[:relation]->(neighbors)
WITH collect(source) + collect(neighbors) as all
UNWIND all AS nodes
RETURN nodes

为了返回两组节点之间的所有边(在这种情况下是从集合到自身),参考这篇文章: Neo4j,获取一组节点之间的所有关系

然后使用 Cypher 查询返回子图

MATCH (source {label:'source'})-[:relation]->(neighbors)
WITH collect(distinct source) + collect(neighbors) as all
UNWIND all AS nodes
MATCH (nodes)-[:relation]->(nei)
WHERE nei in nodes
RETURN nodes,nei

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM