根据我的架构,我有一个"项目"节点和多个"修订版"连接到项目的节点。每个其他节点都连接到" Revision"适用的节点。我需要获取连接到特定"修订版"的所有节点。节点。在获取节点时,我还需要获取这些节点之间的关系。我需要限制连接到特定版本的节点。
我尝试了下面的查询,然而,它会降低性能,因为数据库命中更多是在分析时。每个修订版本都有大约28k节点和76k节点关系。
MATCH (a:Project{name:{0}})-[h:HAS_REVISION]->(r:Revision)
WITH a
MATCH p=(a)-[h]->(r)-[*0..2]->(allRelatedNodes)
WHERE r.revisionNo={1} AND (r)-[]->(allRelatedNodes)
RETURN a, relationships(p), nodes(p)
以下查询具有成本效益。在查询浏览器内数据库时,我得到了预期的结果。但是,从我的Java应用程序执行时,节点之间的关系连接到特定的 "修订"没有被提取。
PROFILE
MATCH (project:Project {name> :"test_local"})-[:HAS_REVISION]-
(revision:Revision{revisionNo:1})
WITH project,revision
MATCH p = (revision)-[]-(allRelatedNodes)
WITH project,revision,collect(p) as rs
RETURN project,revision,rs
任何人都可以帮忙。
答案 0 :(得分:0)
我使用apoc.path.subgraphAll程序解决了这个问题。我的要求是“我需要将所有节点连接到修订版以及连接到修订节点的那些节点之间的关系”。第二个查询在neo4j浏览器ui中给出了期望的结果,但关系b / w节点没有在java neo4j实体中映射。最后这就是我做的,
match (project:Project {name :{0}})-[:HAS_REVISION]- " + "(revision:Revision{revisionNo:{1}}) " + "call apoc.path.subgraphAll(revision,{maxLevel:1}) yield nodes,relationships " + "return nodes,relationships;
在neo4j的plugins文件夹中手动复制apoc jar。谢谢大家的建议。