1

以下に示す関係を使用して、タイタングラフデータベースにモデルを実装しました。

[A] ---(e1)---> [B] <---(e2)--- [C] ---(e3)---> [D]
 |      |        |       |       |      |        |
prop:id |    prop:number |       | label:e3      |
        |                |    prop:id            |
   label:e1         label:e2                 prop:number
    prop:prop1

ABは「主な頂点」(たとえばユーザー)、頂点BCはユーザーに関連するいくつかのデータを記述する「重要度の低い頂点」です。

クエリ アルゴリズムの入力はid、頂点のプロパティですA

上記の方法でD接続されているすべての頂点を見つけたいです。さらにとの間の辺Aの性質を覚えておきたい。prop1e1AB

より正確には、 が edge between のプロパティ(エッジにこのプロパティがある場合) であり、がfromのプロパティ(prop1, numberD)であるペアを効率的に取得したいと考えています。prop1A -> BnumberDnumberD

このクエリを効率的に実装する方法がわかりません。

頂点のみを取得するのは簡単ですD( を使用GremlinPipes):

pipe
.start(startVertex)
.outE("e1")
.inV().hasProperty("number")
.inE("e2")
.outV().hasProperty("id")
.outE("e3")
.inV().hasProperty("number");

しかし、エッジも取得e1して頂点と一致させる必要がある場合に問題が発生しますD。これらすべてのステップを個別に計算しようとしましたが、非常に非効率的です。

gremlin-java または gremlin-groovy を使用してこれを (おそらく複数のクエリを使用して) 実装する方法について何か提案はありますか? ありがとう!

4

1 に答える 1

2

ここで説明されているパターン マッチ パターンを見てください。

https://github.com/tinkerpop/gremlin/wiki/Pattern-Match-Pattern

startVertex.outE('e1').as('e')
.inV().hasProperty('number').inE("e2")
.outV().hasProperty("id")
.outE("e3")
.inV().hasProperty("number").as('d')
.table(t)

これはマップの反復子を与えるはずです

[e:e1, d:D]

これらの各マップから、関心のあるプロパティを簡単に抽出できます。

于 2013-10-29T02:38:53.083 に答える