neo4j(4)Java Sample/Scala Client and Routing
1. Java Sample
Here is the dependencies for neo4j-java in pom.xml
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
RailroadExample.java
package com.sillycat.easyhbase.app;
import java.util.Iterator;
import org.neo4j.graphalgo.GraphAlgoFactory;
import org.neo4j.graphalgo.PathFinder;
import org.neo4j.graphalgo.WeightedPath;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Path;
import org.neo4j.graphdb.PathExpanders;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.index.Index;
import com.sillycat.easyhbase.util.GraphUtil;
import com.sillycat.easyhbase.util.RelTypes;
public class RailroadExample {
private static String DB_PATH = "/tmp/neo4j";
public static void main(final String[] args) {
GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
GraphUtil.registerShutdownHook(graphDb);
Transaction tx = graphDb.beginTx();
try {
Index<Node> nodeIndex = graphDb.index().forNodes("nodes");
Node londonNode = graphDb.createNode();
//create node London
londonNode.setProperty("name", "London");
//add name into index
nodeIndex.add(londonNode, "name", "London");
//Brighton
Node brightonNode = graphDb.createNode();
brightonNode.setProperty("name", "Brighton");
nodeIndex.add(brightonNode, "name", "Brighton");
//Portsmouth
Node portsmouthNode = graphDb.createNode();
portsmouthNode.setProperty("name", "Portsmouth");
nodeIndex.add(portsmouthNode, "name", "Portsmouth");
//Bristol
Node bristolNode = graphDb.createNode();
bristolNode.setProperty("name", "Bristol");
nodeIndex.add(bristolNode, "name", "Bristol");
//Oxford
Node oxfordNode = graphDb.createNode();
oxfordNode.setProperty("name", "Oxford");
nodeIndex.add(oxfordNode, "name", "Oxford");
//Gloucester
Node gloucesterNode = graphDb.createNode();
gloucesterNode.setProperty("name", "Gloucester");
nodeIndex.add(gloucesterNode, "name", "Gloucester");
//Northampton
Node northamptonNode = graphDb.createNode();
northamptonNode.setProperty("name", "Northampton");
nodeIndex.add(northamptonNode, "name", "Northampton");
//Southampton
Node southamptonNode = graphDb.createNode();
southamptonNode.setProperty("name", "Southampton");
nodeIndex.add(southamptonNode, "name", "Southampton");
// london -> brighton ~ 52mi
Relationship r1 = londonNode.createRelationshipTo(brightonNode,
RelTypes.LEADS_TO);
//relationship gets property distance
r1.setProperty("distance", 52);
// brighton -> portsmouth ~ 49mi
Relationship r2 = brightonNode.createRelationshipTo(portsmouthNode,
RelTypes.LEADS_TO);
r2.setProperty("distance", 49);
// portsmouth -> southampton ~ 20mi
Relationship r3 = portsmouthNode.createRelationshipTo(
southamptonNode, RelTypes.LEADS_TO);
r3.setProperty("distance", 20);
// london -> oxford ~95mi
Relationship r4 = londonNode.createRelationshipTo(oxfordNode,
RelTypes.LEADS_TO);
r4.setProperty("distance", 95);
// oxford -> southampton ~66mi
Relationship r5 = oxfordNode.createRelationshipTo(southamptonNode,
RelTypes.LEADS_TO);
r5.setProperty("distance", 66);
// oxford -> northampton ~45mi
Relationship r6 = oxfordNode.createRelationshipTo(northamptonNode,
RelTypes.LEADS_TO);
r6.setProperty("distance", 45);
// northampton -> bristol ~114mi
Relationship r7 = northamptonNode.createRelationshipTo(bristolNode,
RelTypes.LEADS_TO);
r7.setProperty("distance", 114);
// southampton -> bristol ~77mi
Relationship r8 = southamptonNode.createRelationshipTo(bristolNode,
RelTypes.LEADS_TO);
r8.setProperty("distance", 77);
// northampton -> gloucester ~106mi
Relationship r9 = northamptonNode.createRelationshipTo(
gloucesterNode, RelTypes.LEADS_TO);
r9.setProperty("distance", 106);
// gloucester -> bristol ~35mi
Relationship r10 = gloucesterNode.createRelationshipTo(bristolNode,
RelTypes.LEADS_TO);
r10.setProperty("distance", 35);
tx.success();
System.out.println("searching for the shortest route from London to Bristol..");
PathFinder<WeightedPath> finder = GraphAlgoFactory.dijkstra(
PathExpanders.forTypeAndDirection(RelTypes.LEADS_TO,Direction.OUTGOING), "distance");
WeightedPath path = finder.findSinglePath(londonNode, bristolNode);
System.out.println("London - Bristol with a distance of: " + path.weight() + " and via: ");
for (Node n : path.nodes()) {
System.out.print(" " + n.getProperty("name"));
}
System.out.println();
System.out.println();
System.out.println("searching for all routes from London to southamptonNode..");
PathFinder<Path> finderAll = GraphAlgoFactory.allPaths(
PathExpanders.forTypeAndDirection(RelTypes.LEADS_TO,Direction.OUTGOING), Integer.MAX_VALUE);
Iterable<Path> allPaths = finderAll.findAllPaths(londonNode, southamptonNode);
Iterator<Path> it = allPaths.iterator();
while(it.hasNext()){
Path tmp_path = (Path) it.next();
System.out.println("Path is as follow: ");
int distance = 0;
for (Node n : tmp_path.nodes()) {
System.out.print(" " + n.getProperty("name"));
distance = distance + (Integer)n.getRelationships(RelTypes.LEADS_TO, Direction.OUTGOING).iterator().next().getProperty("distance");
}
System.out.println(" with distance:" + distance);
}
} finally {
tx.close();;
graphDb.shutdown();
}
}
}
Some other Util Classes
package com.sillycat.easyhbase.util; import org.neo4j.graphdb.RelationshipType; publicenum RelTypes implements RelationshipType { KNOWS, LEADS_TO }
package com.sillycat.easyhbase.util;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.index.Index;
import org.neo4j.tooling.GlobalGraphOperations;
public class GraphUtil {
public static void cleanUp(final GraphDatabaseService graphDb,
final Index<Node> nodeIndex) {
for (Node node : GlobalGraphOperations.at(graphDb).getAllNodes()) {
for (Relationship rel : node.getRelationships()) {
rel.delete();
//delete all relationship
}
//remove all nodes from index
nodeIndex.remove(node);
//remote node itself
node.delete();
}
}
public static void registerShutdownHook(final GraphDatabaseService graphDb) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
graphDb.shutdown();
}
});
}
}
It works great. But I do not plan to run neo4j in embedded mode, so I will work to check for other clients.
References:
https://github.com/AnormCypher/AnormCypher
http://www.hascode.com/2012/01/neo4j-graph-database-tutorial-how-to-build-a-route-planner-and-other-examples/
http://jason691353279.iteye.com/blog/2056339
http://docs.neo4j.org.cn/tutorials-java-embedded-traversal.html
相关推荐
neo4j-java-reference-3.1(neo4j官方Java开发指南)..
reactiveneo, Neo4j的反应式安全 Scala 驱动器 reactiveneo 用于 Neo4j的反应式安全 Scala DSL table-内容图模型节点关系索引查询库强制执行强类型检查,对查询格式施加一些限制。 查询中使用的每个 node 和关系都...
neo4j-java-reference-3.3neo4j-java-reference-3.3neo4j-java-reference-3.3
-v /opt/neo4j/conf:/var/lib/neo4j/conf \ -v /opt/neo4j/import:/var/lib/neo4j/import \ --env NEO4J_AUTH=neo4j/123456 neo4j 3 插入数据 数据来源:先找到了一个大学列表,然后在百度百科中进行爬取, 数据已...
neo4j-java-driver-1.0.0.jarneo4j-java-driver-1.0.0.jar
Neo4j Java Reference 3.0
neo4j图数据库社区开源版4.4.5的java驱动,用于java开发处理图数据库相关
neo4j的java连接驱动,jdbc,neo4j图数据库,可在java中进行连接。
jar包:neo4j-java-driver-1.7.2.jar 用于java程序中对neo4j数据库进行操作 需要导入的jar包
neo4j-java驱动,可以支持你的开发
简要介绍Neo4j的Java开发接口和方法,帮助快速掌握客户端应用开发。
需要使用 java API 编写查询接口,参考网上的示例自己写了一个接口类: Neo4jUtil.java。目前只完成了查询方法。创建、删除及修改方法未实现。请自行参考代码来实现。 使用方法: 在 eclipse 中导入解压缩的工程...
Java调用Neo4j图数据库实现增删改查的功能
Java读取CSV插入Neo4j并生成Echarts关系图
Neo4j Java驱动程序 该存储库包含Neo4j的官方Java驱动程序。 该API旨在针对单实例数据库和集群数据库都起作用。 对于驱动程序用户 本节为正在构建Neo4j支持的应用程序的开发人员提供常规信息。 请注意,此驱动程序仅...
使用neo4j-java-driver操作neo4j实现简单的CRUD
#### 医疗知识图谱自动问答系统 ...运行 test/java/com/AppGenerateDataDemo.java insertNeo4j 方法 ## 启动 spring boot 运行 src/main/java/com/App.java main 方法 ## 运行的效果 ![Image](./img/1.jpg)
neo4j cypher帮助文档 (英文) 图数据库,neo4j, 帮助手册 帮助文档 neo4j apihttps://neo4j.com/docs/
java11+neo4j4.3+gds1.6.rar java11+neo4j4.3+gds1.6.rar java11+neo4j4.3+gds1.6.rar java11+neo4j4.3+gds1.6.rar java11+neo4j4.3+gds1.6.rar