Neo4j - 如何忽略多次出现相同节点的模式

时间:2014-01-15 14:00:28

标签: neo4j cypher

如何在查询最短路径时多次忽略同一节点出现的匹配模式,附加图像中的纵向示例情况。 enter image description here

A TO C的最短路径给出,

start a=node:node_auto_index(point='A'),c=node:node_auto_index(point='c') match p=a-[r:CONNECTS*]->c return p;

1. A-> C
2. A -> B -> C -> A -> C
3. A -> B -> C
4. A -> C -> A -> C
5. A -> B -> A -> C
6. A -> C -> B -> A -> B -> C

以及9个模式中的更多,但在某些模式中,相同的节点或起始和结束节点不止一次出现,这将像无关的输出,所以我如何识别和忽略任何节点在其中不止一次的模式路径。

2 个答案:

答案 0 :(得分:1)

您没有使用最短路径。正确的查询是:

start a=node:node_auto_index(point='A'),
      c=node:node_auto_index(point='c') 
match p=shortestPath((a)-[r:CONNECTS*]->(c)) 
return p;

allShortestPaths

答案 1 :(得分:0)

找到上述案例的解决方案

START a=node:node_auto_index(point='a'),
c=node:node_auto_index(point='c')
MATCH path= a-[r:CONNECTS*]->c
WHERE ALL(n in nodes(path) where 1=length(filter(m in nodes(path) : m=n))) 
RETURN path; 

现在它只产生了预期的有效路径: - )

1. A -> B -> C
2. A -> C