グラフは1Mノードです。データモデルは意図的に単純です。エンティティとIDTypeノードがあります。単一のEntityは1:多くのIDTypeノードを持つことができます。 IDTypeノードは、1:多くのエンティティに接続することができます。これにより、グラフが形成されます。Neo4jでノードをクラスタリングする方法
目的は、IDTypeとEntitiesのすべてのクラスタを、ノードのクラスタ(サブグラフと呼んでいます)と呼ぶものにまとめて検索することです。 1M個のノードがあるとします。私はグラフのデータでこのような "クラスタ"を探したいと思います、私はそれを行う方法を理解しようとしています。私はそれを行うと信じているサイファークエリを書いたが、それが意図されているかどうかは私には分からない。
質問:効率的にグラフをトラバースし、ノードをクラスタリングして、行ベースの結果セットとして返すことができる単一の行またはグループが、私のpythonドライバプログラムに戻って動作するようにするにはクラスタ。これは私の結果の正確な構造である必要はありませんが、これは私が探しているものの感覚です。
クラスタ|ノード 1 | 2,3,4,5,6,7- 2 | 10,11,12,13 3 | 15,17,19,20,21,25,27,28、 33
ここで、「クラスタ」とは、ノードリストの任意のクラスタリングです(単なるクラスタの集まりであるとか、すべてが関連していると言う別の方法の場合、私は金色です) 。 「ノード」番号は、すべてのエンティティノードにタグ付けする固有の整数ベースのプロパティを表します。
クエリは以下のとおりです。概念は、 "エンティティ"ノードが1つまたは複数の "ID"ノードを持つことができ、関係 "HAS_ID"を介して互いに関連するすべての "エンティティ"と "ID"を取得しようとしているということです。
概念的には、このEntity1ようなデータに存在する関係がある場合 - > ID1 < --Entity2 - > ID2 < --Entity3 - > ID3 < --Entity4 - > ID4 < - Entity5の場合、それらを一緒に「クラスタ化」して、このノードグループを表す一意の番号を作成することができます。私の例では、5つのエンティティがありますが、2つのエンティティまたは50のエンティティが互いに関連していることもあります。そのため、可変長パスが必要なものだと思っています。
以下はグラフでこれを行う私の試みです。しかし1)正しいですか? 2)無期限に実行されるように見えるので効率的です3)どのようにしてこれらをまとめてグループ化するのがベストですか?
がmatch
(n:Entity)-[e1:HAS_ID*]-(o)
where n.key <> o.key
return *
limit 10
;
私も
match (n:Entity)-[e1:HAS_ID*]-(o)
where n.key <> o.key
with distinct n.key as key_1, o.key as key_2
return key_1, collect(key_2)
limit 100
;
を試してみたこのは、私が欲しいものに近い行うにようだが、私はまだ他の言葉で、与えられたキーのための単一のグループが届きません、私は5行を返すことができますが、それらはすべて関連しています。その場合、1行しか持たないでしょう...彼は例です。キー "49518"が1行目と2行目にあることがわかりますむしろそれらをすべて一緒にグループ化した1つの行があります。
49518 [49004, 49871, 49940, 50525, 49101, 49625, 50165, 50017, 49098, 50383]
49940 [49088, 49706, 50292, 50470, 49140, 49258, 49216, 49559, 50004, 50346, 49237, 49518, 49894, 49101, 49625, 50165, 50017, 49098, 50383]
ご連絡いただきありがとうございます。私はまだ困惑しています;(私は私の問題の詳細をあまりにもうまく説明しているとは思わないので、上の質問に空白を記入してもらえるかどうか確認してください) – DAE
私は質問を更新しました。 – DAE
ああ、どれくらい小さいか大きいかにかかわらずグループ全体を探しているので、各グループはサブグラフから他のIDへの[:HAS_ID]接続を持たない完全なサブグラフでなければなりません。エンティティ?トリッキーな問題... – InverseFalcon