【问题标题】:Calculate route laps with Neo4j and cypher使用 Neo4j 和 cypher 计算路线圈数
【发布时间】:2018-08-07 09:55:06
【问题描述】:

我是 Neo4j 的新手,正在调查它是否符合我的需求。有下图:

CREATE (a:Stop {name: 'A'})-[:ROUTE {dist: 1}]->(b:Stop {name: 'B'})
CREATE (a)-[:ROUTE {dist: 4}]->(c:Stop {name: 'C'})
CREATE (a)-[:ROUTE {dist: 10}]->(d:Stop {name: 'D'})
CREATE (b)-[:ROUTE {dist: 3}]->(e:Stop {name: 'E'})
CREATE (c)-[:ROUTE {dist: 4}]->(d)
CREATE (c)-[:ROUTE {dist: 2}]->(f:Stop {name: 'F'})
CREATE (d)-[:ROUTE {dist: 1}]->(e)
CREATE (e)-[:ROUTE {dist: 3}]->(b)
CREATE (e)-[:ROUTE {dist: 2}]->(a)
CREATE (f)-[:ROUTE {dist: 1}]->(d)

我怎样才能创建一些限制在指定里程的自行车路线?假设我想获得从“E”到“E”的所有可能路线,总里程小于 16,并允许重复任何节点到节点的关系。结果应该是这样的:

|---------------|---------| | Route | Mileage | |---------------|---------| | E-A-B-E | 6 | | E-A-B-E-B-E | 15 | | E-A-B-E-A-B-E | 12 | | ... | |

重点是要重复路线,圈数,例如 E-A-B-E-A-B-E。这是否可能仅与密码有关,或者有更好的方法,例如通过密码获取所有独特的路线,然后在后端以某种方式计算可能的圈数?根据我的实验,我无法让 cypher 遍历相同的节点两次或更长时间。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    Cypher 对唯一性有固有的限制,但它不是基于节点的,它不会阻止重新访问节点。它可以防止每条路径多次遍历相同的关系。这就是你不能做E-A-B-E-B-E 的原因,因为这会不止一次地遍历B-E 关系。

    这种行为的主要原因是在执行可变长度扩展时防止无限循环,如果您需要一种允许重复遍历节点和关系的不同形式的遍历唯一性,这对您来说是一个非常现实的风险。

    虽然 APOC 过程具有可以使用不同遍历唯一性的路径扩展器过程,但您几乎肯定会遇到无限循环,除非您设置最大跳数。目前路径扩展器无法进行属性访问,因此您无法汇总属性值并在某些阈值处停止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多