来自 Neo4j 的 py2neo 查询子图
py2neo query subgraph from Neo4j
我想从具有给定源的大型图形数据库中查询子图。假设我想要给定节点的前 25 个邻居,以及这组节点之间的所有关系,我的查询应该如何?
目前我有:
MATCH (source {label:'source'}) -[:relation]-> (neighbors)
RETURN source,neighbors
LIMIT 25
这适用于 neo4j 浏览器,returning 26 个节点以及这些节点之间的所有现有关系。但是,当我尝试通过 py2neo 执行相同的查询时:
py2neo.cypher.execute(query)
它只有 return26 个节点以及源和 25 个邻居之间的 25 个直接边连接,这是有道理的。但我想知道为什么浏览器结果与 py2neo 结果之间存在差异。以及我如何使用所有边缘连接实现相同的结果 returned.
总的来说,我想知道以下较小的问题:
如何将单个节点附加到 neo4j 中的节点列表?例如nlist = 邻居 + 节点
如何return两组节点之间的所有关系?例如return (a in nlist) -[:relation]-> (b in nlist)
编辑:
为了可视化,我希望生成的图形像这样
而不是像这样的星图
感谢任何评论。
关于 Neo4j 浏览器和 py2neo 结果之间的区别:可能您正在使用带有选项 "Connect result nodes" 启用的图形可视化模式。尝试禁用(下图)它或将可视化模式更改为 "Text",例如。
关于Cypher查询,可以用collect()
合并source
和neighbors
:
MATCH (source {label:'source'})-[:relation]->(neighbors)
WITH collect(source) + collect(neighbors) as all
UNWIND all AS nodes
RETURN nodes
为了return两组节点之间的所有边(本例中是从集合到自身),参考这个post:Neo4j, get all relationships between a set of nodes
然后使用 Cypher 查询return编辑子图
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
我想从具有给定源的大型图形数据库中查询子图。假设我想要给定节点的前 25 个邻居,以及这组节点之间的所有关系,我的查询应该如何?
目前我有:
MATCH (source {label:'source'}) -[:relation]-> (neighbors)
RETURN source,neighbors
LIMIT 25
这适用于 neo4j 浏览器,returning 26 个节点以及这些节点之间的所有现有关系。但是,当我尝试通过 py2neo 执行相同的查询时:
py2neo.cypher.execute(query)
它只有 return26 个节点以及源和 25 个邻居之间的 25 个直接边连接,这是有道理的。但我想知道为什么浏览器结果与 py2neo 结果之间存在差异。以及我如何使用所有边缘连接实现相同的结果 returned.
总的来说,我想知道以下较小的问题:
如何将单个节点附加到 neo4j 中的节点列表?例如nlist = 邻居 + 节点
如何return两组节点之间的所有关系?例如return (a in nlist) -[:relation]-> (b in nlist)
编辑:
为了可视化,我希望生成的图形像这样
而不是像这样的星图
感谢任何评论。
关于 Neo4j 浏览器和 py2neo 结果之间的区别:可能您正在使用带有选项 "Connect result nodes" 启用的图形可视化模式。尝试禁用(下图)它或将可视化模式更改为 "Text",例如。
关于Cypher查询,可以用collect()
合并source
和neighbors
:
MATCH (source {label:'source'})-[:relation]->(neighbors)
WITH collect(source) + collect(neighbors) as all
UNWIND all AS nodes
RETURN nodes
为了return两组节点之间的所有边(本例中是从集合到自身),参考这个post:Neo4j, get all relationships between a set of nodes
然后使用 Cypher 查询return编辑子图
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