暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Neo4j之图数据遍历总结

Neo4j权威指南 2021-05-16
3602
什么是图数据遍历?
图遍历是以一种特殊的方式在图中按照节点之间的关系依次访问各个节点的过程。是图数据库和关系型数据库最大差别之一,也是图数据库天然优势之一。
首先需要了解几个概念,来解释Neo4j的图形遍历功能。
1)路径拓展(PathExpander):定义将要对图数据库中的什么进行遍历;一般从指定的一个或一组起始节点开始,根据过滤规则沿着特定关系依次访问其他相连节点的过程。该过程迭代执行,直到没有更多相连节点或者预设的结束条件满足时终止。路径扩展可以看作是图的遍历(Graph Traversal)的一种实现方式。

2)顺序(Order):主要是指深度优先(DFS)或广度优先(BFS);深度优先遍历在访问子节点之后访问每个节点。通俗的说就是顺着起点往下走,直到无路可走就退回去找下一条路径,直到走完所有的结点。这里的“往下走”主是优先遍历结点的子结点。广度优先遍历在访问子节点之前访问每个节点。就是先访问完同一层的结点,然后才继续访问下一层结点,它最有用的性质是可以遍历一次就生成中心结点到所遍历结点的最短路径,这一点在求无权图的最短路径时非常有用。两者对比一下:深度优先搜素算法,不全部保留结点,占用空间少;有回溯操作(即有入栈、出栈操作),运行速度慢。广度优先搜索算法:保留全部结点,占用空间大;无回溯操作(即无入栈、出栈操作),运行速度快。所以速度快的前提就是要牺牲内存了。

3)唯一性(Uniqueness):在遍历过程中,确保每个节点(关系,路径)只被遍历一次。因为我们是图,存在环型结构,所以会有死循环问题。

4)评估性(Evaluator):用来决定返回什么结果,以及是否停止或者继续遍历当前位置。

5)开始节点:启动遍历最先开始的节点。

图数据遍历用法

在上篇文章中APOC函数之路径(path)用法用到了路径查找方法apoc.path.expand。但是没有涉及到顺序和唯一性,即图遍历的算法和唯一性。所以今天来看看apoc.path.expandConfig()的用法。语法:
    apoc.path.expandConfig(start :: ANY?, config :: MAP?) :: (path :: PATH?)
    这里的参数和apoc.path.expand()方法中参数只有第一个一样,apoc.path.expandConfig()主要是参数太多了总共有15个参数,所以都放在map里了。我们可以通过指定来控制遍历是使用广度优先搜索(BFS)bfs: true还是通过指定深度优先搜索算法(DFS)bfs: false。通常将其与limit参数结合以根据所选算法找到最近的节点。
      MATCH (p:Person {name: "Alicia"})
      MATCH (joe:Person {name: "Joe"})
      CALL apoc.path.expandConfig(p, {
      relationshipFilter: "FOLLOWS>|KNOWS",
      minLevel: 1,
      maxLevel: 5,
      bfs: true,
      limit: 10
      })
      YIELD path
      RETURN path, length(path) AS hops
      ORDER BY hops;
      如果是深度遍历只需要改成bfs:false。其他参数可以参考官网大家自行学习:
        https://neo4j.com/labs/apoc/4.1/overview/apoc.path/apoc.path.elements/

        今天文章就到这里了。

        五一到了,终于放假了,大家好好玩,好好休息。祝大家五一快乐!!!


        - 本期完 -


        有疑问请点赞哈,我会及时回复。由于微信限制了公众号留言功能,有问题你可以直接发公众号聊天,我会在下期文章末尾解答你的问题。


        为方便看最新内容,长按下图图片记得关注哦  




        文章转载自Neo4j权威指南,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论