使用Neo4django标记Neo4j数据库

时间:2013-07-18 15:22:34

标签: groovy label neo4django

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

截至目前,Neo4django不支持标签,但以上是我的核心目的,我希望能够从Neo4django创建标签。所以我进入源代码并尝试稍微调整一下,看看我是否可以进行此添加。根据我的理解,文件'db / models / properties.py'具有类BoundProperty(AttrRouter),它通过函数 save (实例,节点,node_is_new)调用gremlin脚本。脚本如下:

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

该脚本从library.groovy调用更新函数,所有函数看起来直观而且很好。我正在尝试添加此功能以支持标签,但我没有groovy的经验。有没有人对如何进行有任何建议?任何帮助,将不胜感激。如果它有效,它将成为neo4django的一大补充:)

谢谢

1 个答案:

答案 0 :(得分:1)

一点背景:

你突出显示的Groovy代码是使用Neo4j Gremlin插件执行的。首先它支持Gremlin graph DSL(例如node=g.v(nodeId)),它是在Groovy语言之上实现的。 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发布后不久,标签将得到适当支持 - 它们将取代当前的图形内结构。