TuGraph目前兼容了Neo4j的Bolt协议,可以直接使用Neo4j的客户端访问TuGraph。
Bolt端口是默认开启的,默认端口是7687。如果需要修改端口,请在配置文件中自行修改。基于docker方式部署的服务,配置文件在容器内 /usr/local/etc/lgraph.json
文件中;如果是用rpm包部署的服务,配置文件在服务器的/usr/local/etc/lgraph.json
。 修改端口后为了使端口生效,需要重启服务,重启服务的具体操作可见数据库运行。另外,配置文件中的详细配置项,可见数据库运行中的服务配置章节。
添加Maven依赖
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>4.4.2</version>
</dependency>
Client按照如下格式进行实例化:
Driver driver = GraphDatabase.driver("bolt://ip:port", AuthTokens.basic("admin", "73@TuGraph"));
常用语句
//通过 driver 对象创建一个 Session,设置会话连接到特定的数据库,用于执行Cypher语句
Session session = driver.session(SessionConfig.forDatabase("default"));
//清空图项目,请不要轻易尝试,它会清空你选中的图项目的模型以及数据
session.run("CALL db.dropDB()");
//创建点模型
session.run("CALL db.createVertexLabel('person', 'id' , 'id' ,INT32, false, 'name' ,STRING, false)");
//创建边模型
session.run("CALL db.createEdgeLabel('is_friend','[[\"person\",\"person\"]]')");
//创建索引
session.run("CALL db.addIndex(\"person\", \"name\", false)");
//插入点数据
session.run("create (n1:person {name:'jack',id:1}), (n2:person {name:'lucy',id:2})");
//插入边数据
session.run("match (n1:person {id:1}), (n2:person {id:2}) create (n1)-[r:is_friend]->(n2)");
//查询点和边
Result res = session.run("match (n)-[r]->(m) return n,r,m");
//Parameterized Query
String cypherQuery = "MATCH (n1:person {id:$id})-[r]-(n2:person {name:$name}) RETURN n1, r, n2";
Result result1 = session.run(cypherQuery, parameters("id", 1, "name", "lucy"));
while (result1.hasNext()) {
Record record = result1.next();
System.out.println("n1: " + record.get("n1").asMap());
System.out.println("r: " + record.get("r").asMap());
System.out.println("n2: " + record.get("n2").asMap());
}
//删除点数据
session.run("match (n1:person {id:1}) delete n1");
//删除边数据
session.run("match (n1:person {id:1})-[r]-(n2:person{id:2}) delete r");
//删除边模型
session.run("CALL db.deleteLabel('edge', 'is_friend')");
//删除点模型
session.run("CALL db.deleteLabel('vertex', 'person')");
详细Cypher和存储过程的使用可见Cypher
目前,我们的系统尚未全面兼容Neo4j Bolt协议的所有高级特性。特别地,对于Neo4j客户端所具备的即时事务处理功能及弱schema灵活性这两项独特能力,当前尚不提供支持。因此,在采用客户端进行操作时,请务必留意规避涉及此类特性的操作,以确保应用的顺畅运行与数据的一致性。
在代码目录中的demo/Bolt下面有Golang、Java、JavaScript、Python、Rust 这几个语言的的例子。想要了解更多可见客户端示例