简而言之,我的问题是,我是否可以修改Neo4j使用的遍历逻辑-在可达性计算期间,如何控制哪些边被遍历,哪些边不被遍历。
完整描述:
我正在考虑从我们当前的DB迁移到neo4j,我想知道neo4j是否适合以下任务:
我们有大约10M个简单节点的大型图-它们的属性只有一个id。
我们也有三种边缘-“标准”,“开放”和“关闭”。“开始”和“关闭”也有一个"color“属性,所以它们是匹配的。每个“开放”边都有一个匹配的“闭合”边。例如,有一个开放边的颜色是"3",所以也有一个关闭边的颜色是一样的。
我们需要解决两个节点之间的可达性,其中遍历规则相当简单:您可以根据需要通过标准边,可以根据需要通过开放边,同时保持堆栈中访问的“开放”边的顺序,但(这是棘手的部分)当您到达具有几个“关闭”边的交叉点时,必须通过与遇到的最后一个“开放”边匹配的关闭边,然后从堆栈中弹出那个“开放”边。
例如:
A-标准->B-打开颜色:3->C-标准->D-关闭颜色:3->E
而且还
D-闭合颜色:4->F
请注意,D有两个不同颜色的“闭合”边。根据上面定义的规则,E可以通过A到达,因为颜色堆栈在其顶部具有3。
然而,F是A不能到达的。
可以为这样的图遍历逻辑配置neo4j吗?谢谢!!
发布于 2013-01-09 21:41:10
这可以通过实现您自己的PathExpander并传递给TraversalDescription来实现。正如Michael Hunger所指出的: BranchState可以用来优化您的扩展器,这样您就不必检查每个扩展的完整路径,而是每个遍历分支携带的某种简化的(记住是不变的)状态。扩展器可以将修改状态传递到每个下一步骤。
不幸的是,neo4j手册中缺少使用分支状态的好例子。这听起来像是一个很棒的用法!
https://stackoverflow.com/questions/14136657
复制相似问题