【发布时间】:2014-02-03 23:12:20
【问题描述】:
我的数据库包含大约 30 万个节点和 35 万个关系。
我目前的查询是:
start n=node(3) match p=(n)-[r:move*1..2]->(m) where all(r2 in relationships(p) where r2.GameID = STR(id(n))) return m;
这个查询中涉及的节点都是同一种类型的,它们在游戏中是不同的位置。每个关系都包含一个属性“GameID”,如果您想通过路径传递图形,则该属性用于识别正确的关系。因此,如果您开始在一个节点处遍历图形并遵循具有正确 GameID 的关系,则不会有另一条从第一个节点开始的具有适合 GameID 关系的路径。 有些节点有数百个进出关系,有些节点只有几个。
问题是,我不知道如何告诉 Cypher 如何做到这一点。上面的查询适用于 1 或 2 的深度,但它应该看起来像 [r:move*] 以返回整个路径,大约 20-200 跳。
但是如果我提高值,查询将不会完成。我认为 Cypher 在与起始节点相关的每个路径深度处查看每个传出关系,但正如我已经解释过的,只有一条正确的路径。所以它应该做某种 DFS 搜索而不是 BFS 搜索。有办法吗?
【问题讨论】: