我试图了解Neo4j的工作方式以及如何将其应用于我的问题。我认为这应该是非常容易的,只需几分钟,但我被卡住了。
我在MongoDB中有数据,比如User
和Item
。我想要的是将User
和Item
连接到一个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的集合虽然对于复杂的图形是不可行的,仅用于简单的连接。
也许有人可以帮我一个简单的密码示例,说明如何添加两个节点foo
和bar
,并让它们与LIKE
连接相关联。并且操作应该是幂等的,无论在执行之前是否已经存在任何节点/关系。
我通过REST访问Neo4j,特别是使用此节点模块https://github.com/thingdom/node-neo4j
答案 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)