我试图了解Neo4J java遍历API,但经过彻底的阅读后,我仍然坚持某些观点.
我似乎知道的:
PathExpander
和之间的区别BranchOrderingPolicy
.根据我的理解,前者告诉我们哪些关系有资格从特定位置进行探索,后者指定应该评估它们的顺序.
我想知道以下事项:
这种理解是否正确或在何种程度上是正确的,或者是否可以改变以给出正确的理解.
如果正确,有何PathExpander
不同Evaluator
.
怎么做PathExpander
和BranchOrderingPolicy
工作.我打算问的是,PathExpander
每次在遍历中添加关系时都会查询,并且对返回的可迭代关系有什么作用.与分支排序类似.
在遍历期间如何以及何时组件Expander
,BranchOrdering
,Evaluator
,Uniqueness
进入画面.基本上我想知道模板算法,其中一个人会说第一个扩展器被要求扩展关系的集合,然后咨询订购策略以选择其中一个符合条件....
如果正确,那么指定的排序策略是否BranchOrderingPolicy
仅适用于符合条件的关系(在扩展器完成之后).也许它一定是.
请包含可能有助于理解API的任何其他内容.
我将尝试尽我所能来描述这些部分.
至于PathExpander
和之间的区别BranchOrderingPolicy
:PathExpander
在第一次遍历从该分支继续时,为每个遍历分支调用a .(遍历分支是包括通向该节点的路径的节点,注意可能存在许多路径,即到同一节点的许多分支,主要取决于唯一性).调用的结果PathExpander
是在Iterator<Relationship>
需要时会懒散地提供遍历该遍历分支的新关系.这让我们BranchOrderingPolicy
看到了所有活着的遍历分支."活着"是指在其上具有一个或多个关系的分支,以便可以从中创建更多分支.给定所有活动分支,它选择其中一个,遵循其下一个关系(从该分支上的关系迭代器中恢复,可能如果它是第一个调用使用PathExpander
(如上所述)初始化该迭代器).
PathExpander
和之间的区别Evaluator
:这种分裂很大程度上是一个方便和关注点分离的问题.PathExpander
增加分支和Evaluator
过滤器的数量,即减少分支的数量.扩展器创建由分析器评估的新分支Evaluator
.有了这个说你可以写一个PathExpander
做这两件事的东西,这样做可能更有效率.但是将它们分开的便利性,可以存在多个Evaluator
s非常有用.
见上文(1)
其中一些在(1)中描述,但更广泛的图像BranchOrderingPolicy
是遍历中的驱动程序 - 从每个活动分支中选择一个并跟随它一个关系到一个新分支.只会创建符合所选唯一性的分支.第一次为每个分支发生分支的关系,以惰性关系迭代器的形式使用PathExpander
.新分支在第一次被选中时被评估,其中评估的一个结果是该分支是否是死胡同而另一个是否是将结果包括在用户中.
我认为以上解释了这一点
这是足够的信息吗?