2016-10-05 13 views
0

現在、私は2つの異なる値を取得する2つのgremlinクエリを持っています。 シナリオ:A-> B、A-> C、A-> Dgremlin scalaを使用してキー値のマップを返すことは可能です

以下自分のクエリ、

  1. graph.V().has(ID,A).out().label().toList()

のOUTEラベルのリストを取得

結果:リスト(B、C、D)

A及びBを考える
  • graph.traversal().V().has("ID",A).outE("interference").as("x").otherV().has("ID",B).select("x").values("value").headOption()
  • 、(A-> EGDEプロパティ値を取得しますB)

    リターン:10

    私が結合することができている可能性があり、両方のGEにあっ問い合わせますt戻り値マップ[(B、10)(C、11)(D、12)]

    2つのクエリがあるときにパフォーマンス上の問題に直面しています。その撮影より多くの時間が

    答えて

    0

    おそらくこれを行うには良い方法がありますが、私は、次のトラバースで何か得ることができた:私はより良いトラバーサルがある疑いがあるとしてのに

    gremlin> graph.traversal().V().has("ID","A").outE("interference").as("x").otherV().has("ID").label().as("y").select("x").by("value").as("z").select("y", "z").select(values); 
    ==>[B,1] 
    ==>[C,2] 
    

    は、私はより多くの回答を待つだろうがそこに。以下は

    +0

    に答えてくれてありがとうを返しますScalaの

    val b = StepLabel[Edge]() val y = StepLabel[Label]() val z = StepLabel[Integer]() graph.traversal().V().has("ID",A).outE("interference").as(b) .otherV().label().as(y) .select(b).values("name").as(z) .select((y,z)).toMap[String,Integer] 

    に取り組んでいます。 'select(values);'ここで 'values'は解決されません。なぜ 'select(values)'が必要なのでしょうか?ここで、Aは多くのOutEエッジを有する。私たちは、すべてとそのエッジプロパティ値のOtherV()を取得する必要があります。 – Gopi

    +0

    'select(values);'は、好きな場合には実際に省略することができます。私はちょうど選択の 'z'と' y'ラベルを取り除くためにそれを行います。 このトラバーサルはエッジ上のプロパティを取得しています。 'select(" x ")。by(" value ")'これはエッジである 'x'を選択し、' .by( "value") 'は値を取得するように指示します。 –

    0

    これは地図[文字列、INT]

    +1

    あなたは 'otherV'を必要としません - あなたは' outE'を横断しました。隣接する頂点に到達するには 'inV'だけできます。 'bothE'を横断するときに' otherV'を使用してください。どこに来たのかを確認するためにバックトラックする必要があります。 –

    +0

    @stephen malletteデータを取り込むために取られた 'otherV'と' inV'の両方の時間でさえ、ほとんど同じ時間がかかります。 10エッジを持つ4000個の頂点をフェッチするのに約19秒かかります。私はまだそれを最適化することができますか? – Gopi

    +0

    'inV'は依然としてオーバーヘッドが少ないので、私はどんな場合でもそれを好むでしょう。グレムリンの視点からもっと速く進むことができるかどうかはわかりません。二重の「選択」は不要と思われる。私は以下を好むだろう: 'gV()。(" ID "、" A ")。 ( 'y'、 'x')。by()。by( 'name') ' –

    関連する問題