1. neo4j 准备工作
本地启动 neo4j
此处的 neo4j server 版本:
Cluster role: primary
Version: 5.12.0
Edition: Enterprise
Name: neo4j
本地启动 neo4j
此处的 neo4j server 版本:
Cluster role: primary
Version: 5.12.0
Edition: Enterprise
Name: neo4j
使用 springboot ogm 访问 neo4j。
结果报错:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.neo4j.ogm.exception.MappingException: Error mapping GraphModel to instance of com.knowledgeGraph.kgClient.domain.Movie
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) ~[spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) ~[tomcat-embed-core-8.0.28.jar:8.0.28]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.0.28.jar:8.0.28]
Caused by: org.neo4j.ogm.exception.AmbiguousBaseClassException: Multiple classes found in type hierarchy that map to: [Person, Actor, Director]
at org.neo4j.ogm.MetaData.resolve(MetaData.java:174) ~[neo4j-ogm-core-2.0.1.jar:na]
at org.neo4j.ogm.annotations.EntityFactory.resolve(EntityFactory.java:121) ~[neo4j-ogm-core-2.0.1.jar:na]
at org.neo4j.ogm.annotations.EntityFactory.instantiateObjectFromTaxa(EntityFactory.java:105) ~[neo4j-ogm-core-2.0.1.jar:na]
at org.neo4j.ogm.annotations.EntityFactory.newObject(EntityFactory.java:61) ~[neo4j-ogm-core-2.0.1.jar:na]
测试的时候,使用的 neo4j 是 v4.x 的版本。
当时想使用一下生产的数据,看了一下已有的服务是 v3.5.x 的版本,就像看一下二者是否兼容?
变化详情-> Cypher Manual → Removals, deprecations, additions and extensions
真正的安装记录这里就不记录了。
neo4j 依赖 java,所以需要先配置 jdk。
要在Linux上安装Neo4j,可以按照以下步骤进行操作。
希望通过批量操作,提升 neo4j 的性能。
OGM session.save 入参可以是 list,开始以为这里可以直接批量保存。
实际测试发现逐条保存和单个保存耗时差不多,看了下源码,应该是一个循环。
在Neo4j中,实现批量插入数据可以通过使用Cypher查询语言的UNWIND
和CREATE
语句来实现。
UNWIND
用于展开列表,并且可以将其与CREATE
一起使用,以一次性创建多个节点或关系。这样可以最小化与数据库的交互次数,从而提高性能。
MERGE (p:merge_role { id: 1 }) SET p.id = 1, p.rolename = 'r1';
需要实现如下的场景:
传入用户的 id, user_status, username。
如果传入的 user_status 不在 1,2,3 中,则不做任何执行;
如果状态在 1,2,3中,根据 id 匹配,找到就更新,找不到就创建。
neo4j 版本:v5.12.0,不同版本可能不同。需要实际验证。
1)第一次执行
WITH 1 AS id, 1 AS status, '用户1' AS username
WHERE status IN [1, 2, 3]
MERGE (u:User {id: id}) SET u.status = status, u.username = username, u.create_time=timestamp()
RETURN u;
需要实现如下的场景:
传入的变量值通过对应的值拼接。
WITH 'Hello, ' AS firstName, 'world!' AS lastName
CREATE (p:Person {
firstName: firstName,
lastName: lastName,
fullName: firstName + '-' + lastName
})
RETURN p
一开始使用的是 windows 跳板机,可以直接页面访问比较方便。
后来过期了,就想着怎么使用命令登录?
bin/cypher-shell 命令行登录时如何指定 neo4j 的端口号?
bin/cypher-shell -u -p -a :
在 Neo4j 中,要查看所有实体(节点类型)名称,你可以通过 Cypher 查询语言来查找数据库中所有节点的标签(Label)。
以下是一个简单的查询,可以帮助你列出所有的节点标签:
CALL db.labels()