本文共 3943 字,大约阅读时间需要 13 分钟。
本文将介绍Neo4j数据库的基本操作,包括节点创建、关系创建、查询优化以及常用Cypher语句示例。
Neo4j支持通过Cypher语句创建节点和关系。以下是创建明星节点及其关系的示例:
CREATE (a:明星 {名称: "陈冠希"}), (b:明星 {名称: "王菲"}), (c:明星 {名称: "李亚鹏"}), (d:明星 {名称: "瞿颖"}), (e:明星 {名称: "张柏芝"}), (f:明星 {名称: "谢霆锋"}), (g:明星 {名称: "周迅"}), (h:明星 {名称: "张亚东"}), (i:明星 {名称: "窦唯"}), (j:明星 {名称: "窦鹏"}), (k:明星 {名称: "李大齐"}), (l:明星 {名称: "朴树"}), (m:明星 {名称: "梁朝伟"}), (n:明星 {名称: "刘嘉玲"}),// 关系创建示例周迅 - [:旧爱] -> 窦鹏,周迅 - [:旧爱] -> 李大齐,周迅 - [:旧爱] -> 朴树,周迅 - [:旧爱] -> 李亚鹏,周迅 - [:绯闻] -> 梁朝伟,周迅 - [:绯闻] -> 谢霆锋,王菲 - [:离异] -> 李亚鹏,王菲 - [:旧爱] -> 谢霆锋,王菲 - [:离异] -> 窦唯,谢霆锋 - [:旧友] -> 陈冠希,谢霆锋 - [:离异] -> 张柏芝,张亚东 - [:制作人] -> 朴树,张亚东 - [:离异] -> 窦颖,张亚东 - [:制作人] -> 王菲,李亚鹏 - [:旧爱] -> 瞿颖,陈冠希 - [:旧爱] -> 张柏芝,瞿颖 - [:旧爱] -> 张亚东,窦唯 - [:堂兄弟] -> 窦鹏,窦唯 - [:兄妹] -> 窦颖,梁朝伟 - [:夫妻] -> 刘嘉玲,王菲 - [:好友] -> 刘嘉玲 使用Cypher快速查询明星之间的直接关系:
MATCH m = (周迅:明星 {名称:"周迅"}) - [*..1] - () RETURN m 查询周迅到王菲的最短路径:
MATCH p = AllShortestPaths((周迅:明星 {名称:"周迅"}) - [*..6] - (王菲:明星 {名称:"王菲"})) RETURN p 以下是一些常用的Cypher语句:
MATCH (n:明星) RETURN n
MATCH m = (周迅:明星 {名称:"周迅"}) - [*..1] - () RETURN m MATCH p = AllShortestPaths((周迅:明星 {名称:"周迅"}) - [*..6] - (王菲:明星 {名称:"王菲"})) RETURN p MATCH p = () - [:旧爱] - () - [:旧爱] - () RETURN p LIMIT 50
MATCH p = () - [:旧爱] - () - [:旧爱] - () RETURN p LIMIT 50
MATCH p = () - [:旧爱] - () - [:旧爱] - () - [:旧爱] - () RETURN p LIMIT 50
如果使用Neo4j的Java API直接操作数据库文件(确保服务已关闭),可以按照以下方式进行:
package com;import java.io.File;import org.neo4j.graphdb.GraphDatabaseService;import org.neo4j.graphdb.Node;import org.neo4j.graphdb.Relationship;import org.neo4j.graphdb.Transaction;import org.neo4j.graphdb.factory.GraphDatabaseFactory;public class Neo4jJavaAPIDBOperation { public static void main(String[] args) { GraphDatabaseFactory dbFactory = new GraphDatabaseFactory(); GraphDatabaseService db = dbFactory.newEmbeddedDatabase(new File("E:/neo4j-community-3.3.5/data/databases/graph.db")); try (Transaction tx = db.beginTx()) { Node javaNode = db.createNode(Tutorials.JAVA); javaNode.setProperty("TutorialID", "JAVA001"); javaNode.setProperty("Title", "Learn Java"); javaNode.setProperty("NoOfChapters", "25"); javaNode.setProperty("Status", "Completed"); Node scalaNode = db.createNode(Tutorials.SCALA); scalaNode.setProperty("TutorialID", "SCALA001"); scalaNode.setProperty("Title", "Learn Scala"); scalaNode.setProperty("NoOfChapters", "20"); scalaNode.setProperty("Status", "Completed"); Relationship relationship = javaNode.createRelationshipTo( scalaNode, TutorialRelationships.JVM_LANGIAGES); relationship.setProperty("Id", "1234"); relationship.setProperty("OOPS", "YES"); relationship.setProperty("FP", "YES"); tx.success(); } System.out.println("Done successfully"); }}enum Tutorials implements Label { JAVA, SCALA, SQL, NEO4J;}enum TutorialRelationships implements RelationshipType { JVM_LANGIAGES, NON_JVM_LANGIAGES;} Neo4j项目的Maven依赖配置如下:
4.0.0 com.test neo4j 0.0.1-SNAPSHOT org.neo4j neo4j 3.3.5 org.neo4j.driver neo4j-java-driver 1.4.4
以上为本文的全部内容,后续将继续探讨Neo4j与Spring的集成方案。
转载地址:http://dfcfk.baihongyu.com/