小编Kri*_*rid的帖子

Neo4j最短路径,用于路径之间的特定节点标签

我正在寻找解决以下问题的提示:

给定Neo4j DB,将两种节点类型应用为标签

:地址和:里程碑(每个节点一个)

在不同节点之间有指向:LEADS_TO关系.

鉴于以下模式(我跳过关系的[]):

模式1:

(a:Address)->(:Milestone)->(:Milestone)<-(:Milestone)<-(:Milestone)<-(b:Address)
Run Code Online (Sandbox Code Playgroud)

模式2:

(a:Address)->(:Milestone)->(c:Address)<-(:Milestone)<-(b:Address)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个只包含shortestPath分析中相同类型的"中间"节点的查询.在我的情况下,它应该只包含带有标签的节点:Milestone并跳过具有标记节点的较短路径:地址介于两者之间.

换句话说:查询应该匹配模式1而不是模式2,即使它更短.

我发现以下解决方案接近但在我的情况下失败,因为它也涵盖了开始和结束节点标签,因为它根本不选择任何行:

MATCH p=shortestPath( (a:Address)-[:LEADS_TO*..10]-(b:Address) ) 
WHERE a.name = 'XYZ'
AND b.name = 'ABC'
AND ALL(x IN nodes(p) WHERE (x:MILESTONE))
RETURN p
Run Code Online (Sandbox Code Playgroud)

我最初的想法是创建第一跳:

对于"开始"节点

MATCH (a:Address)-[:LEADS_TO]->(aa:Milestone)
Run Code Online (Sandbox Code Playgroud)

并且类似于结束节点并从那里开始查询.

但这是有问题的,因为每个:Address节点可以有多个:LEADS_TO关系.查询定义的起始和结束节点的最短路径,这种方法将为一个查询创建n个起始节点和m个终端节点,这些查询可以使用不同的起始节点和结束节点执行.

有没有人知道如何从Cypher中的WHERE子句中排除开始和结束节点?

非常感谢任何提示.

shortest-path neo4j cypher

6
推荐指数
1
解决办法
1713
查看次数

标签 统计

cypher ×1

neo4j ×1

shortest-path ×1