ノード (twitter ユーザー) と有向エッジ (フォロー) の埋め込みグラフ db があります。
指定されたユーザー (ノード U) がフォローしているユーザー (セット A) 間のすべての関係を取得しようとしています。A
また、 のノードと指定された node の間の関係U
。
私のクエリ:
START u=node:user_id(user_id={id_of_U})
MATCH p = u-->following, p2= following-[?]->u, p3 = following-[?]->()<--u
RETURN distinct rels(p),rels(p2),rels(p3)
このクエリは私が期待するものを提供しますが、問題は、指定されたユーザーがあまりにも多くのユーザーをフォローしている場合、非常に時間がかかることです.
多くのクエリを試しましたが、上記のクエリがこれまでで最高のクエリです。しかし、これを行うためのより効率的な方法があると確信しています。なぜなら、「A」のすべてのユーザーをウォークスルーし、それぞれのすべての関係 (Direction.BOTH) を取得してから、Java メソッドでこれらの関係を取得するからです。 「A」でリレーションシップをフィルタリングする (「A」に属さない開始ノードまたは終了ノードを持つリレーションシップを削除する) と、ユーザーが 500 人をフォローするのにわずか 8 秒しかかかりませんが、サイファー クエリは、ヒープを爆破することなく失敗することさえありません。 ...