基于Neo4j 4.x 实例图谱构建总结 --利用apoc特性

java大数据讨论 2022-10-10 11:39:36

1.实例点构建

1.1.数据整理

1)从mongodb中约定的collection中查询需要入库的实例点,目前包括如下两种:

  •   o_:对象
  •   po_:结构类:(下一级有属性的入库)(需要用所有属性判断唯一值)

2)将查询出的没一万条数据封装成json文件,传入的fastdfs中

1.2.实例点构建

通过apoc函数批量构建点:

api地址:

https://neo4j.com/labs/apoc/4.1/overview/apoc.load/apoc.load.json/

tips:遇到的问题及解决方式:

背景:

利用apoc特性,加载json文件,配合apoc.merge.node(labels,properties)函数进行批量构建

遇到的问题:

1)Failed to invoke procedure: Caused by: java.lang.RuntimeException: Import from files not enabled, please set apoc.import.file.enabled=true in your apoc.conf

解决:

需要在neo4j.conf中添加如下配置:

apoc.import.file.enabled=true

2)Failed to invoke procedure: Caused by: java.lang.RuntimeException: Can’t read url or key file:/path/to/neo4j/import/tmp/filename as json: /path/to/neo4j//import/tmp/filename (No such file or directory)

解决:

方式一:

将需要导入的json文件放入到neo4j的import目录行啊

方式二:

1)第一步骤:注释掉dbms.directories.import=import配置

tips:这个设置限制所有的“LOAD CSV”导入文件在“import”目录下。 删除或注释到  

允许文件从文件系统的任何地方加载; 这可能会引入安全问题。 看到  

 ' LOAD CSV '章节的详细信息

2)第二步:apoc.import.file.use_neo4j_config=false  

tips:Neo4j 现在可以从文件系统的任何位置读取,因此在设置此属性之前请确保这是您的意图。

 方式三:

 结合项目选用方式:将文件传入到fastdfs中,利用apoc.load.json(url)方式 加载json

如下:

UNWIND $urls AS x

with x as url

CALL apoc.load.json(url)

YIELD value

CALL apoc.merge.node(value.labels, value.properties) yield node

RETURN count(*) as num

文件格式 如下:

2.实例关系构建

实例关系类型:

  • --->v_/b_(活动)--->对象
  • -->po(结构类)
  • ->对象  (值相等)

tips;

关系名称定义:目前已知的只有 对象--->v_/b_(活动)--->对象  存在关系名称,关系名称为活动名称

需要用到的apoc函数:

api地址:https://neo4j.com/labs/apoc/4.4/overview/apoc.merge/apoc.merge.relationship/

apoc.merge.relationship介绍:

apoc.merge.relationship(startNode :: NODE?, relationshipType :: STRING?, identProps :: MAP?, props :: MAP?, endNode :: NODE?, onMatchProps = {} :: MAP?) :: (rel :: RELATIONSHIP?)

示例:

MATCH (p:Person {name: "Tom Hanks"})

MATCH (m:Movie {title:"You've Got Mail"})

CALL apoc.merge.relationship(p, "ACTED_IN",

  {roles:['Joe Fox']},

  {created: datetime()},

  m,

  {lastSeen: datetime()}

)

YIELD rel

RETURN rel;

或:

MATCH (p:Person {name: "Tom Hanks"})

MATCH (m:Movie {title:"You've Got Mail"})

CALL apoc.merge.relationship(p, $relType, $properties, {}, m, {})

YIELD rel

RETURN rel;

构建关系建议:

可按照点构建逻辑,先按照apoc.merge.relationship参数格式定义relationVo, 封装关系三元组,上传至fastdfs,然后利用apoc.load.json,批量构建关系批量构建关系

3.其他apoc

3.1 apoc.periodic.commit

介绍:

commit()过程适用于对数据库进行大规模的更新操作,通过限制每次处理的对象数量来减小事务规模以及相应的系统资源消耗。

        使用该过程事先可以不需要知道要更新的数据库对象的数量,而只需要设置什么时候更新操作结束,例如在所有节点都有了一个新属性score后结束运行。

1)api:

CALL apoc.periodic.commit(

   statement,

   params

)

参数名

类型

缺省值

可为空

说明

statement

字符串

fasle

迭代执行的Cypher查询,需要返回一个非负的整数。

params

MAP

false

 

statement中需要的参数,其中limit参数是必须的。

eg:

CALL  apoc.periodic.commit(

 

    "MATCH (n:人物) WHERE NOT exists(n.genre) WITH n LIMIT {limit} SET n.genre='男' RETURN count(*)",

 

    {limit:10}

 

)

————————————————

版权声明:本文为CSDN博主「俞博士」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/GraphWay/article/details/93711343

...全文
357 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

120

社区成员

发帖
与我相关
我的任务
社区描述
Neo4j是领先的图数据库平台,该社区为Neo4j开发者提供一站式服务。
数据库知识图谱图搜索算法 企业社区
社区管理员
  • 亮小猪
  • Neo4j 开发者
  • 俞博士
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧