【发布时间】:2020-10-15 07:40:55
【问题描述】:
我有下面的图形模型,并且正在尝试编写一个 Cypher 查询,以找到从 Person 到 Skill 的最短路径,该路径中至少包含一个关系 HAS_SKILL 的实例。
在模型中
-
Person通过IS_CONNECTED_TO关系连接到另一个Person -
Person通过HAS_SKILL连接到Skill - 一个
Skill通过IS_RELATED_TO关系连接到另一个Skill
我提出了以下查询,该查询有效,但会打开路径中的所有关系以检查 HAS_SKILL 关系是否是其中一种关系。
match (person:Person {id: "48"}), (skill:Skill {id: '10667'}),
path = shortestPath((p)-[*..30]-(s))
WHERE ANY(r in relationships(path) where type(r) = 'HAS_SKILL')
return path;
有没有更有效的方法来做到这一点?
我在(p)-[*..30]-(s) 中使用过关系模式匹配,但我无法让它以与 where 子句中的ANY 相同的方式工作?
这是使用 neo4j 4.1.0。
【问题讨论】:
-
Person 和 Skill 之间的路径是否可能不包含
HAS_SKILL类型的关系?从您的图表模式来看,似乎不是? -
这里是正确的,但它只是完整模型的一个子集。完整模型确实允许到
Skills 的替代路径,而不是通过HAS_SKILL