如何解决neo4j:包含特定关系的最短路径
我下面有一个图形模型,正在尝试编写一个Cypher查询,该查询查找从Person
到Skill
的最短路径,该路径包括至少一个关系HAS_SKILL
的实例在路径中。
在模型中
- 一个
Person
通过Person
关系连接到另一个IS_CONNECTED_TO
-
Person
通过Skill
连接到HAS_SKILL
- 一个
Skill
通过Skill
关系连接到另一个IS_RELATED_TO
我提出了以下查询,该查询可以工作,但请解开路径中的所有关系以检查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。
解决方法
如果宇宙的中心是HAS_SKILL,我建议研究该关系的锚点,然后从关系的开始/结束节点查找路径。像这样
比赛(p:人)-[:HAS_SKILL]->(s:技能)
然后也许确定从特定人到p的最短路径,然后仅取该技能的p所指向的最短路径,然后从这些s到特定技能的最短路径。
我不知道在不进一步了解实际模型和挑战的情况下还能提出更多建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。