在neo4j中建模序列路径的最佳方法是什么?

在neo4j中建模序列路径的最佳方法是什么?,neo4j,cypher,Neo4j,Cypher,假设我的图是一系列步骤,它们在一个过程中相互连接。是否有一种最佳/推荐的方法在图形中对此进行建模 我可以想出两种不同的方法: 第一: CREATE [s1:Step]-[r1:step { procedure: "Foo" }]->[s2:Step] 在这个方法中,我需要检查步骤关系的属性,以重新构建整个过程。只需遵循所有标记为procedure:Foo的关系 第二: CREATE (p:Procedure {name: "Foo"}), (s1:Step), (s2:S

假设我的图是一系列步骤,它们在一个过程中相互连接。是否有一种最佳/推荐的方法在图形中对此进行建模

我可以想出两种不同的方法:

第一:

CREATE [s1:Step]-[r1:step { procedure: "Foo" }]->[s2:Step]
在这个方法中,我需要检查
步骤
关系的属性,以重新构建整个过程。只需遵循所有标记为procedure:Foo的关系

第二:

CREATE (p:Procedure {name: "Foo"}), 
       (s1:Step), (s2:Step), 
       p-[:step { sequence: 0 }]->s1, 
       p-[:step { sequence: 1 }]->s2;
这创建了一个实际的一级过程“node”,但给我带来了一个问题,即必须指定序列号,以便我知道步骤的顺序


这个问题以前肯定解决过十几次。是否有更好/最好的模式将其建模为图形?

我认为索引搜索不是一个好主意 最好使用标签扫描 我们不能在关系上使用多个标签,并且有64k关系类型限制 如果你的需求不超过这个限制,你可以用这样的东西

a-[:STEP_FOO]-b-[STEP_BAR]-c

我认为索引搜索不是一个好主意 最好使用标签扫描 我们不能在关系上使用多个标签,并且有64k关系类型限制 如果你的需求不超过这个限制,你可以用这样的东西

a-[:STEP_FOO]-b-[STEP_BAR]-c

我认为索引搜索不是一个好主意 最好使用标签扫描 我们不能在关系上使用多个标签,并且有64k关系类型限制 如果你的需求不超过这个限制,你可以用这样的东西

a-[:STEP_FOO]-b-[STEP_BAR]-c

我认为索引搜索不是一个好主意 最好使用标签扫描 我们不能在关系上使用多个标签,并且有64k关系类型限制 如果你的需求不超过这个限制,你可以用这样的东西

a-[:STEP_FOO]-b-[STEP_BAR]-c

以下方法可能适合您的需要。它将创建一个以过程节点为根的步骤节点链

过程节点还具有指向当前最后一个步骤节点的“最后一步”关系,以尝试更有效地追加新步骤节点。但可能有更有效的方法来处理这个问题

这种方法的一个可能缺点是无法参数化#4中的步骤数

  • 要启动程序的步骤链,请从 第一步:

  • 要将步骤添加到链的末端,请执行以下操作:

  • 要获取链的第一步(如果没有步骤,则为空):

  • 要获取链的第三步,如果少于3步,则为null(您可以用任意数字替换
    3
    ):

  • 要获得一步一步
    s
    (假设我们已经有
    s
    ):

  • 要获取链中的所有步骤,请按顺序执行:


  • 以下方法可能适合您的需要。它将创建一个以过程节点为根的步骤节点链

    过程节点还具有指向当前最后一个步骤节点的“最后一步”关系,以尝试更有效地追加新步骤节点。但可能有更有效的方法来处理这个问题

    这种方法的一个可能缺点是无法参数化#4中的步骤数

  • 要启动程序的步骤链,请从 第一步:

  • 要将步骤添加到链的末端,请执行以下操作:

  • 要获取链的第一步(如果没有步骤,则为空):

  • 要获取链的第三步,如果少于3步,则为null(您可以用任意数字替换
    3
    ):

  • 要获得一步一步
    s
    (假设我们已经有
    s
    ):

  • 要获取链中的所有步骤,请按顺序执行:


  • 以下方法可能适合您的需要。它将创建一个以过程节点为根的步骤节点链

    过程节点还具有指向当前最后一个步骤节点的“最后一步”关系,以尝试更有效地追加新步骤节点。但可能有更有效的方法来处理这个问题

    这种方法的一个可能缺点是无法参数化#4中的步骤数

  • 要启动程序的步骤链,请从 第一步:

  • 要将步骤添加到链的末端,请执行以下操作:

  • 要获取链的第一步(如果没有步骤,则为空):

  • 要获取链的第三步,如果少于3步,则为null(您可以用任意数字替换
    3
    ):

  • 要获得一步一步
    s
    (假设我们已经有
    s
    ):

  • 要获取链中的所有步骤,请按顺序执行:


  • 以下方法可能适合您的需要。它将创建一个以过程节点为根的步骤节点链

    过程节点还具有指向当前最后一个步骤节点的“最后一步”关系,以尝试更有效地追加新步骤节点。但可能有更有效的方法来处理这个问题

    这种方法的一个可能缺点是无法参数化#4中的步骤数

  • 要启动程序的步骤链,请从 第一步:

  • 要将步骤添加到链的末端,请执行以下操作:

  • 要获取链的第一步(如果没有步骤,则为空):

  • 要获取链的第三步,如果少于3步,则为null(您可以用任意数字替换
    3
    ):

  • 要获得一步一步
    s
    (假设我们已经有
    s
    ):

  • 要获取链中的所有步骤,请按顺序执行:

  • MATCH (p:Procedure {name: "Foo"})-[:NEXT_STEP*3]->(s)
    RETURN s;
    
    ...
    MATCH (s)-[:NEXT_STEP]->(s1)
    RETURN s1;
    
    MATCH (p:Procedure {name: "Foo"})-[ns:NEXT_STEP*]->(s)
    RETURN s ORDER BY length(ns);