2016-05-10 6 views
0

以下は、私がのNeo4jで作成したものです:のNeo4jクエリ異なるノードに同じデータリンクを見つけるため

ノード:顧客名、顧客住所や顧客連絡先

は、すべての3つの間の共通の関係に基づいて、これらのノードをリンクされました。

Neo4jにリンクされた3つのノードがすべて表示されます。連絡先には電子メールと電話番号が含まれているため、顧客名ノードが電子メールアドレス、電話番号、住所に接続されていることがあります。

私の習得のカーブでは、異なる顧客名でいくつの同じ連絡先が使用されているか、また異なる顧客名で使用されている同じアドレスの数を表示するように求められます。私の小さな経験に基づいて、私はいくつかのクエリを試みましたが、結果に到達できませんでした。

しようとした次のクエリ -

start n=node(*) 
match n-[:CONTACT_AT]-() 
return distinct n 

CONTACT_ATは、顧客名と連絡先(電子メール、電話)ノード間の関係です。

+0

あなたが使用して試してみました何のクエリ:

MATCH (person:Person)-[:CONTACT_AT]->(contact:Contact) RETURN contact, COLLECT(person.name) AS names; 

そして、これはあなたが同じアドレスを持っている人の名前をすべて取得したい方法ですか? – Luminous

+0

は間違ったクエリかもしれません - ご了承ください。n = node(*) と一致n where(n.contact) return nこのクエリを実行した後クラッシュし、クロムの画面にクラッシュします。 – Jsmith

答えて

1

あなたの質問では、データモデルに関する十分な情報が提供されていません。時間を節約するために、私はそれが(すべてのプロパティを表示せずに)このような何かに見えることを前提としています。このモデルでは

(a:Address)<-[:ADDRESS_AT]-(p:Person {name: '...'})-[:CONTACT_AT]->(c:Contact) 

を、これはあなたが同じ連絡先を持っている人の名前をすべて取得したい方法です:

MATCH (person:Person)-[:ADDRESS_AT]->(address:Address) 
RETURN address, COLLECT(person.name) AS names; 
+0

ありがとうございます。データモデルが正しい。私はChromeウェブクライアントでCypherクエリを実行するのに苦労しています。それは数秒後にクラッシュする(Awスナップ)。 Chrome RAMが1.2GBに達した後にクラッシュしたことを確認しました。私の現在のシステムは72GBのRAM、Windows7、Xeon 2.4(2プロセッサ)を持っています。 – Jsmith

+0

私はどこかでconfigのメモリを増やすと役に立つかもしれないので、次のようにneo4j.propertiesを変更しようとしました:neostore.nodestore.db.mapped_memory = 500M neostore.relationshipstore.db.mapped_memory = 1000M neostore.propertystore.db.mapped_memory = 1000M neostore.propertystore.db.strings.mapped_memory = 1300M neostore.propertystore.db.arrays.mapped_memory = 1300M Chromeは1.2GBのRAMを使用した後にクラッシュし続けます。 – Jsmith

+0

大量のデータを返す場合は、量を減らしてみてください。これを行う1つの方法は、 'LIMIT 100'を追加して100個の結果行を表示することです。 – cybersam

関連する問題