了解Neo4j,创建独特的节点

时间:2013-09-17 10:25:16

标签: neo4j

我试图了解Neo4j的工作方式以及如何将其应用于我的问题。我认为这应该是非常容易的,只需几分钟,但我被卡住了。

我在MongoDB中有数据,比如UserItem。我想要的是将UserItem连接到一个LIKE关系的图表中(可能带有score)。后来我想做一些事情,比如推荐基于连接的项目,基本的东西。

但是如何将数据输入Neo4j? MongoDB中的每个文档都有一个唯一的_id,所以我可以将_id两个都放入Neo4j并将它们连接起来。到目前为止我发现的是,甚至不可能有基于_id字段的唯一节点(Neo4j具有数字递增的ID),这只能通过某些“hack”(https://github.com/jexp/app-net-graph/blob/master/lib/appnet.rb#L11)或使用MERGE(我坚持< 2.0)。如果多次执行,即使他们在网站上的示例也会再次添加相同的节点。我想我对如何使用Neo4j有一个根本的误解。也许我太被redis宠坏了,我可以放入字符串并且它只是工作。 Redis的集合虽然对于复杂的图形是不可行的,仅用于简单的连接。

也许有人可以帮我一个简单的密码示例,说明如何添加两个节点foobar,并让它们与LIKE连接相关联。并且操作应该是幂等的,无论在执行之前是否已经存在任何节点/关系。

我通过REST访问Neo4j,特别是使用此节点模块https://github.com/thingdom/node-neo4j

2 个答案:

答案 0 :(得分:1)

您可以将外部ID定义为节点上的额外属性。然后,根据您是否使用SpringData,您可以插入数据。

如果您使用的是SpringData,则可以将外部ID配置为唯一索引,然后通常会保存节点(但请注意,插入重复的ID会覆盖现有的ID)。

如果您使用的是普通的Java API,则可以创建如下所述的唯一节点: http://docs.neo4j.org/chunked/stable/tutorials-java-embedded-unique-nodes.html#tutorials-java-embedded-unique-get-or-create

编辑: 至于示例查询,这对您有帮助吗? http://console.neo4j.org/?id=b0z486

使用java api,你会这样做

firstNode = graphDb.createNode();
firstNode.setProperty( "externalID", "1" );
firstNode.setProperty( "name", "foo" );
secondNode = graphDb.createNode();
secondNode.setProperty( "externalID", "2" );
secondNode.setProperty( "name", "bar" );

relationship = firstNode.createRelationshipTo( secondNode, RelTypes.Likes );

我建议你在这里阅读一些教程:http://docs.neo4j.org/chunked/stable/tutorials-java-embedded-hello-world.html

答案 1 :(得分:0)

鉴于您使用的是Neo4J1.9,您是否尝试在_ID列上创建唯一索引?

从文档中尝试this article

如果您使用的是Neo4j2,那么this article会很有帮助