2.APOC使用案例
2.1 APOC帮助命令。
查看apoc支持过程和函数:
call apoc.help('apoc')
返回值为apoc支持的过程,函数等,由于返回值较长,此处列出一条返回结果,为便于分析返回结果,将返回结果进行人工分行。
"procedure" "apoc.algo.aStar" "apoc.algo.aStar(startNode, endNode, 'KNOWS|<WORKS_WITH|IS_MANAGER_OF>', 'distance','lat','lon') YIELD path, weight - run A* with relationship property name as cost function" "apoc.algo.aStar(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, latPropertyName :: STRING?, lonPropertyName :: STRING?) :: (path :: PATH?, weight :: FLOAT?)" null null
第1行的procedure表示类型为过程;
第2行的apoc.algo.aStar表示过程的名称;
第3行表示该过程的一个应用案例;
第4行为过程的签名信息,签名的一般形式是 name : : TYPE。在调用过程或函数时,通过签名可以获得对应参数的名称、类型及位置,同时还可获悉返回值列的名称和类型。
查看APOC支持的过程和函数数量:
CALL dbms.functions() YIELD name WHERE name STARTS WITH 'apoc.' RETURN COUNT(name) UNION CALL dbms.procedures() YIELD name WHERE name STARTS WITH 'apoc.' RETURN COUNT(name)
返回值为:
│"COUNT(name)"│
│246 │
│294 │
表示目前3.5.0.11版本的APOC包含了246个函数和294个过程,这个数量已经超过了APOC开发之初定下目标(365个过程或函数)。
2.2APOC生成随机图。
本部分操作先删除图中的所有节点和关系,代码如下:
MATCH (n) DETACH DELETE n
基于APOC生成随机图,代码如下:
CALL apoc.generate.ba(10,2,'Person','朋友')
查看所有路径,代码如下:
MATCH p = (n)-[r]-(m) RETURN p
返回结果如图2-1所示:
CALL apoc.generate.ba(10,2,‘Person’,‘朋友’)中的ba表示Barabási–Albert模型,ba模型可以产生随机的算法无标度网络。
2.3 实现PageRank算法。
本部分操作先删除图中的所有节点和关系,代码如下:
MATCH (n) DETACH DELETE n
PageRank算法在Google的搜索引擎中用于计算网站的排名,PageRank的规则是:关系越多和与重要节点的关系越多,那么该节点就越重要。
首先创建1000个节点:
FOREACH (id In range(1,1000) | CREATE (n:NodeLabel{id:id}))
再创建100万个关系:
MATCH (n1:NodeLabel),(n2:NodeLabel) WITH n1,n2 LIMIT 1000000 WHERE rand()<0.1 CREATE (n1)-[:REL_TYPE]->(n2)
调用PageRank算法计算NodeLabel节点中的重要性排名,代码如下:
MATCH (n:NodeLabel) WITH collect(n) AS ns CALL apoc.algo.pageRank(ns) YIELD node,score RETURN node,score ORDER BY score DESC LIMIT 10
这行代码建议添加LIMIT 10,否则会出现返回值计算时间过长的情况。返回结果如图1-2,从图中可以看出id为185的节点关系很多,将上面代码中的LIMIT 10 修改为LIMIT 1 ,返回值为 id为185的节点。
图1-2 APOC pageRank算法返回结果
选择展示为Text,可以查看到pageRank算法计算得分的返回结果:
│"node" │"score"│
│{“id”:185}│1.18105│
│{“id”:345}│1.17249│
│{“id”:534}│1.16887│
│{“id”:239}│1.16823│
│{“id”:71} │1.14628│
│{“id”:484}│1.14145│
│{“id”:444}│1.13305│
│{“id”:661}│1.13231│
│{“id”:131}│1.13008│
│{“id”:314}│1.12901│
2.4 APOC函数使用。
APOC的函数使用与Cypher的内置函数使用基本一致,下面基于APOC完成一个均值计算,代码如下:
RETURN apoc.coll.avg([1,2,3,4,5]) AS output
apoc.coll.avg()为APOC提供的函数,在使用过程中,只需要将参数放如函数中,即可返回对应的返回值,返回值为:
│"output"│
│3.0 │
基于APOC完成数据类型转换为字符串的操作,代码如下:
RETURN apoc.convert.toStringList([1, "2", 3, "Four"]) AS output • 1
返回值为:
│"output" │
│[“1”,“2”,“3”,“Four”]│
返回值中,1也用双引号包裹起来,表明其数据类型的字符串。
3 APOC总结
以上讲述了APOC的安装与基本使用,相关操作,可以查询官网。