Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
neo4j:包含特定关系的最短路径_Neo4j_Cypher - Fatal编程技术网

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的备用路径