2013-07-18 64 views
0

此問題與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 –

回答

1

一點背景:

您已經強調用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發佈後立即得到適當支持 - 它們將替換當前的圖內類型結構。