gpt4 book ai didi

Neo4j Cypher 递归查询

转载 作者:行者123 更新时间:2023-12-05 04:10:08 30 4
gpt4 key购买 nike

我有一个 Cypher 查询,它返回两个 Tag 节点之间的 TagSynonym 节点:

MATCH (t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 
WHERE t.id = {tagId} AND s.id = {synonymId}
RETURN ts

此外,s:Tag 节点本身可以​​有自己的 TagSynonym 节点,例如:

(s)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(ss:Tag) 

ss可以有自己的TagSynonym等等。

这个结构的深度可能非常大。

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

最佳答案

这样的事情看起来是在朝着正确的方向发展吗?

基本上使用apoc.path.expandConfigs开始抓取新的TagSynonymTag节点.

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

可选地,要在不使用 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

关于Neo4j Cypher 递归查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44873083/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com