インデックスの使用

グラフ・クエリー用インデックスの使用。

V()ステップの後の最初の探索ステップに対して、インデックスがグラフ探索クエリーで使用されます。また、最初にフェッチされる頂点の数を削減するためにも使用されます。一般的に、探索ステップには頂点ラベルが関与し、プロパティ・キーと特定のプロパティ値を含めることができます。探索では、g.V()に続くステップは、通常はインデックスを探索するステップになります。中間探索V()ステップが呼び出された場合は、インデックスを使用した追加のステップを利用して、探索される頂点のリストを絞り込むことができます。

注: グラフ探索では、頂点ラベルとプロパティ・キーの両方が指定されている場合にのみインデックスを使用します。両方が指定されていない場合、インデックスは使用されず、プロパティ・キーのフル・グラフ・スキャンが行われます。フル・グラフ・スキャンが無効になっている場合、この例に示すように、クエリーは失敗に終わります。この例では、プロパティが指定されていますが、頂点ラベルは指定されていません。
g.V().has('name','Julia Child')
Could not find an index to answer query clause and graph.allow_scan is disabled: 
((label = FridgeSensor & name WITHIN [Julia Child]) | (label = author & name WITHIN [Julia Child]) | 
(label = book & name WITHIN [Julia Child]) | (label = ingredient & name WITHIN [Julia Child]) | 
(label = meal & name WITHIN [Julia Child]) | (label = recipe & name WITHIN [Julia Child]) | 
(label = reviewer & name WITHIN [Julia Child]))

手順

ここに示すグラフ探索ではインデックスを使用して特定の作者の頂点を検出し、クエリーを開始します。
g.V().has('author', 'name', 'Emeril Lagasse').out('created').values('name')

このグラフ探索では、インデックスが存在する場合は、インデックスを使用します。探索ステップhas('author', 'name', 'Emeril Lagasse')では、インデックスが作成されている頂点ラベルとプロパティ・キーを識別します。探索の起点となる最初のインデックスが検出されると、出力エッジcreatedがウォークスルーされ、隣接する頂点がname別にリストされます。このグラフ探索は、頂点ラベルとプロパティ・キーを併用することの重要性を示しています。2つの異なる要素である作者とレシピは同じプロパティ・キーnameを使用しているためです。

インデックスの使用については、profile()メソッドを使用して確認します。
gremlin> g.V().has('author', 'name', 'Emeril Lagasse').out('created').values('name').profile()
==>Traversal Metrics
Step                                                               Count  Traversers       Time (ms)    % Dur
=============================================================================================================
DsegGraphStep([~label.=(author), name.=(Emeril ...                     1           1           2.196    51.37
  query-optimizer                                                                              0.199
  query-setup                                                                                  0.004
  index-query                                                                                  0.946
DsegVertexStep(OUT,[created],vertex)                                   2           2           0.935    21.88
  query-optimizer                                                                              0.101
  query-setup                                                                                  0.000
  vertex-query                                                                                 0.282
DsegPropertiesStep([name],value)                                       2           2           1.030    24.11
  query-optimizer                                                                              0.044
  query-setup                                                                                  0.005
  vertex-query                                                                                 0.347
  vertex-query                                                                                 0.639
  query-setup                                                                                  0.000
NoOpBarrierStep(2500)                                                  2           2           0.113     2.64
                                            >TOTAL                     -           -           4.276        -
最初のステップDsegGraphStepで使用されているindex-queryに注目してください。インデックスが使用されなかった場合、index-queryはプロファイル出力に含まれません。