使用Neo4django标记Neo4j数据库

问题描述:

此问题与Neo4django的github issue有关。我想使用Django web框架中的Neo4j图形数据库创建多个图形。我使用Django 1.4.5,neo4j 1.9.2和neo4django 0.1.8。使用Neo4django标记Neo4j数据库

截至目前Neo4django不支持标签,但上述是我的核心目的,我希望能够从Neo4django创建标签。所以我进入了源代码并尝试稍微调整一下,看看我能不能做这个补充。在我的理解中,文件'db/models/properties.py'有类BoundProperty(AttrRouter),它通过函数保存(instance,node,node_is_new)调用gremlin脚本。脚本如下:

script = ''' 
    node=g.v(nodeId); 
    results = Neo4Django.updateNodeProperties(node, propMap); 
    ''' 

该脚本调用library.groovy的更新函数,所有的函数看起来直观,很好。我试图添加这个函数来支持标签,但我没有groovy的经验。有没有人有任何建议如何进行?任何帮助,将不胜感激。如果成功,将是一个很大的除了neo4django :)

谢谢

+0

您打算切换到Neo4j 2.0M03吗? 1.9.2不支持标签。 –

+0

为了实验目的,我升级到了Neo4j 2.0M03。希望当我们的产品准备好生产时,稳定版本2.0将会出来。感谢您的指点:) –

+0

我刚刚发起了一项活动,资助下一个版本的图书馆 - 标签列在弹性目标列表中。看看https://www.bountysource.com/fundraisers/423-neo4django-0-1-9 –

一点背景:

您已经强调用Neo4j的小鬼插件执行的Groovy代码。首先它支持在Groovy语言上实现的Gremlin graph DSL(例如node=g.v(nodeId))。 Groovy本身是Java的一个动态超集,因此大多数有效的Java代码都可以通过connection.gremlin(...)发送的脚本进行工作。发送的每个脚本应定义一个results变量,该变量将返回到neo4django,即使它只是null

反正访问Neo4j的这种方式是很方便的(虽然将被弃用我听说:(),因为你可以使用全Neo4j embeddeded Java API。尝试是这样的一个标签添加到节点

from neo4django.db import connection 
connection.gremlin(""" 
node = g.v(nodeId) 
label = DynamicLabel.label('Label_Name') 
node.rawVertex.addLabel(label) 
""", nodeId=node_id) 

您可能还需要为DynamicLabel添加导入 - 我还没有运行此代码,所以我不确定。用这种方式编写的代码调试有点困难,所以请*使用Neo4j管理器中的Gremlin选项卡

如果你想出了一个可行的解决方案,我很乐意看到它(或者一个解释性的博客文章!) - 我相信它可以帮助你对其他用户。

HTH!

NB - 标签将在Neo4j 2.0发布后立即得到适当支持 - 它们将替换当前的图内类型结构。