Atlas Search インデックスの表示
重要
Atlas Search インデックス定義は、 Index Overviewページで表示できます。 各インデックスについて、 Index Overviewページには次の内容が表示されます。
インデックスの名前空間。
インデックス定義で指定されたインデックスと検索アナライザ。
動的マッピングまたは静的マッピング。
インデックス定義内のフィールド マッピング(フィールド名、データ型、個々のフィールドで 動的マッピング が有効になっているかどうかなど)。
このページでは、 Index Overviewページでインデックス定義を表示する方法について説明します。 ページでは、ビジュアル または JSON エディターを使用して Atlas Search インデックスを編集するIndex Overview こともできます。
必要なアクセス権
次の表は、各ロールがサポートするアクセス モードを示しています。
ロール | アクション | Atlas UI | Atlas API | Atlas Search API | Atlas CLI |
---|---|---|---|---|---|
| Atlas Search アナライザーとインデックスを表示します。 | ✓ | ✓ | ||
| Atlas Search アナライザとインデックスを作成および管理し、API キーにロールを割り当てます。 | ✓ | ✓ | ✓ | ✓ |
| ✓ | ✓ | |||
API キーのアクセス リスト エントリを作成し、API キーのアクセス リストに表示されるクライアントからのリクエストを送信します。 | ✓ | ✓ | |||
Atlas UI または API を使用して Atlas Search インデックスを作成、表示、編集、削除します。 | ✓ | ✓ | ✓ |
手順
Atlas Search インデックスは、Atlas UI または、 mongosh
、 Atlas CLI、 API 、または希望言語でサポートされているMongoDB ドライバーを使用して、プログラムによって取得できます。
注意
mongosh
コマンドまたはドライバーヘルパーメソッドを使用して、すべての Atlas クラスター階層で Atlas Search インデックスを取得できます。サポートされているドライバー バージョンのリストについては、「 MongoDBドライバー 」を参照してください。
インデックスを含むデータベースに対して、少なくとも readAnyDatabase
ロールまたは read
アクセス権が必要です。詳しくは、「組み込みロール」または「特定の権限」を参照してください。
➤ [言語の選択]ドロップダウン メニューを使用して、このセクション内の例の言語を設定します。
APIを使用して Atlas Search インデックスを検索するには、次の手順に従います。
GET
リクエストを送信します。
取得する Atlas Search インデックスの一意の ID または名前を指定して、 GET
リクエストをsearch/indexes/
エンドポイントに送信します。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId}"
どちらのエンドポイントの構文とパラメータの詳細についても、「名前を1 つ取得 」および「 ID を使用して 1 つの取得 」を参照してください。
コレクションのすべての Atlas Search インデックスを取得するには:
GET
リクエストを送信します。
インデックスを取得するコレクションの名前を指定して、 search/indexes/
エンドポイントにGET
リクエストを送信します。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}"
クラスターのすべての Atlas Search インデックスを取得するには:
GET
リクエストを送信します。
検索対象のインデックスを持つクラスターの名前を指定して、 search/indexes/
エンドポイントにGET
リクエストを送信します。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes"
クラウド配置の Atlas Search インデックスの取得
Atlas CLI を使用してクラスターのすべての検索インデックスを一覧表示するには、次のコマンドを実行します。
atlas clusters search indexes list [options]
Atlas CLI を使用して、指定した検索インデックスの詳細を返すには、次のコマンドを実行します。
atlas clusters search indexes describe <indexId> [options]
前のコマンドの構文とパラメーターの詳細については、Atlas CLI ドキュメントのAtlas クラスター検索インデックス リストおよびAtlas クラスター検索インデックスの説明を参照してください。
ローカル配置の Atlas Search インデックスの取得
Atlas CLI を使用して指定した配置の指定された検索インデックスを記述するには、次のコマンドを実行します。
atlas deployments search indexes describe [indexId] [options]
Atlas CLI を使用して、指定したデプロイのすべての検索インデックスを一覧表示するには、次のコマンドを実行します。
atlas deployments search indexes list [options]
前のコマンドの構文とパラメータの詳細については、Atlas CLI ドキュメントの「Atlas配置Atlas Searchインデックスの説明」および「Atlas配置Atlas Searchインデックス リスト」を参照してください。
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
mongosh
を通じて Atlas Search インデックスを検索するには、 db.collection.getSearchIndexes()
メソッドを使用します。
このコマンドの構文は、次のとおりです。 インデックス名を省略すると、Atlas Search はコレクションのすべてのインデックスを返します。
db.<collection>.getSearchIndexes("<index-name>")
例
次のコマンドは、 movies
コレクションからdefault
という名前の検索インデックスを検索します。 結果は出力例のようになります。
db.movies.getSearchIndexes("default")
[ { id: '648b4ad4d697b73bf9d2e5e0', name: 'default', status: 'READY', queryable: true, latestDefinition: { mappings: { dynamic: true } } } ]
C ドライバーを使用して Atlas Search インデックスを取得するには、 mongoc_collection_aggregate()
メソッドを使用して、 $listSearchIndexes
ステージを含む集計パイプラインを作成します。
例
次のコード例を ファイルにコピーします。
次のサンプル アプリケーションでは、 集計パイプライン の$listSearchIndexes
ステージを指定します。 次に、アプリケーションはパイプラインとターゲット コレクションをmongoc_collection_aggregate()
メソッドに渡します。 このメソッドは、コードが各 Atlas Search インデックスにアクセスして出力するカーソルを返します。
int main (void) { mongoc_client_t *client = NULL; mongoc_collection_t *collection = NULL; mongoc_database_t *database = NULL; bson_error_t error; bson_t cmd = BSON_INITIALIZER; bool ok = true; bson_t pipeline = BSON_INITIALIZER; mongoc_cursor_t *cursor = NULL; mongoc_init(); // Connect to your Atlas deployment client = mongoc_client_new("<connectionString>"); if (!client) { fprintf(stderr, "Failed to create a MongoDB client.\n"); ok = false; goto cleanup; } // Access your database and collection database = mongoc_client_get_database(client, "<databaseName>"); collection = mongoc_database_get_collection(database, "<collectionName>"); // Create an aggregation pipeline with the $listSearchIndexes stage const char *pipeline_str = BSON_STR ({"pipeline" : [ {"$listSearchIndexes" : {}} ]}); // Convert your aggregation pipeline to BSON if (!bson_init_from_json(&pipeline, pipeline_str, -1, &error)) { fprintf(stderr, "Failed to parse command: %s\n", error.message); ok = false; goto cleanup; } // Run the aggregation operation and iterate through the indexes returned cursor = mongoc_collection_aggregate (collection, MONGOC_QUERY_NONE, &pipeline, NULL, NULL); const bson_t *got; char *str; while (mongoc_cursor_next (cursor, &got)) { str = bson_as_canonical_extended_json (got, NULL); printf ("%s\n", str); bson_free (str); } if (mongoc_cursor_error (cursor, &error)) { fprintf (stderr, "Failed to iterate all documents: %s\n", error.message); ok = false; goto cleanup; } cleanup: mongoc_cursor_destroy(cursor); mongoc_collection_destroy(collection); mongoc_database_destroy(database); mongoc_client_destroy(client); bson_destroy(&pipeline); bson_destroy(&cmd); mongoc_cleanup (); return ok ? EXIT_SUCCESS : EXIT_FAILURE; }
次の値を指定して、ファイルを保存します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
インデックスを取得するデータベースとコレクション。
C++ ドライバーを使用して Atlas Search インデックスを取得するには、検索インデックス ビューでlist()
メソッドを呼び出します。
例
次のコード例を ファイルにコピーします。
次のサンプル アプリケーションでは、ターゲット コレクションのsearch_indexes()
メソッドを使用して検索インデックス ビューをインスタンス化します。 次に、アプリケーションはビューでlist()
メソッドを呼び出します。 このメソッドは、コードが各 Atlas Search インデックスにアクセスして出力するカーソルを返します。
using namespace mongocxx; int main() { mongocxx::instance instance{}; try { // Connect to your Atlas deployment mongocxx::uri uri("<connectionString>"); mongocxx::client client(uri); // Access your database and collection auto db = client["<databaseName>"]; auto collection = db["<collectionName>"]; // Access and print the indexes in your collection auto siv = collection.search_indexes(); auto cursor = siv.list(); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }; } catch (const std::exception& e) { std::cout<< "Exception: " << e.what() << std::endl; } return 0; }
次の値を指定して、ファイルを保存します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
インデックスを取得するデータベースとコレクション。
.NET/C# ドライバー を使用して Atlas Search インデックスを取得するには、 メソッドまたはList()
ListAsync()
メソッドを使用します。
例
次のサンプル アプリケーションは、 コレクションのインデックスを返します。 次の値を指定します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
検索対象の検索インデックスを含むデータベースとコレクション。
注意
List()
メソッドは、インデックス自体ではなくカーソルを返します。 インデックスにアクセスするには、 MoveNext()
メソッドなどのカーソル パラダイムを使用します。
using MongoDB.Bson; using MongoDB.Driver; // connect to your Atlas deployment var uri = "<connection-string>"; var client = new MongoClient(uri); var db = client.GetDatabase("<databaseName>"); var collection = db.GetCollection<BsonDocument>("<collectionName>"); // list your Atlas Search indexes var result = collection.SearchIndexes.List().ToList(); foreach (var index in result) { Console.WriteLine(index); }
サンプル アプリケーションを実行するには、csharp-list-indexes
という名前の新しい .NET コンソール プロジェクトを作成し、前のサンプル コードを Program.cs
ファイルにコピーします。次に、以下のコマンドを使ってプロジェクトを実行します。
dotnet run csharp-list-indexes.csproj
<indexes for this collection>
Java ドライバーを使用してコレクションの Atlas Search インデックスを検索するには、 listSearchIndexes()
メソッドを使用します。 Java ドライバーv 4.11.0以上が必要です。
次のコード例を ファイルにコピーします。
次のサンプルアプリケーションは、特定のコレクションのすべての Atlas Search インデックスを検索します。
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoCursor; 5 import com.mongodb.client.MongoDatabase; 6 import org.bson.Document; 7 public class ViewIndex { 8 public static void main(String[] args) { 9 // connect to your Atlas cluster 10 String uri = "<connection-string>"; 11 try (MongoClient mongoClient = MongoClients.create(uri)) { 12 // set namespace 13 MongoDatabase database = mongoClient.getDatabase("<database-name>"); 14 MongoCollection<Document> collection = database.getCollection("<collection-name>"); 15 // retrieve indexes 16 try (MongoCursor<Document> resultsCursor = collection.listSearchIndexes().iterator()) { 17 while (resultsCursor.hasNext()) { 18 System.out.println(resultsCursor.next()); 19 } 20 } 21 } 22 } 23 }
以下の値を置き換えて、ファイルを保存します。
<connection-string>
- Atlas接続文字列。 詳しくは、「ドライバーによる接続 」を参照してください。<database-name>
- コレクションを含むデータベースの名前。<collection-name>
- インデックスを検索するコレクションの名前。
Node Driverを通じて Atlas Search インデックスを検索するには、 listSearchIndexes
ヘルパー メソッドを使用します。
例
コレクションのインデックスを返すには、 list-indexes.js
という名前の次のサンプル アプリケーションを使用します。 次の値を指定します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
検索対象の検索インデックスを含むデータベースとコレクション。
特定のインデックスを検索する場合は、インデックス名。 コレクションのすべてのインデックスを返すには、この値を省略します。
注意
listSearchIndexes
コマンドはカーソルを返します。 その結果、 コマンドに一致するインデックスはすぐに返されません。 結果にアクセスするには、 toArray()
メソッドなどのカーソル パラダイムを使用します。 詳細については、「カーソルからデータにアクセスする 」を参照してください。
import { MongoClient } from "mongodb"; // connect to your Atlas deployment const uri = "<connection-string>"; const client = new MongoClient(uri); async function run() { try { const database = client.db("<databaseName>"); const collection = database.collection("<collectionName>"); // run the helper method const result = await collection.listSearchIndexes("<index-name>").toArray(); console.log(result); } finally { await client.close(); } } run().catch(console.dir);
サンプル アプリケーションを実行するには、次のコマンドを使用します。 結果は出力例のようになります。
node list-indexes.js
[ { id: '648b4ad4d697b73bf9d2e5e0', name: 'default', status: 'READY', queryable: true, latestDefinition: { mappings: { dynamic: true } } }, { id: '648b4ad4d697b73bf9d2e5e1', name: 'example-index', status: 'PENDING', queryable: false, latestDefinition: { mappings: { dynamic: false, fields: { text: { type: 'string' } } } } } ]
Python ドライバーを使用して Atlas Search インデックスを取得するには、コレクションでlist_search_indexes()
メソッドを呼び出します。
例
次のコード例を ファイルにコピーします。
次のサンプル アプリケーションでは、コレクションでlist_search_indexes()
メソッドを呼び出します。 このメソッドは、コードが各 Atlas Search インデックスにアクセスして出力するカーソルを返します。
from pymongo.mongo_client import MongoClient def view_index(): # Connect to your Atlas deployment uri = "<connectionString>" client = MongoClient(uri) # Access your database and collection database = client["<databaseName>"] collection = database["<collectionName>"] # Get a list of the collection's search indexes and print them cursor = collection.list_search_indexes() for index in cursor: print(index)
次の値を指定して、ファイルを保存します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
インデックスを取得するデータベースとコレクション。
検索インデックス
Atlas UI の Atlas Search ページには、コレクションの Atlas Search インデックスに関する情報が表示されます。このページには、クラスター上の各インデックスに関する次の詳細が表示されます。
コラム | 説明 |
---|---|
Database | コレクションを含むデータベースの名前。 |
Collection | インデックス作成されたコレクションの名前。 |
Index Name | インデックスの名前。 |
Type | インデックスのタイプ。値は、次のいずれかのタイプのインデックスです。
|
Index Fields | |
Status | インデックスのステータス。詳しくは「Atlas Search インデックスのステータス」を参照してください。 |
Queryable | インデックスを使用してコレクションがクエリできるかどうかを識別するアイコン。値は次のいずれかのアイコンにすることができます。
|
Size | インデックスのサイズ。 |
Documents | クラスタ上のプライマリノードまたは検索ノードでのインデックス構築中および構築後の、コレクション内のドキュメント総数に占めるインデックス作成されたドキュメントのおおよその数と割合。 |
Actions | インデックスに対して実行できるアクション:
|
インデックスは、さまざまな列で並べ替えることができます。デフォルトでは、Atlas はインデックスを最初にデータベース名、次にコレクション名の順にソートします。複数の列でソートするには、 Shift
を押して、インデックスのリストをマルチソートしたい順序で列名をクリックします。Atlas は、ページを離れるときに優先する並べ替え順序を保存しません。
インデックスのステータスの確認
各インデックスについて、Status 列には、クラスターのプライマリノードにおけるインデックスの現在の状態が表示されます。次の表では、インデックスのステータスについて説明します。
ステータス | 説明 |
---|---|
支払い待ち | Atlas によるインデックスの構築は開始されていません。 |
構築 | Atlas はインデックスを構築中、または編集したインデックスを再構築中です。インデックスがこの状態のとき、次の状況が発生します。
|
Ready | インデックスをいつでも使用できます。 |
Stale | 次のいずれかの理由でインデックスが古くなっています。
既存のインデックスをクエリすることはできます。ただし、古いインデックスに対するクエリの結果には古いデータが含まれる場合があります。検索ノードをアップスケールしてディスク容量を増やしたり、既存のインデックスを削除してディスク容量を解放したりできます。または、View status details モーダルウィンドウのエラーを使用して問題のトラブルシューティングを行います。詳しくは、「Atlas Search の問題の修正」を参照してください。 |
失敗 | Atlas によるインデックスの構築は失敗しました。View status details モーダル ウィンドウのエラーを使用して、問題のトラブルシューティングを行います。詳しくは、「Atlas Search の問題の修正」を参照してください。 |
削除 | Atlas はクラスター ノードからインデックスを削除しています。 |
Does not Exist | インデックスのコレクションが存在しないため、インデックスは無効です。このインデックスに対応するコレクションがないため、このインデックスに対してクエリを実行することはできません。Atlas は最終的にインデックスを削除します。 |
ステータスの詳細の表示
Status 列には、クラスターのプライマリノードにおけるインデックスの現在の状態が表示されます。次のいずれかの方法で詳細なステータスを表示できます。
View status details 列のステータスの下にあるStatus リンクをクリックします。
インデックスの名前をクリックし、インデックスの左側のメニューから Status Details を選択します。
このページでは、インデックスに関する以下の詳細を閲覧できます。
クエリを処理するインデックス
このセクションには、クエリを処理するために使用されているインデックスが表示されます。コレクションにこの名前のインデックスのバージョンが 1 つしかない場合は、そのセクションに Index Overview へのリンクがあり、使用されているインデックスのインデックス定義を確認できます。
コレクションに同じ名前のインデックスが他にもある場合、セクションには最新のインデックス定義が表示され、別のタブにコピーできる以前の有効なインデックスも表示されます。
インデックスを更新すると、ノードによって更新の適用速度が異なります。したがって、最新バージョンを使用するノードと、以前のバージョンを使用するノードがある可能性があります。Atlas は、変更がすべてのノードに適用されるまで、インデックスの両方のバージョンを表示します。
無効なインデックス定義でインデックスの更新を試みると、インデックス構築は失敗し、Atlas は以前の有効なインデックス定義のみを表示します。
ノード別のステータス詳細
このセクションには、クラスターの各ノードにおけるインデックスのステータスが表示されます。各ノードのインデックスに関する次の詳細を確認できます。
Shard | シャード名。 |
Node | ノードの情報。 |
Status | シャード内のノード上のインデックスのステータス。 |
Queryable | インデックスがクエリを処理できるかどうかを示すアイコン。 |
Message | インデックスのステータスの理由。 |
Node Type | ノードのタイプ。値は次のいずれかのタイプにできます。
|
Region | ノードのリージョン。 |
Size | ノード上のインデックスのサイズ。 |
Documents | インデックス作成されたドキュメントの数と割合。 |
Actions | ノードのインデックスに対して実行できるアクション。 をクリックし、以下のオプションのいずれかを選択できます。
|
警告
Atlas Search インデックスが既に存在するコレクションをシャーディングする場合、コレクションがシャードに表示され始めるときにクエリのダウンタイムが短時間発生することがあります。また、シャードを Atlas Search インデックスなどのシャーディングされたコレクションに追加する場合、追加されたシャードで最初の同期プロセスが完了するまで、そのコレクションに対する検索クエリは失敗します。詳しくは、「最初の同期プロセス」を参照してください。
検索ノードへの移行
このセクションでは、該当する場合、Atlas Search および Atlas Vector Search インデックスの検索ノードへの進行中の移行のステータスが表示されます。これは、現在検索ノードに移行している場合にのみ表示されます。
検索ノードへのインデックスの移行の進捗状況(ノードごと)の詳細については、Index Status by Search Node セクションの情報バナーにある View Migration Progress リンクをクリックしてください。
Atlas UI には、クラスター上の各インデックスに対して次の列が表示されます。
コラム | 説明 |
---|---|
Database | コレクションを含むデータベースの名前。 |
Collection | インデックス作成されたコレクションの名前。 |
Index Name | インデックスの名前。 |
Index Fields | |
Type | インデックスのタイプ。値は、次のいずれかのタイプのインデックスです。
|
Status | 移行のステータス。詳細については、「 検索ノードへの移行 」を参照してください。 |
Size | インデックスのサイズ。 |
Documents | クラスター上の検索ノードでの移行中および移行後のコレクション内のドキュメントの総数に対するインデックス付きドキュメントの数と割合。 |
ステータス列には、検索ノード上のインデックスのステータスが表示されます。ステータスは、次のいずれかになります。
ステータス | 説明 |
---|---|
構築 | インデックスは現在、検索ノード上に構築されています。新しいインデックスの構築中も、クエリでは既存のインデックスを引き続き使用できます。 |
On Deck | インデックスは検索ノード上に正常に構築されましたが、移行はまだ完了していません。Atlas が検索ノード上のすべてのインデックスを正常に構築した場合にのみ移行が完了することに注意してください。 |
Ready | 検索ノードのインデックスは、クエリで使用する準備が整いました。これは、Atlas が検索ノードへの移行を正常に完了した場合にのみ表示されます。 |
失敗 | インデックスの構築に失敗し、別の検索ノードへの移行が停止しました。クエリでは既存のインデックスを引き続き使用できます。Atlas はインデックスの再構築を試みますが、7 日後にタイムアウトします。 正常に移行するには、 ノードMessage 列またはStatus Details ページ でインデックスのエラー メッセージを確認し、検索ノードでインデックスインデックス構築が失敗する原因となっている問題に対処してください。 |
新しいインデックスが検索ノードに構築されている間も、クエリでは既存のインデックスを引き続き使用できます。検索ノードへの移行は、Atlas が検索ノード上のすべてのインデックスを正常に構築した場合にのみ完了します。その後、クエリは検索ノードのインデックスを使用するように自動的にルーティングされます。