neo4j:包含特定关系的最短路径
我有下面的图形模型,正在尝试编写一个密码查询,查找从neo4j:包含特定关系的最短路径,neo4j,cypher,Neo4j,Cypher,我有下面的图形模型,正在尝试编写一个密码查询,查找从个人到技能的最短路径,该路径中至少包含一个关系实例HAS_Skill 在模型中 一个Person通过is\u connected\u to关系连接到另一个Person 一个人通过HAS\u Skill连接到一个技能 一项技能通过与相关关系连接到另一项技能 我提出了以下查询,该查询可以工作,但会打开路径中的所有关系,以检查是否具有\u SKILL关系是其中一种关系 match (person:Person {id: "48&quo
个人
到技能
的最短路径,该路径中至少包含一个关系实例HAS_Skill
在模型中
- 一个
通过Person
关系连接到另一个is\u connected\u to
Person
- 一个
通过人
连接到一个HAS\u Skill
技能
- 一项
通过技能
相关关系连接到另一项与
技能
是否具有\u 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子句中的任何
的方式工作
这是在使用neo4j 4.1.0。如果宇宙的中心是有技能的,我建议研究该关系的锚定,然后从关系开始/结束节点进行路径查找。像这样的 匹配(p:Person)-[:拥有技能]->(s:SKILL) 然后可能确定从特定的人到这些p的最短路径,然后只取s技能的这些最短路径p点,然后找到从这些s到特定技能的最短路径
我不知道在不了解更多实际模型和挑战的情况下,我们是否可以提出更多建议。一个人和一项技能之间的路径是否可能不包含类型为
HAS_Skill
的关系??从您的图模式来看,它似乎不是?这在这里是正确的,但它只是完整模型的一个子集。完整模型不允许通过HAS\u Skill
s进入Skill
s的备用路径