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_Gremlin - Fatal编程技术网

Neo4j 在给定起始节点和结束边的图中获取结束节点

Neo4j 在给定起始节点和结束边的图中获取结束节点,neo4j,cypher,gremlin,Neo4j,Cypher,Gremlin,我有一个定义了节点的图形数据库。我希望找到结束节点,给定我的开始节点和最后一条边(结束节点所在的边)。例如: A-(知道)->B-(喜欢)->C-(分享)->D 其中(..)是关系 现在如果我想问这样一个问题,给定一个节点“a”,给我它直接或间接“共享”的节点。这应该用“D”来回答。基本上,给定一个起始节点和结束边,我可以找到我想要的节点 我的问题是,这在Cypher(或者gremlin)中可能吗?如果可能的话,正确的方法是什么 模式“起始节点和最后一条边已知,查找结束节点”可以用密码表示为 S

我有一个定义了节点的图形数据库。我希望找到结束节点,给定我的开始节点和最后一条边(结束节点所在的边)。例如:

A-(知道)->B-(喜欢)->C-(分享)->D 其中(..)是关系

现在如果我想问这样一个问题,给定一个节点“a”,给我它直接或间接“共享”的节点。这应该用“D”来回答。基本上,给定一个起始节点和结束边,我可以找到我想要的节点


我的问题是,这在Cypher(或者gremlin)中可能吗?如果可能的话,正确的方法是什么

模式“起始节点和最后一条边已知,查找结束节点”可以用密码表示为

START a=node:nodeIndex({indexQueryParam})
MATCH a-[?*]->()-[:SHARES]->d
RETURN d
说明图案的这一部分是可选的,
*
说明它可以是任何长度。您可能不需要两者,因为可变长度可能意味着长度为零,但在进一步充实您的模式时,请记住两者。因为您并不真正需要
B
节点,所以不必绑定它——空括号就可以了

然而,这种模式非常普遍,根据您的数据,它可能会很昂贵(有点像用炸药捕鱼)。您可以在图中给出其他关系类型的示例,
知道
喜欢
。您可以引入任何类似的方法来指定您的模式,这将使您的查询执行得更好

MATCH a-[?:KNOWS|LIKES*]->()-[:SHARES]->d
或者如果你知道这些将以什么顺序发生

MATCH a-[?:KNOWS]->()-[LIKES*]->()-[:SHARES]->d
在这里,
知道
部分的模式只有一个深度,而
喜欢
部分的深度从零到无限。
知道
部分是可选的,这意味着通过此可选部分链接到
a
的整个模式部分也是可选的

最后,让可变深度介于零和无穷大之间通常不是一个好主意。引入一个对数据有意义的上限或下限,如下所示

MATCH a-[?:KNOWS]->()-[LIKES*1..4]->()-[:SHARES]->d

您必须查看您在数据中找到(或施加在数据上)的模式,并相应地开发您的密码查询模式,始终尽可能多地指定密码模式,只留下您希望由图形填充的未定义部分。

模式的开始节点和最后一条边是已知的,“查找结束节点”可以在Cypher中表示为

START a=node:nodeIndex({indexQueryParam})
MATCH a-[?*]->()-[:SHARES]->d
RETURN d
说明图案的这一部分是可选的,
*
说明它可以是任何长度。您可能不需要两者,因为可变长度可能意味着长度为零,但在进一步充实您的模式时,请记住两者。因为您并不真正需要
B
节点,所以不必绑定它——空括号就可以了

然而,这种模式非常普遍,根据您的数据,它可能会很昂贵(有点像用炸药捕鱼)。您可以在图中给出其他关系类型的示例,
知道
喜欢
。您可以引入任何类似的方法来指定您的模式,这将使您的查询执行得更好

MATCH a-[?:KNOWS|LIKES*]->()-[:SHARES]->d
或者如果你知道这些将以什么顺序发生

MATCH a-[?:KNOWS]->()-[LIKES*]->()-[:SHARES]->d
在这里,
知道
部分的模式只有一个深度,而
喜欢
部分的深度从零到无限。
知道
部分是可选的,这意味着通过此可选部分链接到
a
的整个模式部分也是可选的

最后,让可变深度介于零和无穷大之间通常不是一个好主意。引入一个对数据有意义的上限或下限,如下所示

MATCH a-[?:KNOWS]->()-[LIKES*1..4]->()-[:SHARES]->d

您必须查看您在数据中找到(或施加在数据上)的模式,并相应地开发您的密码查询模式,始终尽可能多地指定密码模式,只留下您希望由图形填充的未定义部分。

模式的开始节点和最后一条边是已知的,“查找结束节点”可以在Cypher中表示为

START a=node:nodeIndex({indexQueryParam})
MATCH a-[?*]->()-[:SHARES]->d
RETURN d
说明图案的这一部分是可选的,
*
说明它可以是任何长度。您可能不需要两者,因为可变长度可能意味着长度为零,但在进一步充实您的模式时,请记住两者。因为您并不真正需要
B
节点,所以不必绑定它——空括号就可以了

然而,这种模式非常普遍,根据您的数据,它可能会很昂贵(有点像用炸药捕鱼)。您可以在图中给出其他关系类型的示例,
知道
喜欢
。您可以引入任何类似的方法来指定您的模式,这将使您的查询执行得更好

MATCH a-[?:KNOWS|LIKES*]->()-[:SHARES]->d
或者如果你知道这些将以什么顺序发生

MATCH a-[?:KNOWS]->()-[LIKES*]->()-[:SHARES]->d
在这里,
知道
部分的模式只有一个深度,而
喜欢
部分的深度从零到无限。
知道
部分是可选的,这意味着通过此可选部分链接到
a
的整个模式部分也是可选的

最后,让可变深度介于零和无穷大之间通常不是一个好主意。引入一个对数据有意义的上限或下限,如下所示

MATCH a-[?:KNOWS]->()-[LIKES*1..4]->()-[:SHARES]->d

您必须查看您在数据中找到(或施加在数据上)的模式,并相应地开发您的密码查询模式,始终尽可能多地指定密码模式,只留下您希望由图形填充的未定义部分。

模式的开始节点和最后一条边是已知的,“查找结束节点”可以在Cypher中表示为

START a=node:nodeIndex({indexQueryParam})
MATCH a-[?*]->()-[:SHARES]->d
RETURN d
说明图案的这一部分是可选的,
*
说明它可以是任何长度。您可能不需要两者,因为可变长度可能意味着长度为零,但在进一步充实您的模式时,请记住两者。因为您并不真正需要
B
节点,所以不必这样做