Java实现Neo4j数据库的相关操作
来源:互联网 发布:js往集合中添加元素 编辑:程序博客网 时间:2024/04/27 01:14
http://qinxuye.me/article/introduction-to-neo4j/
package com.neo4j;import java.io.File;import java.io.IOException;import org.neo4j.graphdb.Direction;import org.neo4j.graphdb.GraphDatabaseService;import org.neo4j.graphdb.Node;import org.neo4j.graphdb.Path;import org.neo4j.graphdb.Relationship;import org.neo4j.graphdb.RelationshipType;import org.neo4j.graphdb.factory.GraphDatabaseFactory;import org.neo4j.graphdb.Transaction;import org.neo4j.graphdb.index.Index;import org.neo4j.graphdb.traversal.Evaluators;import org.neo4j.graphdb.traversal.Traverser;import org.neo4j.graphdb.traversal.TraversalDescription;import org.neo4j.kernel.Traversal;import org.neo4j.kernel.impl.util.FileUtils;import org.neo4j.kernel.impl.util.StringLogger;import org.neo4j.cypher.ExecutionEngine;import org.neo4j.cypher.ExecutionResult;import org.neo4j.graphalgo.PathFinder;import org.neo4j.graphalgo.GraphAlgoFactory;public class Example {//private static final String DB_PATH = "target/neo4jexample";private static final String DB_PATH = "testgraph.db";private static final String PRIMARY_KEY = "name";private GraphDatabaseService graphDB;private Index<Node> nodeIndex;private long startNodeId;private static enum RelTypes implements RelationshipType {NEO_NODE,KNOWS,CODED_BY}private void clearDB() {try {FileUtils.deleteRecursively(new File(DB_PATH));}catch(IOException e) {throw new RuntimeException(e);}}public void createDB() {clearDB();graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);nodeIndex = graphDB.index().forNodes("nodes");registerShutdownHook(graphDB);Transaction tx = graphDB.beginTx();try { Node startNode = graphDB.createNode(); startNodeId = startNode.getId(); Node thomas = graphDB.createNode(); thomas.setProperty( "name", "Thomas Anderson" ); thomas.setProperty( "age", 29 ); nodeIndex.add(thomas, PRIMARY_KEY, thomas.getProperty("name")); startNode.createRelationshipTo( thomas, RelTypes.NEO_NODE ); Node trinity = graphDB.createNode(); trinity.setProperty( "name", "Trinity" ); nodeIndex.add(trinity, PRIMARY_KEY, trinity.getProperty("name")); Relationship rel = thomas.createRelationshipTo( trinity, RelTypes.KNOWS ); rel.setProperty( "age", "3 days" ); Node morpheus = graphDB.createNode(); morpheus.setProperty( "name", "Morpheus" ); morpheus.setProperty( "rank", "Captain" ); morpheus.setProperty( "occupation", "Total badass" ); nodeIndex.add(morpheus, PRIMARY_KEY, morpheus.getProperty("name")); thomas.createRelationshipTo( morpheus, RelTypes.KNOWS ); rel = morpheus.createRelationshipTo( trinity, RelTypes.KNOWS ); rel.setProperty( "age", "12 years" ); Node cypher = graphDB.createNode(); cypher.setProperty( "name", "Cypher" ); cypher.setProperty( "last name", "Reagan" ); nodeIndex.add(cypher, PRIMARY_KEY, cypher.getProperty("name")); trinity.createRelationshipTo( cypher, RelTypes.KNOWS ); rel = morpheus.createRelationshipTo( cypher, RelTypes.KNOWS ); rel.setProperty( "disclosure", "public" ); Node smith = graphDB.createNode(); smith.setProperty( "name", "Agent Smith" ); smith.setProperty( "version", "1.0b" ); smith.setProperty( "language", "C++" ); nodeIndex.add(smith, PRIMARY_KEY, smith.getProperty("name")); rel = cypher.createRelationshipTo( smith, RelTypes.KNOWS ); rel.setProperty( "disclosure", "secret" ); rel.setProperty( "age", "6 months" ); Node architect = graphDB.createNode(); architect.setProperty( "name", "The Architect" ); nodeIndex.add(architect, PRIMARY_KEY, architect.getProperty("name")); smith.createRelationshipTo( architect, RelTypes.CODED_BY ); tx.success();}finally {tx.finish();}}public Traverser getFriends(final Node person) {TraversalDescription td = Traversal.description().breadthFirst().relationships(RelTypes.KNOWS, Direction.OUTGOING).evaluator(Evaluators.excludeStartPosition());return td.traverse(person);}public void printNodeFriends(Node node) {//Node neo = graphDB.getNodeById(startNodeId)//.getSingleRelationship(RelTypes.NEO_NODE, Direction.OUTGOING)//.getEndNode();int friendsNumbers = 0;System.out.println(node.getProperty(PRIMARY_KEY) + "'s friends:");for(Path friendPath: getFriends(node)) {System.out.println("At depth " + friendPath.length() + " => "+ friendPath.endNode().getProperty(PRIMARY_KEY));friendsNumbers++;}System.out.println("Number of friends found: " + friendsNumbers);}public void printCypherFriends(String name) {graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);ExecutionEngine engine = new ExecutionEngine(graphDB, StringLogger.logger(DB_PATH));//ExecutionResult result = engine.execute(//"start n=node:nodes(name=\"" + name + "\") "//+ "match n-[:KNOWS*..]->f "//+ "return distinct f, f.name");ExecutionResult result = engine.execute("start n=node(500000) return n;");System.out.println(result.dumpToString());}public void printThomasFriends() {printNodeFriends(nodeIndex.get(PRIMARY_KEY, "Thomas Anderson").getSingle());}public Iterable<Path> findShortestPath(Node node1, Node node2) {PathFinder<Path> finder = GraphAlgoFactory.shortestPath(Traversal.expanderForTypes(RelTypes.KNOWS, Direction.OUTGOING), 5);Iterable<Path> paths = finder.findAllPaths(node1, node2);return paths;}public void printShortestPaths() {Node node1 = nodeIndex.get(PRIMARY_KEY, "Thomas Anderson").getSingle();Node node2 = nodeIndex.get(PRIMARY_KEY, "Agent Smith").getSingle();for(Path shortestPath: findShortestPath(node1, node2)) {System.out.println(shortestPath.toString());}}private static void registerShutdownHook(final GraphDatabaseService graphDB) {Runtime.getRuntime().addShutdownHook(new Thread() {@Overridepublic void run() {graphDB.shutdown();}});}private void shutdown() {graphDB.shutdown();}/** * @param args */public static void main(String[] args) {Example example = new Example();//example.createDB();long t1 = System.currentTimeMillis();//example.printThomasFriends();example.printCypherFriends("Thomas Anderson");long t2 = System.currentTimeMillis();System.out.print(t2-t1);//example.printShortestPaths();example.shutdown();}}
- Java实现Neo4j数据库的相关操作
- 使用Neo4j Java Driver操作Neo4j
- 使用Neo4j Java Driver操作Neo4j
- neo4j入门教程-java中使用Cypher操作数据库
- neo4j 的操作
- Neo4j数据库的事务
- 通过Spring Data Neo4J操作您的图形数据库
- 通过Spring Data Neo4J操作您的图形数据库
- 通过Spring Data Neo4J操作您的图形数据库
- 通过Spring Data Neo4J操作您的图形数据库
- 通过Spring Data Neo4J操作您的图形数据库
- 通过Spring Data Neo4J操作您的图形数据库
- java操作数据库相关
- 图形数据库 Neo4j(2) ----Java
- 用java构建neo4j数据库
- java 链接neo4j数据库方法
- Neo4j实战-使用python语言操作neo4j数据库
- 利用JDBC实现java与MySQL数据库的连接及相关操作
- 组合数求模C(n,m)%(10^10)
- 5步完成域用户增加至本地服务器管理员角色
- Python语言双下横线
- oracle 10g归档模式与非归档模式之间的转换
- calloc和malloc区别、分析
- Java实现Neo4j数据库的相关操作
- 已知二叉树的前序/后序遍历和中序遍历,求后序/前序遍历
- GDI+双缓冲解决图像闪烁问题
- Delphi Socket 实现编程(6)
- 【看日记学Git】之四
- GTB转换成繁体后有报错是过滤问题。
- vCenter 或者 vmwareworkstation 虚拟机 安装vmware tools
- 部分IT术语的英语简写与简写方法(整理一下最近遇到的一些IT术语)
- Jvideo中复制某个视频文章页的地址到浏览器,会自动跳转到jvideo前台首页问题解决。