1

基本的に、Rob にリンゴがあり、Anna にもそのようなリンゴがあるグラフがあるとします。

ロブ --has-->りんご アンナ --has-->りんご

これは明らかに間違いです。次のような Rob と Anna の両方からのエッジを持つ 1 つの「apple」頂点のみが必要です。 Rob --has--> apple <--has--Anna

Gremlin に、すべての頂点を「apple」というラベルで「マージ」し、エッジを保持するオプションはありますか? この悪い質問で申し訳ありませんが、英語は私の母国語ではなく、この TT ではかなり新しいものです。

4

2 に答える 2

0

あなたがするCypherではありません

start Rob=node(1), Anna=node(2) match Rob-[:has]->apple<-[:has]-Anna return apple

グレムリンはこんな感じかな

rob=1
anna=2
t = new Table()
g.v(rob).out('has').as('apple').in('has').filter{it.id==anna}.table(t,['apple']){it.name}.iterate()

HTH

/ピーター

于 2012-01-16T15:49:41.943 に答える
0

りんごの量がメイン メモリに収まる場合は、次の操作を実行できます。

apples = [] as Set
g.id(T.v)[[type:'apple']].each{apples.add(it)}
apple = g.addVertex()
apples.each{it.map.each{k,v -> apple[k] = v}
apples.each{it.outE.each{g.addEdge(apple, it.inVertex, it.label)}
apples.each{it.inE.each{g.addEdge(apple, it.outVertex, it.label)}
apples.each{g.removeVertex(it)}

各行は次のことを行います。

  1. リンゴのメモリ内セットを作成します。
  2. マージするグラフ内のすべてのリンゴを見つけます (データ モデルがわからないため、これが最善の仮定です)。
  3. 新しいリンゴ頂点 (マージ頂点) を作成します。
  4. リンゴごとに、新しいリンゴの頂点のそれぞれのプロパティを設定します (古いリンゴのプロパティを上書きする場合があります)。
  5. 発信エッジごとに、マージ アップルから同様のエッジを追加します。
  6. 入力エッジごとに、同様のエッジをマージ アップルに追加します。
  7. すべてのりんごを取り除きます (新しいマージりんごを除く)。

これを行うときはトランザクションに注意してください: https://github.com/tinkerpop/blueprints/wiki/Graph-Transactions

于 2012-04-02T20:48:25.887 に答える