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,我正在创建一个包含大量大致树状结构的子图的图,因为每个子图的“根”只有向外指向的关系。此子图的许多叶子和分支都包含与根相关的数据。这样,像下面这样的单个查询将返回与给定根关联的所有数据,并且只返回与该根关联的数据: MATCH (root:ROOT {id: 'foo'})-[*]->(leaves) RETURN leaves 有非常充分的理由对此查询进行优化。然而,子图并不是真正孤立的,因为一些叶子实际上是可以从许多根接收关系的类别,所以存在这样的结构: (root)-[]->

我正在创建一个包含大量大致树状结构的子图的图,因为每个子图的“根”只有向外指向的关系。此子图的许多叶子和分支都包含与根相关的数据。这样,像下面这样的单个查询将返回与给定根关联的所有数据,并且只返回与该根关联的数据:

MATCH (root:ROOT {id: 'foo'})-[*]->(leaves) RETURN leaves
有非常充分的理由对此查询进行优化。然而,子图并不是真正孤立的,因为一些叶子实际上是可以从许多根接收关系的类别,所以存在这样的结构:

(root)-[]->(category)<-[]-(root)
以及如下所示的主查询:

(root)-[:bar]->(foreign_root)-[]->(foreign_leaves)
MATCH (root {id: 'foo'})-[*]->(leaves) WHERE NOT (root)-[:bar]->(leaves) RETURN leaves
生成一个
(foreign\u leaves)
的结果由于多种原因,这是不可取的,因为它会使最重要的查询变大,并且实际上不会隔离图形


所以,从某种意义上说,我在问,有没有一种方法可以在这两个根之间创建一个直接的,1对1的关系,而不会造成大量的图污染或子图之间的交叉污染?从更大的意义上说,我是否错误地看待这个问题?

我想你差不多做到了。在上一个Cypher查询中,可以调整WHERE子句,使其不会实例化
:bar
关系的目标节点。像这样:

MATCH (root {id: 'foo'})-[*]->(leaves)
WHERE NOT (root)-[:bar]->()
RETURN leaves

这样,您可以过滤掉所有以
:bar
关系开头的路径。

我会在树内、树之间或从一个类别到另一个类别使用显式的rel类型。然后使用显式rel类型编写查询。