首页 文章

Neo4j - 为图遍历添加逻辑

提问于
浏览
2

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

详细描述:

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

我们有大型图表,大约有10M个简单节点 - 它们的属性只是一个id .
我们还有3种边缘 - "standard","opening"和"closing" . "opening"和"closing"也具有"color"属性,因此它们是匹配的 . 每个"opening"边缘都有一个匹配的"closing"边". For example, there is one opening edge colored as " 3“,所以还有一个边缘颜色相同 .

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

例如:

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

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

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

1 回答

  • 0

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

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

相关问题