トラバーサルの各ソース頂点を、関連するエッジと頂点とともに、そのような各ソース頂点の配列として返すクエリを作成するのを手伝ってくれませんか? つまり、各タプルのアイテム 1 がソース頂点であり、アイテム 2 と 3 が関連する配列である 3 タプルの配列で構成される結果セットが必要です。
ありがとう!
EDIT 1:グラフデータを拡張し、現在の問題クエリを追加しました。編集 2: Gremlin のサンプル グラフ コードの改善 (申し訳ありませんが、実際に実行する人がいるとは思いませんでした。)
サンプルグラフ
g.addV("blueprint").property("name","Mall").
addV("blueprint").property("name","HousingComplex").
addV("blueprint").property("name","Airfield").
addV("architect").property("name","Tom").
addV("architect").property("name","Jerry").
addV("architect").property("name","Sylvester").
addV("buildingCategory").property("name","Civil").
addV("buildingCategory").property("name","Commercial").
addV("buildingCategory").property("name","Industrial").
addV("buildingCategory").property("name","Military").
addV("buildingCategory").property("name","Resnameential").
V().has("name","Tom").addE("designed").to(V().has("name","HousingComplex")).
V().has("name","Tom").addE("assisted").to(V().has("name","Mall")).
V().has("name","Jerry").addE("designed").to(V().has("name","Airfield")).
V().has("name","Jerry").addE("assisted").to(V().has("name","HousingComplex")).
V().has("name","Sylvester").addE("designed").to(V().has("name","Mall")).
V().has("name","Sylvester").addE("assisted").to(V().has("name","Airfield")).
V().has("name","Sylvester").addE("assisted").to(V().has("name","HousingComplex")).
V().has("name","Mall").addE("classification").to(V().has("name","Commercial")).
V().has("name","HousingComplex").addE("classification").to(V().has("name","Resnameential")).
V().has("name","Airfield").addE("classification").to(V().has("name","Civil"))
上記は、データの非常に単純化されたレンダリングであることに注意してください。
必要なクエリ結果
各ブループリントの頂点をベースとして、関連する各エッジ/頂点を配列として戻す必要があります。
私の現在の解決策
現在、設計図を取得してラベルを割り当て、アーキテクトを取得してラベルを割り当て、両方のラベルを選択する、非常に面倒なクエリを実行しています。解決策は大丈夫です。ただし、エッジを含める必要がある場合や、設計図の分類頂点 (産業、軍事、住宅、商業など) を取得する必要がある場合は、面倒です。実際、ブループリントごとに取得する必要がある関連データが多いほど、私のソリューションはだらしなくなります。
私の現在のクエリは次のようになります。
g.V().hasLabel("blueprint").as("blueprints").
outE().or(hasLabel("designed"),hasLabel("assisted")).inV().as("architects").
select("blueprints").coalesce(out("classification"),constant()).as("classifications").
select("blueprints","architects","classifications")
上記は多くの重複を生み出します。数: 設計図が b、建築家が a、分類が c の場合、結果セットは b * a * c の結果で構成されます。関連するアーキテクトの配列と関連する分類の配列を含む 1 つの青写真が欲しいです。
合併症
グラフからすべての設計図データを取得して、フィルター処理されたリストに入力できるように、これを 1 つのクエリで実行しようとしています。すべての頂点、エッジ、およびそれらのプロパティを含むリストを取得したら、ユーザーはブロブへのリンクをクリックしたり、プロジェクト サイトを参照したりできます。新しいページを取得するか、フィルターが変更されるたびに、サーバーに 1 回アクセスすることを好みます。