Neo4j - 为图遍历添加逻辑

时间:2013-01-03 10:06:37

标签: graph neo4j reachability graph-traversal

我的问题很简单 - 我是否可以修改Neo4j使用的遍历逻辑 - 在可达性计算期间如何控制遍历哪些边以及哪些边没有。

完整说明:

我正在考虑从我们当前的数据库迁移到neo4j,我想知道neo4j是否适合以下任务:

我们有大型图表,大约有10M个简单节点 - 它们的属性只是一个id 我们还有3种边缘 - “标准”,“开放”和“关闭”。 “打开”和“关闭”属性也具有“颜色”属性,因此它们是匹配的。每个“开口”边缘都有一个匹配的“关闭”边缘。例如,有一个开口边缘颜色为“3”,因此还有一个关闭边缘着色相同。

我们需要解决遍历规则相当简单的两个节点之间的可达性: 你可以根据需要通过标准边缘,你可以根据需要通过开放边缘,同时保持堆栈中访问的“开放”边缘的顺序但是当你来到一个有几个的交叉点时,这是一个棘手的部分。关闭“边缘,你必须经过与所遇到的最后一个”开放“边缘相匹配的边缘,然后从堆栈中弹出”打开“边缘。

例如:

a - [标准] - > B- [打开颜色:3] - > C- [标准] - > D- [关闭颜色:3] - > E
还有 D- [关闭颜色:4] - > F

请注意,D有两个“闭合”边缘,颜色不同。 根据上面定义的规则,E可以通过A到达,因为颜色堆栈顶部有[3] 但是,A无法到达F.

可以为这种图形遍历逻辑配置neo4j吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

这可以通过实现您自己的PathExpander并传递给TraversalDescription来实现。正如迈克尔·亨格所指出的那样:BranchState可以用来优化你的扩展器,这样你就不必检查每个扩展的完整路径,而是某种简化(不可改变的思想)指出每个遍历分支都有。扩展器可以将修改后的状态传递给每个下一步。

不幸的是,neo4j手册缺少使用分支状态的好例子。这听起来像是一个很棒的用法!