使用 Cypher 遍历图并将结果集呈现为 table

Traversing Graph using Cypher and presenting resultset as a table

大家好!

我是 Neo4j 和 Cypher 的初学者,对以下功能有疑问:

  1. 我有一个节点的非循环有向图,这些节点与 :DATA_FLOWS 条边

  2. 相连
  3. 两个节点之间可能有不止一条边,因为这些边可能具有不同的边属性 - scenario_id

  4. 当我select一个或多个节点(按组)并尝试按一个或多个scenario_id(边的属性)进行过滤时,我想查看所有依赖于我的 select 离子和边缘过滤器

  5. 的特定深度 (*..n) 的从属节点
  6. 我正在使用以下查询: match p= (src:Node)-[:DATA_FLOWS*..5]->(dst:Node) where src.group_id IN {Group} and all(x in RELATIONSHIPS(p) WHERE x.scenario_id IN {Scenario} ) RETURN p;

  7. 这在以漂亮的视觉方式呈现结果的 Neo4j 浏览器中看起来不错,但我需要在 Tom Sawyer Perspective 中运行此查询,它需要类似于平面表的结果集,而不是 Json...

  8. 所以我的查询,在多次尝试失败后,看起来像: match p= (src:Node)-[:DATA_FLOWS*..5]->(dst:Node) where src.group_id IN {Group} and all(x in RELATIONSHIPS(p) WHERE x.scenario_id IN {Scenario} ) WITH p MATCH (a)-[r:DATA_FLOWS]->(b) where all(x in RELATIONSHIPS(p) WHERE ID(x) = ID(r)) RETURN a.id, r.scenario_id, b.id

  9. 我不认为它会带来正确的结果,而且速度非常慢...

如果有人向我提供有关如何改进、重写等查询并获得更好性能的任何建议,我将不胜感激。

提前谢谢你, 弗拉德

要以表格方式制定 neo4j 数据,您应该考虑使用 neo4j-jdbc driver,它允许您像访问任何其他关系数据库一样访问 neo4j 数据库。

我不熟悉 Tom Sawyer Perspective,但支持从 JDBC 连接中提取数据的可视化工具确实很常见,因此这可能会让您的生活更轻松,并且意味着您不需要在将数据导入您的工具之前,甚至必须将数据导出为表格文件格式 (CSV)。