インデックスの作成

グラフのインデックスの作成。

グラフのインデックスの作成を実行するときは、さまざまな特性を指定できます。すべてのインデックスは、インデックスの頂点ラベルおよびプロパティを識別します。辺インデックスは、さらに辺ラベルを識別します。
注: DSE Graphにおけるグローバル・インデックスは、頂点ラベルを基準にプロパティ・キーをインデックス付けすることを指します。プロパティ・キーは、後にプロパティ・キーnameで示すように、複数の頂点ラベルで使用できます。グラフ探索は、「インデックスの使用」で示すように、頂点ラベルおよびプロパティ・キーの両方が指定された場合はインデックスのみを使用します。グラフ内のすべての頂点ラベルにまたがるインデックスは、DSE Graphでサポートされていません。

手順

  • セカンダリ・インデックスを作成します。
    schema.vertexLabel('recipe').index('byRecipe').secondary().by('name').add()

    インデックスの頂点ラベルおよびプロパティ・キーを、vertexLabel()ステップおよびby()ステップでそれぞれ識別します。index()ステップでインデックスに名前を付けます。secondary()ステップは、インデックスをセカンダリ・インデックスとして識別します。

  • マテリアライズド・ビュー・インデックスを作成します。
    schema.vertexLabel('author').index('byAuthor').materialized().by('name').add()

    インデックスの頂点ラベルおよびプロパティ・キーを、vertexLabel()ステップおよびby()ステップでそれぞれ識別します。index()ステップでインデックスに名前を付けます。materialized()ステップは、インデックスをマテリアライズド・ビュー・インデックスとして識別します。

  • サーチ・インデックスを作成します。サーチ・インデックスには1つのプロパティ・キーがインデックス指定されています。複数のプロパティ・キーがインデックス指定されている場合は、追加のby()ステップを連結します。
    schema.vertexLabel('recipe').index('search').search().by('instructions').asText().add()

    インデックスの頂点ラベルおよびプロパティ・キーを、vertexLabel()ステップおよびby()ステップでそれぞれ識別します。index()ステップでインデックスsearch()に名前を付けます。使用できるのは、この命名規則のみです。search()ステップは、インデックスをサーチ・インデックスとして識別します。このインデックスは、全文インデックスを使用して検索されます。

  • サーチ・インデックスは文字列インデックス・オプションも指定できます。次の例では、文字列インデックスを識別します。
    schema.vertexLabel('recipe').index('search').search().by('instructions').asString().add()

    asString()も、使用可能なサーチ・インデックス・オプションです。

  • さらに一般的には、サーチ・インデックスは複数のカラムを指定します。
    schema.vertexLabel('recipe').index('search').search().by('instructions').asText().by('name').asString().add()

    各プロパティには、asText()またはasString()のどちらかを指定できます。指定されていない場合、デフォルトはasText()です。

  • 辺インデックスを作成します。辺インデックスは、特定の頂点ラベルに対する頂点中心インデックスです。たとえば、次の例では、レビュー担当者が評価するものをインデックス作成します。
    schema.vertexLabel('reviewer').index('ratedByStars').outE(rated).by('stars').add()

    インデックスの頂点ラベルおよびプロパティ・キーを、vertexLabel()ステップおよびby()ステップでそれぞれ識別します。index()ステップでインデックスに名前を付けます。outE()ステップは、辺の方向を定義するために使用されます。

  • プロパティ・インデックスを作成します。プロパティ・インデックスは、特定の頂点ラベルに対する頂点中心インデックスです。
    schema().vertexLabel('author').index('byLocation').property('country').by('livedIn').add()

    インデックスの頂点ラベルおよびプロパティ・キーを、vertexLabel()ステップおよびproperty()ステップでそれぞれ識別します。index()ステップでインデックスに名前を付けます。by()ステップは、プロパティのメタプロパティを定義するために使用されます。

    .
  • インデックス作成を確認します。
    schema.describe()
  • 頂点ラベルを指定し、describe()ステップを使用すると、インデックスに関する詳細情報が表示されます。インデックスの作成に使用できるスキーマが表示されます。
    schema().vertexLabel('author').describe()
    ==>schema.vertexLabel("author").properties("name", "gender", "nationality").create()
    schema.vertexLabel("author").index("byName").secondary().by("name").add()
    schema.vertexLabel("author").index("byAuthor").materialized().by("name").add()
  • すべてのvertexIndexをフィルターするスキーマ探索を使用すると、すべてのインデックスに関する情報が表示されます。
    schema.traversal().V().hasLabel('vertexIndex').valueMap()
    ==>{name=[byName], type=[Secondary]}
    ==>{unique=[false], name=[byIngredient], type=[Materialized]}
    ==>{unique=[false], name=[byReviewer], type=[Materialized]}
    ==>{unique=[false], name=[byRecipe], type=[Materialized]}
    ==>{unique=[false], name=[byMeal], type=[Materialized]}
  • すべてのvertexIndexをフィルターするスキーマ探索を使用し、インデックス数のカウントを取得します。
    schema.traversal().V().hasLabel('vertexIndex').count()
    ==>5