Java中使用neo4j--创建和查询

 下面介绍一下如何在java中使用neo4j图形数据库。

这里是neo4j中文的官方教程

http://docs.neo4j.org.cn/tutorials-java-embedded.html 

这里是neo4j的api文档

http://components.neo4j.org/neo4j/1.8/apidocs/

第一步

首先在eclipse项目中引入neo4j的全部jar包,在项目上右键Property--> Java Build Path-->Libraries-->Add External Jars-->OK    neo4j的jar包在根目录下的lib。

 

第二步

代码部分

为了创建或者使用一个已存在的数据库,我们要实例化一个EmbeddedGraphDatabase对象。

 

private static final String DB_PATH = "/Users/yangfan/Downloads/neo4j-community-2.0.2/data/graph.db";

graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
registerShutdownHook(graphDb);

 DB_PATH是数据库的路径,为了确保neo4j数据库的正确关闭,我们可以添加一个关闭钩子方法registerShutdownHook。这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。
下面是对neo4j数据库中添加数据,因为之前的数据我全部都存在mysql数据库中,我要从mysql数据库中读取,然后转存到neo4j数据库中。这里对mysql的连接和获取不做过多介绍,直接不如正题。
在存储数据的时候,基本会用到这几个参数
GraphDatabaseService graphDb;
Node firstNode;
Node secondNode;
Relationship relationship;
Transaction tx;
node是图形数据库的节点,relationship是节点之间的关系,Transaction是事务处理所有的写操作,包括添加,修改,删除都需要在事务中进行。
Transaction tx = graphDb.beginTx();
try
{
    // Updating operations go here
    tx.success();
}
finally
{
    tx.finish();
}
 下面是数据存储
private static enum RelTypes implements RelationshipType {
		KNOWS   };

Node firstNode = graphDb.createNode();
Node secondNode = graphDb.createNode();
firstNode.setProperty("message", proA);
secondNode.setProperty("message", proB);

Relationship relationship = firstNode.createRelationshipTo(
secondNode, RelTypes.KNOWS);
relationship.setProperty("message", property);
可以先用枚举类型定义节点间的关系,然后对节点和关系添加属性和属性值。
一般情况下,我们都需要在数据库中添加索引这样可以加快下一次查询的速度,neo4j中也继承了索引功能。
nodeIndex = graphDb.index().forNodes("nodes");

nodeIndex.add(firstNode, "message",proA);
nodeIndex.add(secondNode, "message",proB);
 在我们创建好节点和关系之后,将节点和之后按照节点中的哪个属性进行索引添加到nodeIndex中。
同时也可以对节点添加标记(label),label的作用是当需要对图添加约束并且对属性加索引时。当某些节点被label时,这些节点就被映射到一个集合当中,当你下次查询某个特定的label,将返回被标记的所有节点,可以批量查询和修改。
Label label = DynamicLabel.label("node");
firstNode.addLabel(label);
secondNode.addLabel(label);
下面是对node的查询,可以利用索引查询
Index<Node> indexService = indexManager.forNodes("nodes");

IndexHits<Node> hit =indexService.get( "message",proA);
Node node = hit.getSingle();
 也可以根据id和label进行node查询
graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
Label label = DynamicLabel.label("node");
graphDb.findNodesByLabelAndProperty(label, "message", proA);

graphDb.getNodeById(1000);
 neo4j中关系基本需要靠node来查询,因为每个节点对应的关系不一样,但是可以查询存在的所有关系的类型和根据关系的id来查询。
graphDb.getRelationshipById(1000);
graphDb.getRelationshipTypes();
 常用的基本就是这些,有需要可以自行查询api 文档。
之后会和大家分享neo4j中对图的遍历和封装的一些图算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值