インデックス作成ポリシーについて理解する

完了

既定では、Azure Cosmos DB for NoSQL コンテナー内のすべてのデータにインデックスが作成されます。 これは、新しく作成されたすべての項目に適用される既定のインデックス作成ポリシーがコンテナーに含まれるためです。 既定のインデックス作成ポリシーは、次の設定で構成されます。

  • 逆インデックスは、項目に対する作成、更新、または削除のすべての操作に対して更新されます
  • すべての項目のすべてのプロパティに自動的にインデックスが作成されます
  • 範囲インデックスは、すべての文字列または数字の値に使用されます

インデックス作成ポリシーは JSON で定義され、管理されます。 Azure Cosmos DB for NoSQL の新しいコンテナーの既定のインデックス作成ポリシーには、次のコンポーネントが含まれます。

コンポーネント 説明 既定値
インデックス作成モード コンテナーのインデックス作成が有効 (一致) かそうでない (なし) かを構成します 常に
自動 項目の書き込み時に自動的にインデックスを作成するかどうかを構成します 有効
対象のパス インデックスに含めるパスのセット All (*)
対象外のパス インデックスから除外するパスのセット _etag プロパティのパス

JSON の既定のインデックス作成ポリシーには、次の内容が含まれます。

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/\"_etag\"/?"
    }
  ]
}

インデックス作成モードを構成する

ほとんどの Azure Cosmos DB for NoSQL コンテナーには、主に 2 つのインデックス作成モード オプションがあります。

一致のインデックス作成モードでは、項目を変更する個々の操作 (作成、更新、または削除) を実行すると、インデックスが同期的に更新されます。 このインデックス作成モードは、項目の変更に応じてインデックスが更新されるため、ほとんどのコンテナーで標準的な選択肢になります。

なしインデックス作成モードでは、コンテナーのインデックス作成が完全に無効になります。 このインデックス作成モードは、インデックス作成操作が不要か、ソリューションの全体的なパフォーマンスに影響を与える可能性があるシナリオ固有のモードです。 次の 2 つの例があります。

  • 複数のドキュメントを作成、更新、または削除する一括操作は、一括実行期間中にインデックス作成を無効にすることでベネフィットが得られる場合があります。 一括操作が完了すると、インデックス作成モードを一致に戻すことができます。
  • コンテナーを純粋なキーと値のストアとして使用するソリューションでは、ポイント読み取り操作のみが実行されます。 これらのコンテナーでは、インデクサーを実行して作成されたセカンダリ インデックスのベネフィットが得られません。

パスの包含および除外

インデックス作成ポリシーでは、インデックスに明示的に含めるか、インデックスから除外されるパスを指定します。 パス構文を使用すると、JSON 項目内のさまざまなパスを記述する式を作成できます。

Azure Cosmos DB for NoSQL コンテナー内の製品項目を表すこの JSON オブジェクトを考えてみてください。

{
  "id": "8B363B8B-378E-402A-9E68-A935302000B8",
  "name": "HL Touring Frame - Yellow, 46",
  "category": {
    "id": "F3FBB167-11D8-41E4-84B4-5AAA92B1E737",
    "name": "Components, Touring Frames"
  },
  "metadata": {
    "sku": "FR-T98Y-46"
  },
  "price": 1003.91,
  "tags": [
    {
      "name": "accessory"
    },
    {
      "name": "yellow"
    },
    {
      "name": "frame"
    }
  ]
}

プロパティ パスを定義するときは、主に次の 3 つの演算子が使用されます。

  • ? 演算子は、パスが文字列または数字 (スカラー) の値で終了することを示します
  • [] 演算子は、このパスに配列が含まれ、配列インデックス値を指定する必要がないことを示します
  • * 演算子はワイルドカードであり、現在のパスを超える任意の要素と照合します

これらの演算子を使用すると、JSON 項目の例に対していくつかのプロパティ パス式の例を作成できます。

パス式 説明
/* すべてのプロパティ
/name/? name プロパティのスカラー値
/category/* category プロパティのすべてのプロパティ
/metadata/sku/? metadata.sku プロパティのスカラー値
/tags/[]/name/? tags 配列内で使用可能なすべての name プロパティのスカラー値