2017-07-10 6 views
1

このクエリでは、私のcsvファイルから75000ノードをインポートしています。 (カテゴリ)neo4jクエリで100万の関係を作成する何らかの方法

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS 
FROM "file:///prodcategory.csv" AS row 
CREATE (:Category {id: row.idProdCategory, name: row.name, idRestaurant: row.idRestaurant}); 

そしてこのクエリと私も、私はIDとの間の関係を作成するには、このクエリを使用しています私のcsvファイル(製品)

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS 
FROM "file:///products.csv" AS row 
CREATE (:Product {id: row.idProduct, idProductCategory: row.idProductCategory,name: row.name,idRestaurant:row.idRestaurant ,description: row.description, price: row.price, shipping_price: row.shippingPrice}); 

から100万ノードをインポートしています - >カテゴリとidProductCategory - >製品です。

MATCH (category:Category {id: category.id}) 
MATCH (Product:Product {idProductCategory: Product.idProductCategory}) 
WHERE Product.idProductCategory=category.id 
MERGE (category)-[:OF_CATEGORY]->(Product); 

このクエリのみ2999人の関係を作成し、私は100万人以上の関係を作成することができるようにする方法や構成がある場合、私は次のようになり、私を助けてください、私が作成する必要があり百万関係をしてくださいとは思いませんとてもありがたい。

答えて

1

インデックスがProduct.idProductCategoryであることを確認してください。

カテゴリIDはカテゴリ間で一意であると仮定します。

CREATE CONSTRAINT ON (category:Category) ASSERT category.id IS UNIQUE; 

同じカテゴリIDを持つ複数の製品があるとします。

次に、各カテゴリを単純に一致させてから、各カテゴリに対して適切な製品を見つけて関係を作成することができます。

// match all of your categories 
MATCH (category:Category) 

// then with each category find all the products 
WITH category 
MATCH (Product:Product {idProductCategory: category.id }) 

// and then create the 
MERGE (category)-[:OF_CATEGORY]->(Product); 

あなたはAPOCの定期的にクエリをラップするためにコミット使用できるメモリの制約に実行している場合は...助けを

call apoc.periodic.commit(" 
    MATCH (category:Category) 
    WITH category 
    MATCH (Product:Product {idProductCategory: category.id }) 
    MERGE (category)-[:OF_CATEGORY]->(Product) 
",{limit:10000}) 
+0

おかげどうやら私は4GのRAMを持っている私の記憶に問題がありますいくつかの設定でこれを解決することができます。私はLinux 1です。 これは私に表示されるメッセージです: – Claure

+0

現在のタスクを実行するのに十分なメモリがありません。 neo4jの設定(通常は 'conf/neo4j.conf'、またはNeo4j Desktopを使用している場合はユーザインタフェースで見つけたもの)で、または組み込みインストールを実行している場合は、 'dbms.memory.heap.max_size'を増やしてみてください'-Xmx'コマンドラインフラグを使用してヒープを増やし、データベースを再起動します。 – Claure

+0

apoc.periodic.commitでラップできます –

1

これにクエリを変更してみてください...あなたはあまりにも多くのフィルタを使用しているクエリで

チェックdocs for MATCH

MATCH (category:Category),(Product:Product) 
WHERE Product.idProductCategory=category.id 
MERGE (category)-[:OF_CATEGORY]->(Product) 

あなたがいないので、あなたもちょうど、2番目のインポートのクエリを変更することができますリンクするための別のクエリが必要です。

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS 
FROM "file:///products.csv" AS row 
CREATE (p:Product {id: row.idProduct, name: row.name,idRestaurant:row.idRestaurant ,description: row.description, price: row.price, shipping_price: row.shippingPrice}) 
MATCH (c:Category{id:row.idProductCategory} 
MERGE (p)-[:OF_CATEGORY]->(c) 
関連する問題