Docs Menu

Atlas Search インデックスの作成と管理

Atlas Search インデックスは、簡単に検索可能な形式でデータを分類するデータ構造であり、タームとタームを含むドキュメントの間をマッピングします。Atlas Search インデックスを使用すると、特定の識別子を使用してドキュメントをすばやく検索できます。Atlas Search を使用して Atlas クラスター内のデータをクエリするには、Atlas Search インデックスを構成する必要があります。

Atlas Search インデックスは、単一または複数のフィールドで作成できます。データのソートやフィルタリングによく使用するフィールドはインデックスを作成して、クエリ時に関連データを含むドキュメントをすばやく取得できるようにすることをお勧めします。

インデックスを作成するフィールドは、以下の方法で指定できます。

  • 動的マッピング。Atlas Search が各ドキュメント内でサポートされているタイプのすべてのフィールドのインデックスを自動的に作成できるようにします。 これにより、検索しないフィールドのインデックス作成にディスク領域が消費され、クラスターのパフォーマンスに悪影響が及ぶことがあります。

  • 静的マッピング。インデックスを作成するフィールドを選択的に識別できるようにします。フィールドに多形データが含まれている場合、Atlas Search はインデックス定義でのマッピングに対応するドキュメントのみにインデックスを作成し、フィールドのインデックス定義で指定されたマッピングに対応しない値を含むドキュメントを無視します。

Atlas Searchの検索インデックスを作成および管理する際には、次の点を考慮してください。

MongoDB Atlas Search に組み込まれているアナライザは、句読点、大文字、ストップワードなどにおける差異を修正するインデックス可能なタームを作成し、クエリに解析と言語ルールを適用します。組み込まれている文字フィルター、トークナイザ、トークン フィルターを使用して、カスタムアナライザを作成することもできます。組み込みアナライザとカスタムアナライザの詳細については、「アナライザによるデータ処理」を参照してください。

Atlas Search がフィールドマッピングでサポートするデータ型については、「 データ型 」を参照してください。mongot プロセスは、インデックスが作成されたフィールドと _id フィールドをクラスター上のコレクション向けインデックスごとにディスクに保存します。

注意

Atlas Search は Atlas UI でのカスタマー キー管理を使用した暗号化キーによる Atlas Search インデックスの暗号化をサポートしていません。

ビデオで学びたい場合

Atlas Search インデックスの概要については、こちらのビデオをご覧ください。このビデオでは、アナライザと Atlas Search のオートコンプリート フィールド タイプについて詳細に説明しています。

所要時間: 8分

Atlas Search に保存されるデータは、Atlas クラスターにあるコレクションのデータとまったく同じコピーではありませんが、ディスク領域とメモリをある程度必要とします。文字列の値を含むフィールドで store オプションを有効にするか、インデックスで保存済みソース フィールドを構成する場合、Atlas Search はディスクの特定フィールドと同一のコピーを保存し、ディスク領域を使用する可能性があります。

Atlas Search インデックスを使用すると、Atlas クラスターのアイドル状態のノードでリソース消費が増加する可能性があります。これは、Atlas Search のさまざまな重要な操作を実行する基盤である mongot プロセスによるものです。アイドル状態のノードにおける CPU 使用率は、インデックスの数、複雑さ、および規模によって変動する可能性があります。

注意

コレクションに 16MB 以上のドキュメントが含まれている場合、Atlas Search はデータのインデックス作成に失敗します。この問題は、大きなドキュメントに対する更新操作によって変更ストリームイベントが16MB BSONの制限を超えた場合にも発生する可能性があります。これを回避するために、次のベストプラクティスを検討してください。

  • サブドキュメントや配列のサイズを最小限に抑えるように、ドキュメントを構造化してください。

  • 大規模なフィールド、サブドキュメント、または配列を更新または置換する操作は避けてください。

詳しくは、Change Streams 運用推奨事項および大規模ドキュメントのサイズ削減を参照してください。

Atlas Search インデックスを定義したコレクションに変更を加えた場合、クエリですぐに最新データを使用できない場合があります。ただし、mongot が変更ストリームをモニターすることにより、保存済みデータのコピーがアップデート可能になるため、Atlas Search インデックスの一貫性は最終的には維持されます。

インデックス定義を変更すると、mongot はバックグラウンドで新しいインデックスを自動的に再構築し、ダウンタイムがないことを確認するために、古いインデックスでクエリを処理し続けます。これは、mongotmongod のプロセスを同じノードにデプロイする場合、または異なるノードにデプロイする場合に発生します。Atlasは、保管時の暗号化を有効化または無効化すると、インデックスを再構築します

検索配置のトポロジーを変更すると、Atlas Search は古いノードを削除する前に、新しいノードにインデックスをプロビジョニングして構築し、クエリのダウンタイムを発生させません。

mongod プロセスと mongot プロセスの両方が同じノードで実行されるデプロイメントの場合、Atlas Search がインデックスの再構築を必要とする変更(インデックスの更新 が必要なAtlas Search の機能など)を導入した場合、Atlas はインデックスをビルドするために追加のノードを無料で自動的に配置しますが、古いノードは引き続きクエリを処理します。

専用の検索ノードをデプロイすることにより、パフォーマンス、スケーラビリティ、およびリソースの分離を向上させることができます。検索ノードをデプロイした場合、次の点を考慮してください。

  • シャードを追加、調整すると、Atlas Search インデックスの再構築がトリガーされます。 インデックスの再構築中、データは最新でない場合があります。 そのため、追加、調整されたシャードのデータにクエリを実行すると、失敗したり不正確な結果が返されることがあります。

  • Atlas Search インデックスでコレクションを再シャーディングすると、再シャーディング操作の完了時にコレクションの |fts| インデックスを使用できなくなります。操作が完了してから、Atlas Search インデックスを削除して新しく作成し直す必要があります。

  • データベースのプライマリシャードを変更するためにコマンドを発行する場合、操作の完了時にこのデータベースにあるシャーディングされていないコレクションで Atlas Search インデックスを使用できなくなります。movePrimary操作が完了したら、Atlas Search インデックスを削除して新しい Atlas Search インデックスを作成し直す必要があります。

Atlas Search インデックスは、Atlas UI、Atlas Search API、Atlas CLI、 mongosh 、MongoDB Compass、 MongoDB ドライバーから作成、管理できます。

Atlas CLI を使用して Atlas Search インデックスを作成および管理するには、Atlas クラスターで MongoDB 6.0+ または 7.0+ を実行する必要があります。

を使用して Atlas Searchmongosh インデックスを作成および管理するには、Atlas クラスターでMongoDB6.0 + または7.0 + が実行されている必要があります。

Compass を使用して Atlas Search インデックスを作成および管理するには、Atlas クラスターでMongoDB7.0 + を実行する必要があります。

任意のクラスター層で Atlas Search インデックスをプログラムで作成および管理するには、次のMongoDBドライバー のいずれかを使用できます。

MongoDB ドライバー
バージョン

1.25.0 以上

3.9.0 以上

2.21.0 以上

1.13.0 以上

4.11.0 以上

9.0 以上

3.3.0 以上

5.2.0 以上

5.6.0 以上

1.17.0 以上

4.5 以上

2.19.2 以上

2.8.0 以上

5.2.0 以上

アトラス検索インデックスの作成方法については、「Atlas Search インデックスを作成する」を参照してください。サンプルデータセットの Atlas Search インデックスを作成し、インデックス化されたデータに対して Atlas Search クエリを実行するという実践的な経験については、次のページのチュートリアルを試してください。