第二章已经将本章需要遍历的数据构造完毕,下面就学习下如何利用Api进行简单的图形遍历。
使用Java Api进行遍历
|
|
如上我们可以看到,Node.getRelationships(…)返回的时一个Iterable
使用Neo4j提供的API遍历
|
|
这里.uniqueness和.evaluator需要稍微理解下,下图是数据库保存的数据结构。可以自行更改uniqueness和evaluator来查看打印结果,以帮助理解。稍微解释下NODE_GLOBAL和NODE_PATH。如果设置成NODE_GLOBAL,所有节点将只会被遍历一次,按照下图来看,如果John看过电影Fargo,就不会再遍历出Jack也看过电影Fargo的结果;如果设置成NODE_PATH,则表示在同一个路径下,一个节点只会被遍历一次,我所理解的路径时从初始节点开始,能通过有向箭头到达最后一个节点所走的路。
|
|
自定义评估函数
上面代码遍历出了深度为2的节点,如果要从结果中排除John看过的电影,可以自定义规则。Evaluators实现定义了遍历的过程中哪些节点保存,哪些节点丢弃,下面先看代码
只要将自定义的CustomNodeFilteringEvaluator添加到Evaluator链中即可
经过CustomNodeFilteringEvaluator,已经剔除掉John看过的电影Fargo,下面列出两张表来理解下Path接口和evaluate方法中的返回值
方法签名 | 描述 |
---|---|
Node startNode() | 路径的起点,不要与关系的起点混淆 |
Node endNode() | 路径的终止点,遍历的当前节点,不要与关系的终止节点混淆 |
Iterable<Relationship> relationships() | 按遍历顺序,到当前节点遍历过的所有关系 |
Iterable<Node> nodes() | 按遍历顺序,路径中的所有节点 |
int length() | 返回路径的长度,实际就是遍历过的节点数减1 |
方法签名 | 描述 |
---|---|
INCLUDE_AND_CONTINUE | 包括结果中的当前节点并继续 |
INCLUDE AND_PRUNE | 包括结果中的当前节点但停止本路径的继续访问 |
EXCLUDE_AND_CONTINUE | 丢弃当前节点并继续遍历 |
EXCLUDE_AND_PRUNE | 丢弃当前节点并停止遍历 |
简单的图形遍历就到此结束。