2

私は、やや大きなテキスト ファイル (約 100k 行) を読み取って解析し、そのデータを使用して Neo4j ノード ( Neographyを使用しています) を構築する Ruby on Rails プロジェクトに取り組んでいます。これは、私が書いたコードの Neo4j 関連の部分です。

    d= Neography::Rest.new.execute_query("MATCH (n:`Label`) WHERE (n.`name`='#{id}') RETURN n")
    d= Neography::Node.load(d, @neo)
    p= Neography::Rest.new.create_node("name" => "#{id}") 
    Neography::Rest.new.add_label(p, "LabelSample") 
    d=Neography::Rest.new.get_node(d)
    Neography::Rest.new.create_relationship("belongs_to", p, d)

だから、私がやりたいことは、解析されたデータと同じ「名前」フィールドを持つノードを既に取り込まれたデータベースで検索し、このデータの新しいノードを作成し、最終的に2つの間の関係を作成することです。明らかに、このコードは実行に時間がかかりすぎます。だから私はNeographyのバッチで試してみましたが、いくつかの問題に遭遇しました.

    p = Neography::Rest.new.batch [:create_node, {"name" => "#{id}"}]

"nil:NilClass の未定義メソッド `split'" をくれました

id["自己"].split('/').last

    d=Neography::Rest.new.batch [:get_node, d]

get_node に対して Neography::UnknownBatchOptionException が返される

これで十分な時間を節約できるかどうかもわかりません。

たとえば、バッチインポートを使用して、これを行うさまざまな方法も試しましたが、必要な作成済みのノードをデータベースから取得する方法が見つかりませんでした。ご覧のとおり、私はこれに慣れていないので、助けていただければ幸いです。前もって感謝します。

4

1 に答える 1

1

これは、純粋な暗号 (またはネオグラフィーによって生成された暗号) を使用して実行できる場合があります。おそらくこのようなもの:

MATCH (n:Label) WHERE n.name={id}
WITH n
CREATE (p:LabelSample {name: n.name})-[:belongs_to]->n

LabelSampleCREATE を使用しているわけではありませんが、重複するノードを作成したくない場合は、次のようにします。

MATCH (n:Label) WHERE n.name={id}
WITH n
MERGE (p:LabelSample {name: n.name})
CREATE p-[:belongs_to]->n

パフォーマンスのために一般的に推奨される params を使用していることに注意してください (ただし、これは 1 つのクエリにすぎないため、それほど大きな問題ではありません)。

于 2015-02-04T14:06:46.633 に答える