Atlas Search インデックスの編集
既存の Atlas Search インデックスのインデックス定義を変更できます。 インデックスの名前は変更できません。インデックスの名前を変更する必要がある場合は、新しいインデックスを作成し、古いインデックスを削除する必要があります。
必要なアクセス権
次の表は、各ロールがサポートするアクセス モードを示しています。
ロール | アクション | Atlas UI | Atlas API | Atlas Search API | Atlas CLI |
---|---|---|---|---|---|
| Atlas Search アナライザーとインデックスを表示します。 | ✓ | ✓ | ||
| Atlas Search アナライザとインデックスを作成および管理し、 により API キーにロールが割り当てられます。 | ✓ | ✓ | ✓ | ✓ |
| ✓ | ✓ | |||
API キーのアクセス リスト エントリを作成し、API キーのアクセス リストに表示されるクライアントからのリクエストを送信します。 | ✓ | ✓ | |||
Atlas UI または API を使用して Atlas Search インデックスを作成、表示、編集、削除します。 | ✓ | ✓ | ✓ |
Atlas Search インデックスの編集
Atlas Search インデックスは、Atlas UI または、 mongosh
、Atlas CLI、 API 、または希望言語でサポートされているMongoDB ドライバーを使用して、プログラムによって編集できます。
注意
mongosh
コマンドまたはドライバーヘルパーメソッドを使用して、すべての Atlas クラスター階層の Atlas Search インデックスを編集できます。サポートされているドライバー バージョンのリストについては、「 MongoDBドライバー 」を参照してください。
インデックスを含むデータベースに対して、少なくとも atlasAdmin
ロールまたは dbAdmin
アクセス権が必要です。詳しくは、「組み込みロール」または「特定の権限」を参照してください。
➤ [言語の選択]ドロップダウン メニューを使用して、このセクション内の例の言語を設定します。
APIを通じて Atlas Search インデックスを編集するには、次の手順に従います。
PATCH
リクエストを送信します。
変更する Atlas Search インデックスの一意の ID または名前を指定して、 PATCH
リクエストをsearch/indexes/
エンドポイントに送信します。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --include \ --request PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId}" \ --data ' { "definition": { "analyzer": "lucene.<analyzer>", "analyzers": [ { "charFilters": [ ... ], "name": "string", "tokenFilters": [ ... ], "tokenizer": { ... } } ], "mappings": { "dynamic": true | false, "fields": { "property1": {}, ... } }, "searchAnalyzer": "lucene.<analyzer>", "storedSource": { "include | exclude": [...] }, "synonyms": [ { "analyzer": "lucene.<analyzer>", "name": "string", "source": { "collection": "string" } } ] } }'
どちらのエンドポイントの構文とパラメータの詳細についても、「名前を使用して1 つの更新 」および「 ID を使用して 1 つの更新 」を参照してください。
Atlas CLI を使用してクラスターの検索インデックスを更新するには、次のコマンドを実行します。
atlas clusters search indexes update <indexId> [options]
コマンド構文とパラメーターについて詳しくは、「Atlas クラスター検索インデックス更新」の Atlas CLI ドキュメントを参照してください。
Atlas Atlasで、プロジェクトの {0 ページにGoします。GoClusters
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
GoAtlas Searchクラスターの ページに します。
GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。
サイドバーで、 Services見出しの下のAtlas Searchをクリックします。
[ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。
Atlas Searchページが表示されます。
クラスターの [Browse Collections] ボタンをクリックします。
データベースを展開し、コレクションを選択します。
コレクションのSearch Indexesタブをクリックします。
Atlas Searchページが表示されます。
クラスタの名前をクリックします。
[Atlas Search] タブをクリックします。
Atlas Searchページが表示されます。
現在の構成設定を確認し、必要に応じて編集します。
次のインデックス構成設定を確認します。
フィールド名 | 説明 | 必要性 |
---|---|---|
Index Analyzer | 任意 | |
Query Analyzer | 任意 | |
Dynamic Mapping | フィールドの動的マッピングまたは静的マッピングを指定します。動的マッピングを無効にするには、
| 必須 |
次の詳細構成設定を確認します。
フィールド名 | 説明 | 必要性 |
---|---|---|
Field Mappings | Index Configurations セクションの Dynamic Mapping が無効になっている場合は必須です。 独自のフィールド マッピングを定義することは、上級ユーザーのみにおすすめします。 インデックスを作成するフィールドを指定します。フィールドを追加するには、次の操作を行う必要があります。
Atlas Search インデックス定義では、任意の順序でフィールドを定義できます。
| 条件付き |
Stored Source Fields | Atlas Search に保存するフィールドを指定します。次のいずれかを選択できます。
フィールドの保存の詳細については、「Atlas Search インデックスに保存されたソース フィールドの定義」を参照してください。
| 任意 |
Synonyms Mappings | インデックスで使用するシノニム マッピングを指定します。詳しくは、「Atlas Searchインデックスでのシノニム マッピングの定義」を参照してください。 シノニム マッピングを追加するには、シノニムごとに次の設定を指定する必要があります。
| 任意。 |
Index Partitions | フィールドオブジェクトが 2.1 00 億を超える場合に使用するパーティションの数。
重要
| 任意。 |
次のインデックス構成設定を確認します。
フィールド名 | 説明 | 必要性 |
---|---|---|
| 任意 | |
| 任意 | |
| フィールドの動的マッピングまたは静的マッピングを指定します。動的マッピングを無効にするには、 | 必須 |
次の詳細構成設定を確認します。
フィールド名 | 説明 | 必要性 |
---|---|---|
|
独自のフィールド マッピングを定義することは、上級ユーザーのみにおすすめします。 インデックスを作成するフィールドを指定します。詳しくは「フィールドマッピングの定義」を参照してください。 Atlas Search インデックス定義では、任意の順序でフィールドを定義できます。 | 条件付き |
| Atlas Search にストアするドキュメント内のフィールドを指定します。値は次のいずれかになります。
省略した場合、デフォルトは
サポートされているすべてのデータ型のフィールドを Atlas Search に保存できます。 構文とフィールドの詳細については、「 Atlas Search インデックスに保存されているソース フィールドの定義 」を参照してください。 | 任意 |
| インデックスで使用するシノニム マッピングを指定します。詳しくは、「Atlas Searchインデックスでのシノニム マッピングの定義」を参照してください。 シノニム(同意語)マッピング を使用して、同じアナライザで分析されたフィールドのみをクエリできます。 デフォルトでは、Atlas Search は標準アナライザ( | 任意 |
| フィールドオブジェクトが 2.1 00 億を超える場合に使用するパーティションの数。 ... include::/includes/fact-num partitions-preview.rst | 任意。 |
これらのインデックス定義設定について詳しくは、「Atlas Search インデックス構文の確認」を参照してください。
mongosh
を通じて Atlas Search インデックスを編集するには、 db.collection.updateSearchIndex()
メソッドを使用します。
このコマンドの構文は、次のとおりです。編集するインデックスの名前を指定し、新しいインデックス定義を定義します。この定義は、インデックスの既存の定義を置き換えます。詳しくは「 Atlas Search インデックス構文の確認」を参照してください。
db.<collection>.updateSearchIndex( "<index-name>", /* updated search index definition */ )
例
次のコマンドは、静的マッピングを使用するように、 movies
コレクションからdefault
という名前の検索インデックスを更新します。
db.movies.updateSearchIndex( "default", { "mappings": { "dynamic": false, "fields": { "<field-name>": { "type": "<field-type>" } } } )
注意
db.collection.updateSearchIndex()
コマンドは出力を返しません。 Atlas UI を使用してインデックスのステータスを表示できます。
C ドライバーを使用して Atlas Search インデックスを編集するには、アプリケーション内の更新されたインデックス情報を指定し、 mongoc_collection_command_simple()
メソッドを呼び出します。
例
次のコード例を ファイルにコピーします。
次のサンプル アプリケーションでは、 updateSearchIndex
コマンド、更新されたインデックス定義、既存のインデックス名を指定します。 次に、アプリケーションはコマンドと更新されたインデックス情報をBSONに変換し、この情報をmongoc_collection_command_simple()
メソッドに渡して検索インデックスを編集します。
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; 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>"); // Specify the command and the updated index definition const char *cmd_str = BSON_STR({ "updateSearchIndex" : "<collectionName>", "definition" : {"mappings" : {"dynamic" : true}}, "name" : "<indexName>" }); // Convert your command to BSON if (!bson_init_from_json(&cmd, cmd_str, -1, &error)) { fprintf(stderr, "Failed to parse command: %s\n", error.message); ok = false; goto cleanup; } // Update the Atlas search index by running the command if (!mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { fprintf(stderr, "Failed to run updateSearchIndex: %s\n", error.message); ok = false; goto cleanup; } printf ("Index updated!\n"); cleanup: mongoc_collection_destroy (collection); mongoc_database_destroy (database); mongoc_client_destroy (client); bson_destroy (&cmd); mongoc_cleanup (); return ok ? EXIT_SUCCESS : EXIT_FAILURE; }
次の値を指定して、ファイルを保存します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
インデックスを更新するデータベースとコレクション。
更新するインデックスの名前。
検索インデックスを再定義するフィールド。詳しくは「Atlas Search インデックス構文の確認」を参照してください。
C++ ドライバーを使用して Atlas Search インデックスを編集するには、検索インデックス ビューでupdate_one()
メソッドを呼び出します。
例
次のコード例を ファイルにコピーします。
次のサンプルアプリケーションでは、検索インデックスビューをインスタンス化し、新しいAtlas Search インデックス定義を指定します。 次に、アプリケーションはこの定義と既存のインデックス名をupdate_one()
メソッドに渡します。これにより、新しい定義ドキュメントを反映するように既存のインデックスがアップデートされます。
using namespace mongocxx; using bsoncxx::builder::basic::make_document; 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 the indexes in your collection auto siv = collection.search_indexes(); // Specify a new definiton and update your search index auto newDefinition = make_document(kvp("mappings", make_document(kvp("dynamic", true)))); siv.update_one("<indexName>", newDefinition.view()); } catch (const std::exception& e) { std::cout<< "Exception: " << e.what() << std::endl; } return 0; }
次の値を指定して、ファイルを保存します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
インデックスを更新するデータベースとコレクション。
更新するインデックスの名前。
検索インデックスを再定義するフィールド。詳しくは「Atlas Search インデックス構文の確認」を参照してください。
.NET/C# ドライバー を使用して Atlas Search インデックスを編集するには、 メソッドまたはUpdate()
UpdateAsync()
メソッドを使用します。
例
次のサンプルアプリケーションでは、既存のインデックス定義をアップデートします。 次の値を指定します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
検索インデックスを作成したデータベースとコレクション。
既存の定義を置き換える新しいインデックス定義。この例では、静的マッピングを使用するようにインデックスを更新しています。この定義は、特定のインデックス ニーズに合わせて変更できます。詳しくは「Atlas Search インデックス構文の確認」を参照してください。
更新するインデックスの名前。
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>"); // define your Atlas Search index var index = new BsonDocument { // updated search index definition { "mappings", new BsonDocument { { "dynamic", false }, { "fields", new BsonDocument { { "<field-name>", new BsonDocument { { "type", "<field-type>" } } } } } } } }; collection.SearchIndexes.Update("<index-name>", index);
サンプル アプリケーションを実行するには、csharp-update-index
という名前の新しい .NET コンソール プロジェクトを作成し、前のサンプル コードを Program.cs
ファイルにコピーします。次に、以下のコマンドを使ってプロジェクトを実行します。
dotnet run csharp-update-index.csproj
注意
Update()
メソッドは出力を返しません。 Atlas UI を使用してインデックスのステータスを表示できます。
Java ドライバーを使用してコレクションの Atlas Search インデックスを編集するには、検索インデックス設定を変更するドキュメントを作成し、そのドキュメントをupdateSearchIndex()
メソッドに渡します。 Java ドライバーv 4.11.0以上が必要です。
次のコード例を ファイルにコピーします。
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 import org.bson.Document; 6 7 public class EditIndex { 8 public static void main(String[] args) { 9 // connect to your Atlas cluster 10 String uri = "<connection-string>"; 11 12 try (MongoClient mongoClient = MongoClients.create(uri)) { 13 // set namespace 14 MongoDatabase database = mongoClient.getDatabase("<document-name>"); 15 MongoCollection<Document> collection = database.getCollection("<collection-name>"); 16 // define field mappings 17 Document index = new Document("analyzer", "<analyzer-name>").append( 18 "mappings", new Document("dynamic", <true|false>) 19 .append("fields", new Document("<field-name>", 20 new Document("type", "<field-type>")))); 21 // run the updateSearchIndex() method 22 collection.updateSearchIndex("<index-name>", index); 23 } 24 } 25 }
コード内の次の値を置き換え、ファイルを保存します。
<connection-string>
- Atlas接続文字列。 詳しくは、「ドライバーによる接続 」を参照してください。注意
接続文字列には、 writeConcern設定を含めないでください。
<database-name>
- コレクションを含むデータベースの名前。<collection-name>
- インデックスを検索するコレクションの名前。<analyzer-name>
-アナライザの名前。dynamic
- フィールドを自動的にインデックス化するかどうかを示すフラグ。<field-name>
- インデックスを作成するフィールドの名前。<field-type>
- フィールドのデータ型。<index-name>
- インデックスの名前。
ファイルをコンパイルして実行します。
javac EditIndex.java java EditIndex
updateSearchIndex()
メソッドは非同期で実行されます。listSearchIndexes()
メソッドを使用して、変更がインデックスに適用されたかどうかを確認します。Atlas Search インデックスの取得の詳細については、「手順」を参照してください。
Node Driverを通じて Atlas Search インデックスを編集するには、 updateSearchIndex
ヘルパー メソッドを使用します。
例
既存のインデックス定義を更新するには、 update-index.js
という名前の次のサンプル アプリケーションを使用します。 次の値を指定します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
検索インデックスを作成したデータベースとコレクション。
既存の定義を置き換える新しいインデックス定義。この例では、静的マッピングを使用するようにインデックスを更新しています。この定義は、特定のインデックス ニーズに合わせて変更できます。詳しくは「Atlas Search インデックス構文の確認」を参照してください。
更新するインデックスの名前。
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>"); // define your Atlas Search index const index = { /* updated search index definition */ "mappings": { "dynamic": false, "fields": { "<field-name>": { "type": "<field-type>" } } } } // run the helper method await collection.updateSearchIndex("<index-name>", index); } finally { await client.close(); } } run().catch(console.dir);
サンプル アプリケーションを実行するには、次のコマンドを使用します。
node update-index.js
注意
updateSearchIndex
メソッドは出力を返しません。 Atlas UI を使用してインデックスのステータスを表示できます。
Python ドライバーを使用して Atlas Search インデックスを更新するには、コレクションでupdate_search_index()
メソッドを呼び出します。
例
次のコード例を ファイルにコピーします。
次のサンプル アプリケーションでは、新しい Atlas Search インデックス定義を指定します。 次に、アプリケーションはこの定義と既存のインデックス名をupdate_search_index()
メソッドに渡します。これにより、新しい定義ドキュメントを反映するように既存のインデックスがアップデートされます。
from pymongo.mongo_client import MongoClient def edit_index(): # Connect to your Atlas deployment uri = "<connectionString>" client = MongoClient(uri) # Access your database and collection database = client["<databaseName>"] collection = database["<collectionName>"] # Specify a new index definition definition = { "mappings": { "dynamic": True }, } # Update your search index collection.update_search_index("<indexName>", definition)
次の値を指定して、ファイルを保存します。
Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。
インデックスを更新するデータベースとコレクション。
更新するインデックスの名前。
検索インデックスを再定義するフィールド。詳しくは「Atlas Search インデックス構文の確認」を参照してください。
注意
新しいインデックスが作成されている間、さまざまなノードがそれぞれ異なる速度で更新されることがあります。この間、新しいインデックス定義と以前のインデックス定義の両方を反映して、クエリの結果が混ざることがあります。クエリを処理しているインデックスは、インデックスのステータス詳細ページで見ることができます。