Neo4j:筛选路径以仅包括具有唯一中间节点的路径

Neo4j:筛选路径以仅包括具有唯一中间节点的路径,neo4j,cypher,neo4j-apoc,Neo4j,Cypher,Neo4j Apoc,我在图形上使用以下neo4j cypher查询: MATCH (start:N1{id:'xyz'}) CALL apoc.path.expandConfig(start, {sequence:'N1, a>, N2, b>, N3, c>, N4', maxLevel:3}) YIELD path RETURN path ORDER BY length(path) DESC 这将返回所有路径,如 X-a->Y-b->Z-c->**A** X-a->

我在图形上使用以下neo4j cypher查询:

MATCH (start:N1{id:'xyz'})
CALL apoc.path.expandConfig(start, {sequence:'N1, a>, N2, b>, N3, c>, 
N4', maxLevel:3}) YIELD path
RETURN path
ORDER BY length(path) DESC
这将返回所有路径,如

X-a->Y-b->Z-c->**A**
X-a->Y-b->Z-c->**B**
X-a->Y-b->Z-c->**C**
X-a->Y-b->Z
X-a->Y
X
X-a->V
X-a->W
但我想返回的是没有重复的较短路径的路径,因为它们已经包含在较长的路径中

这是我想要的输出:

X-a->Y-b->Z-c->**A**
X-a->Y-b->Z-c->**B**
X-a->Y-b->Z-c->**C**
X-a->V
X-a->W

有人能帮忙吗?我是Neo4j的新手,目前cypher没有语言功能来检查一条路径是否嵌套在另一条路径中。但您可以使用一个简单的技巧:将路径关系的ID转换为文本,并与所有其他ID进行比较:

MATCH (start:N1{id:'xyz'})
CALL apoc.path.expandConfig(start, {sequence:'N1, a>, N2, b>, N3, c>, 
N4', maxLevel:3}) YIELD path
WITH path ORDER BY LENGTH(path) ASC
WITH COLLECT(path) AS paths
UNWIND paths AS path
WITH 
  paths, path, 
  apoc.text.join([r in relationships(path)| '' + ID(r)],'.') AS pathTR
  WHERE ALL(p IN paths WHERE 
    CASE 
      WHEN SIZE(pathTR) > 0 AND path <> p AND
           apoc.text.join([r IN relationships(p)| '' + ID(r)],'.') CONTAINS pathTR 
      THEN FALSE 
      ELSE TRUE 
    END 
  )
RETURN path
ORDER BY LENGTH(path) DESC
匹配(开始:N1{id:'xyz'})
调用apoc.path.expandConfig(开始,{序列:'N1,a>,N2,b>,N3,c>,
N4',maxLevel:3})屈服路径
具有按长度排序的路径(路径)ASC
使用COLLECT(path)作为路径
将路径作为路径展开
具有
路,路,,
apoc.text.join([r in relationships(path)|'''+ID(r)],'.')作为pathTR
WHERE ALL(p在路径中,其中
案例
当大小(路径Tr)>0且路径p和
apoc.text.join([r IN relationships(p)|‘“+ID(r)],‘.)包含pathTR
那就错了
否则是真的
结束
)
返回路径
按长度排序(路径)描述

目前,密码没有语言功能来检查一条路径是否嵌套在另一条路径中。但您可以使用一个简单的技巧:将路径关系的ID转换为文本,并与所有其他ID进行比较:

MATCH (start:N1{id:'xyz'})
CALL apoc.path.expandConfig(start, {sequence:'N1, a>, N2, b>, N3, c>, 
N4', maxLevel:3}) YIELD path
WITH path ORDER BY LENGTH(path) ASC
WITH COLLECT(path) AS paths
UNWIND paths AS path
WITH 
  paths, path, 
  apoc.text.join([r in relationships(path)| '' + ID(r)],'.') AS pathTR
  WHERE ALL(p IN paths WHERE 
    CASE 
      WHEN SIZE(pathTR) > 0 AND path <> p AND
           apoc.text.join([r IN relationships(p)| '' + ID(r)],'.') CONTAINS pathTR 
      THEN FALSE 
      ELSE TRUE 
    END 
  )
RETURN path
ORDER BY LENGTH(path) DESC
匹配(开始:N1{id:'xyz'})
调用apoc.path.expandConfig(开始,{序列:'N1,a>,N2,b>,N3,c>,
N4',maxLevel:3})屈服路径
具有按长度排序的路径(路径)ASC
使用COLLECT(path)作为路径
将路径作为路径展开
具有
路,路,,
apoc.text.join([r in relationships(path)|'''+ID(r)],'.')作为pathTR
WHERE ALL(p在路径中,其中
案例
当大小(路径Tr)>0且路径p和
apoc.text.join([r IN relationships(p)|‘“+ID(r)],‘.)包含pathTR
那就错了
否则是真的
结束
)
返回路径
按长度排序(路径)描述

@InverseFalcon你能帮忙吗?halwa bat rha hai bc?InverseFalcon你能帮忙吗?halwa bat rha hai bc?