Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 Cypher递归查询_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher递归查询

Neo4j Cypher递归查询,neo4j,cypher,Neo4j,Cypher,我有一个Cypher查询,它返回两个标记节点之间的标记同义词节点: MATCH (t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) WHERE t.id = {tagId} AND s.id = {synonymId} RETURN ts 而ss可以有自己的TagSynonym等等 这个结构的深度可能相当大 请帮助我扩展此查询,以便返回在t:Tag上建立的所有TagSynonym及其所有同义词后继项(用于s:Tag的标记,并更深入到此

我有一个Cypher查询,它返回两个
标记
节点之间的
标记同义词
节点:

MATCH (t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 
WHERE t.id = {tagId} AND s.id = {synonymId} 
RETURN ts
ss
可以有自己的
TagSynonym
等等

这个结构的深度可能相当大


请帮助我扩展此查询,以便返回在
t:Tag
上建立的所有
TagSynonym
及其所有同义词后继项(用于
s:Tag
的标记,并更深入到此递归结构的末尾。)

类似的内容看起来是否朝着正确的方向发展

基本上使用
apoc.path.expandConfig
s
开始,并开始抓取新的
TagSynonym
Tag
节点

MATCH (t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 
WHERE t.id = {tagId} AND s.id = {synonymId} 
WITH t, ts, s
CALL apoc.path.expandConfig(s
{
  uniqueness:"NODE_GLOBAL",
  labelFilter:"TagSynonym|Tag",
  relationshipFilter: '<FOR|HAS>'
}) YIELD path
RETURN t, ts, s, path
匹配(t:Tag)(s:Tag)
其中t.id={tagId}和s.id={synonymId}
用t,ts,s
调用apoc.path.expandConfig
{
唯一性:“节点\全局”,
标签过滤器:“标记同义词|标记”,
relationshipFilter:“”
})屈服路径
返回t,ts,s,路径

可选地,如果不使用AOC库来实现类似的事情,则可以考虑沿着这个查询的一些东西…

MATCH (t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 
WHERE t.id = {tagId} AND s.id = {synonymId} 
WITH t,ts,s
OPTIONAL MATCH p=(s)-[:FOR|HAS*]-(end:Tag)
WHERE NOT (end)<-[:FOR]-()
RETURN p
匹配(t:Tag)(s:Tag)
其中t.id={tagId}和s.id={synonymId}
用t,ts,s
可选匹配p=(s)-[:FOR | HAS*]-(end:Tag)

(完)谢谢你的回答。我很抱歉,但是没有apoc是否可以实施?我以前尝试过安装apoc,但失败了(特别是在基于嵌入式Neo4j的测试中),并且在我的应用程序中使用了纯密码查询。我添加了一个非apoc查询,可能适合您。我不确定它将如何处理您的数据。还要注意路径扩展中的裸
*
;它可能很快失去控制,这取决于
标记
标记同义词
节点之间的复杂关联程度。
MATCH (t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 
WHERE t.id = {tagId} AND s.id = {synonymId} 
WITH t,ts,s
OPTIONAL MATCH p=(s)-[:FOR|HAS*]-(end:Tag)
WHERE NOT (end)<-[:FOR]-()
RETURN p