2

すでにneo4jに保存されている一連のノードに対してバッチ操作を行い、最終的にそれらの間の関係を作成したいと思います。私は次のようなものを持っています

with gdb.transaction():
    for s_id, d_id in nodelist:
        sn = nidx['nid'][s_id].single
        dn = nidx['nid'][d_id].single

wherenidxは私が作成したインデックスです (「nid」、s_id はキーと値のペアです)。nidx['nid'][s_id]ただし、ノードにするつもりでしたが、TransactionOperationProxyオブジェクトのように見えます。それをノードに変換する方法、または少なくともそれを使用してsndn(sn.Follows(dn) のようなもの) の間の関係を作成する方法はありますか?

ありがとう。

4

1 に答える 1

2

これはバッチ ローダーを使用して行うことができますが、Gremlin スクリプトを使用する方が簡単です。

ノード ID ペアのリストの場合nodelist、エッジをバッチでロードする Gremlin スクリプトを次に示します (未テスト)...

// gremlin.groovy

def batch_load(nodelist, label) {
  g.setMaxBufferSize(0)
  g.startTransaction()
  try {
    for (entry in nodelist) {
      s_id = entry[0]
      d_id = entry[1]
      // if s_id and d_id are actual node IDs, you don't need to use an index...
      sn = g.idx('someindex').get('nid',s_id)[0]
      dn = g.idx('someindex').get('nid',d_id)[0]
      g.addEdge(sn,dn,label)
    }
    g.stopTransaction(TransactionalGraph.Conclusion.SUCCESS)
    return true
  } catch (e) {
    g.stopTransaction(TransactionalGraph.Conclusion.FAILURE)  
    return e
  }
}

Bulbs で実行する方法は次のとおりです。これを neo4jrestclient 用に変更する必要があります...

>>> from bulbs.neoj4server import Graph
>>> g = Graph()
>>> g.scripts.update('/path/to/gremlin.groovy')
>>> script = g.scripts.get('batch_load')
>>> params = dict(nodelist=your_node_list, label="follows")
>>> g.gremlin.execute(script, params)
于 2012-07-13T17:43:23.003 に答える