记录一下本人在使用neo4j过程中遇到的一些cql操作,如果对您有帮助,那真是太荣幸了。(●’◡’●)【欢迎指出不当之处】
Neo4j数据库更改标签
MATCH (n:old_labels)
REMOVE n:old_labels
SET n:new_labels
Neo4j数据库更改节点属性名
MATCH (n:Node_Label)
SET n.new_attribute=n.old_attribute
REMOVE n.old_attribule
Neo4j更改关系类型
MATCH (n:Expert {name:"foo"})-[r:REL]->(m:Expert {name:"bar"})
CREATE (n)-[r2:NEWREL]->(m)
// copy properties, if necessary
SET r2 = r
WITH r
DELETE r
核心思想:添加新的,删除旧的
Neo4j数据库返回节点数量
MATCH (n:Node_Label) RETURN count(n)
Neo4j判断是否有重复节点
# 查询节点总数
match (n:PERSON) return count(n)
# 查询一个属性的去重数量
match (n:PERSON) return count(distinct n.name) # 比较总数和去重后总数可判断是否存在相同name的节点
Neo4j获取重复节点
# 查询返回name相同但是节点ID不同的节点,n与m即为重复节点
match (n:PERSON),(m:PERSON) where n.name=m.name and id(n)<>id(m) return n,id(n),m,id(m);
# 比较重复节点的关系数量可只最先录入的节点的关系最为完整最多,后面录入的节点会缺少部分关系
# 以上一查询中返回的重复节点 id=12 和 id=460964 进行比较
match (n:PERSON)-[:FRIEND]-(m:PERSON) where id(n)=12 rerurn count(m);
match (n:PERSON)-[:FRIEND]-(m:PERSON) where id(n)=46096 rerurn count(m);
Neo4j合并重复节点
MATCH (n:Paper)
WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count
WHERE count > 1
CALL apoc.refactor.mergeNodes(nodelist) YIELD node RETURN node
注1:此处用到apoc插件
- 下载apoc插接的jar包:https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases【注意区别 neo4j-3.5 和 neo4j-4】
- 将jar包放入neo4j安装目录中的plugins文件夹下
- 修改配置文件neo4j.conf
3.1 dbms.security.procedures.unrestricted=apoc.*
3.2 dbms.memory.pagecache.size=4g #增大页面缓存至4G,建议为20G
3.3 dbms.memory.heap.initial_size=1g #JVM堆保存留内存从1G起
3.4 dbms.memory.heap.max_size=4g #最大4G- 重启neo4j
- 在浏览器可视化界面输入 return apoc.version(),如果出现对应的版本号,证明安装成功
注2:通过该方法合并节点后,关系会被保留指向同一个节点,如果出现了重复关系,可以参考下一个删除重复关系的方法
Neo4j删除重复关系
MATCH (a:Expert)-[r]->(b)
WITH a, b, TAIL (COLLECT (r)) as rr
WHERE size(rr)>0
FOREACH (r IN rr | DELETE r)