2017-06-20 13 views
0

関係のプロパティに基づいて検索結果を効率的にフィルタリングする方法について質問があります。 300.000オーバーノード標識PERSONと上で:(PERSON)Neo4j Cypher大規模グラフの重み付けによる関係のフィルタリング

- [:WORKED_WITH {体重30}] - >:

(:PERSON)


私はこのようなグラフを有しますWORKED_WITH(それぞれ整数ウェイトを持つ)とラベル付けされた15.000.000のエッジ。


ここで、たとえば、ノード間の重みが最も高い10個のノードの組み合わせが必要です。だから私のクエリは次のようになります:

MATCH (n:PERSON)-[r:WORKED_WITH]->(m:PERSON) 
RETURN n.name, m.name, r.weight 
ORDER BY r.weight DESC 
LIMIT 10; 

私が最近読んだのは、関係のプロパティにインデックスを作成することはできません。 < 50,50-100,100以上のようなパーティション用のノードを作成することができますが、それはベストプラクティスのようには感じられません...(不等号)インデックスのような振る舞いをする可能性はありますか?あるいは、このような問題を効率的に解決するために何を考えていますか?

よろしく ヴォルフガング

答えて

0

ステファンARMBRUSTERはよくHow to create an index on a property of a relationのポイント(とあなたのオプションを)説明しています。

関係がグラフの唯一のエントリポイントである場合(最初の検索を減らす方法が他にない場合は読んでください)、ノードをリロードすることができます。それは確かに "感じる"正しいかもしれませんが、それはベストプラクティスです。

・ホープ、このことができます、 トム

+0

あなたの答えをありがとうございました、私はすでにその記事を読んで、それはまさに私の問題に当たるとは思いませんでした... –

+0

問題はグラフにあなたのエントリポイントです。私があなたの説明をよく理解すれば(そうでなければ私を修正する)唯一の決定要因は関係の特性です。もしそうなら、あなたの選択肢は限られています。 –

+0

私は新しいタスクごとにデータモデルを変更したくない... Neo4jがこのプロパティに基づいて内部的にソートするようなものを考えていたので、rel.weight> 50、または30と50 ....私は後で分割するのがさらに難しいjaccard係数を使用します... –

関連する問題