Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 选择单有向无环图_Neo4j_Cypher - Fatal编程技术网

Neo4j 选择单有向无环图

Neo4j 选择单有向无环图,neo4j,cypher,Neo4j,Cypher,我是neo4j的新手,我试图从一个图中提取一个单一的、有向无环的子图,以便能够迭代生成的图(或节点和路径的集合),并跟踪每个节点所在的层(其中,层基于最近的根节点的跃点数)。这在cypher中可能吗?我正在使用REST api 我拥有的示例数据结构类似于以下子图,其中A和H将是“根”节点: A -+ B -+ D | + H -+ C -+ E | + F S* B和C将分别是第1层和D,E,F将是第2层。A和H有一个:子图与

我是neo4j的新手,我试图从一个图中提取一个单一的、有向无环的子图,以便能够迭代生成的图(或节点和路径的集合),并跟踪每个节点所在的层(其中,
基于最近的根节点的跃点数)。这在cypher中可能吗?我正在使用REST api

我拥有的示例数据结构类似于以下子图,其中
A
H
将是“根”节点:

A -+ B -+ D
     |    
     +   
H -+ C -+ E
     |
     +
     F


S*
B
C
将分别是第1层和
D
E
F
将是第2层。
A
H
有一个
:子图
S*
的关系,我想要的子图中的所有节点:子图的成员与
S*/code>的关系

下面的查询将返回我想要的子图(逐段),但是,我不确定如何对路径中的节点进行排序

        MATCH p = (n)-[r:ARROW_TO*]-(t)-[:SUBGRAPH_ENTER]-(s)
        where
        (n)-[:MEMBER_OF_SUBGRAPH]->(s)
        RETURN p
有人能提供建议吗?

[编辑]

如果使用以下两个查询创建示例非循环图:

CREATE (s:Subgraph),
  (a:Foo {id:'A'}), (b:Foo {id:'B'}), (c:Foo {id:'C'}), (d:Foo {id:'D'}), (e:Foo {id:'E'}), (f:Foo {id:'F'}), (h:Foo {id:'H'}), 
  (a)-[:ARROW_TO]->(b)-[:ARROW_TO]->(d),
  (h)-[:ARROW_TO]->(c)-[:ARROW_TO]->(e),
  (b)-[:ARROW_TO]->(c)-[:ARROW_TO]->(f),
  (a)<-[:SUBGRAPH_ENTER]-(s),
  (h)<-[:SUBGRAPH_ENTER]-(s);

MATCH (f:Foo), (s:Subgraph)
CREATE (f)-[:MEMBER_OF_SUBGRAPH]->(s);
WHERE
子句从其他子图中筛选出部分路径或具有节点的路径。 第一个
WITH
子句收集从
根节点开始的每个路径中的节点。
第二个
WITH
子句为第一个集合中的每个节点生成节点/距离对集合。
UNWIND
将后一个集合转换为数据行,以便通过
MIN
聚合功能进行处理

结果如下:

+------------------------------------------+
| s          | node             | distance |
+------------------------------------------+
| Node[38]{} | Node[41]{id:"C"} | 1        |
| Node[38]{} | Node[40]{id:"B"} | 1        |
| Node[38]{} | Node[44]{id:"F"} | 2        |
| Node[38]{} | Node[43]{id:"E"} | 2        |
| Node[38]{} | Node[42]{id:"D"} | 2        |
+------------------------------------------+
+-----------------------------------------+
| s         | node             | distance |
+-----------------------------------------+
| Node[6]{} | Node[7]{id:"A"}  | 0        |
| Node[6]{} | Node[13]{id:"H"} | 0        |
| Node[6]{} | Node[8]{id:"B"}  | 1        |
| Node[6]{} | Node[9]{id:"C"}  | 1        |
| Node[6]{} | Node[10]{id:"D"} | 2        |
| Node[6]{} | Node[12]{id:"F"} | 2        |
| Node[6]{} | Node[11]{id:"E"} | 2        |
+-----------------------------------------+
包括根节点 如果要在输出中包括根节点,此查询将执行以下操作:

MATCH p=(s)-[:SUBGRAPH_ENTER]->(root)-[:ARROW_TO*]->(leaf)
WHERE (NOT (leaf)-[:ARROW_TO]->()) AND ALL (n IN NODES(p)[1..] WHERE (n)-[:MEMBER_OF_SUBGRAPH]->(s))
WITH s, NODES(p)[1..] AS nodes
WITH s, REDUCE(s =[], i IN RANGE(0, SIZE(nodes)-1)| s + { node: nodes[i], dist: i }) AS data
UNWIND data AS datum
RETURN s, datum.node AS node, MIN(datum.dist) AS distance
ORDER BY distance;
结果如下:

+------------------------------------------+
| s          | node             | distance |
+------------------------------------------+
| Node[38]{} | Node[41]{id:"C"} | 1        |
| Node[38]{} | Node[40]{id:"B"} | 1        |
| Node[38]{} | Node[44]{id:"F"} | 2        |
| Node[38]{} | Node[43]{id:"E"} | 2        |
| Node[38]{} | Node[42]{id:"D"} | 2        |
+------------------------------------------+
+-----------------------------------------+
| s         | node             | distance |
+-----------------------------------------+
| Node[6]{} | Node[7]{id:"A"}  | 0        |
| Node[6]{} | Node[13]{id:"H"} | 0        |
| Node[6]{} | Node[8]{id:"B"}  | 1        |
| Node[6]{} | Node[9]{id:"C"}  | 1        |
| Node[6]{} | Node[10]{id:"D"} | 2        |
| Node[6]{} | Node[12]{id:"F"} | 2        |
| Node[6]{} | Node[11]{id:"E"} | 2        |
+-----------------------------------------+

嘿,很好!我怎样才能在结果中包含
A
H
并省略
S*
(另外,如果你能用
展开
子句解释
中的操作,或者链接到某个地方:)如果你从结果中去掉
S*
节点,然后,多个子图的结果将混杂在一起。但是,如果您真的想这样做,只需从“返回行”中删除
s、