Docs Menu
Docs Home
/
MongoDB Atlas
/ /

Atlas Search インデックスの編集

項目一覧

  • 必要なアクセス権
  • Atlas Search インデックスの編集

既存の Atlas Search インデックスのインデックス定義を変更できます。 インデックスの名前は変更できません。インデックスの名前を変更する必要がある場合は、新しいインデックスを作成し、古いインデックスを削除する必要があります。

次の表は、各ロールがサポートするアクセス モードを示しています。

ロール
アクション
Atlas UI
Atlas API
Atlas Search API
Atlas CLI
Atlas Search アナライザーとインデックスを表示します。
Project Data Access Admin またはそれ以上のロール
Atlas Search アナライザとインデックスを作成および管理し、 により API キーにロールが割り当てられます。
Project Owner ロール
API キーのアクセス リスト エントリを作成し、API キーのアクセス リストに表示されるクライアントからのリクエストを送信します。
Atlas UI または API を使用して Atlas Search インデックスを作成、表示、編集、削除します。

Atlas Search インデックスは、Atlas UI または、 mongosh 、Atlas CLI、 API 、または希望言語でサポートされているMongoDB ドライバーを使用して、プログラムによって編集できます。

注意

mongoshコマンドまたはドライバーヘルパーメソッドを使用して、すべての Atlas クラスター階層の Atlas Search インデックスを編集できます。サポートされているドライバー バージョンのリストについては、「 MongoDBドライバー 」を参照してください。

インデックスを含むデータベースに対して、少なくとも atlasAdmin ロールまたは dbAdmin アクセス権が必要です。詳しくは、「組み込みロール」または「特定の権限」を参照してください。


➤ [言語の選択]ドロップダウン メニューを使用して、このセクション内の例の言語を設定します。


APIを通じて Atlas Search インデックスを編集するには、次の手順に従います。

1

変更する 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 つの更新 」を参照してください。

2

Atlas CLI を使用してクラスターの検索インデックスを更新するには、次のコマンドを実行します。

atlas clusters search indexes update <indexId> [options]

コマンド構文とパラメーターについて詳しくは、「Atlas クラスター検索インデックス更新」の Atlas CLI ドキュメントを参照してください。

Tip

参照: 関連リンク

1
  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. まだ表示されていない場合は、サイドバーの Clusters をクリックしてください。

    [ Clusters (クラスター) ] ページが表示されます。

2

GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。

  1. サイドバーで、 Services見出しの下のAtlas Searchをクリックします。

  2. [ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。

    Atlas Searchページが表示されます。

  1. クラスターの [Browse Collections] ボタンをクリックします。

  2. データベースを展開し、コレクションを選択します。

  3. コレクションのSearch Indexesタブをクリックします。

    Atlas Searchページが表示されます。

  1. クラスタの名前をクリックします。

  2. [Atlas Search] タブをクリックします。

    Atlas Searchページが表示されます。

3
  • Edit with Visual Editor ガイドを利用したエクスペリエンスが必要です。

  • Edit with JSON Editor 未加工のインデックス定義を編集する。

4

次のインデックス構成設定を確認します。

フィールド名
説明
必要性
Index Analyzer

コレクションのデータのインデックス作成に使用するアナライザを指定します。デフォルトでは、Atlas Search は標準アナライザ("lucene.standard")を使用します。

analyzer JSON 設定に対応します。

任意
Query Analyzer

テキストを検索する前にクエリ テキストに適用するアナライザを指定します。このフィールドを省略した場合、インデックスはデフォルトで以下の順序でアナライザを継承します。

  1. このフィールドのanalyzerオプション(指定されている場合)。

  2. インデックスsearchAnalyzerオプション(指定されている場合)。

  3. インデックスanalyzerオプション(指定されている場合)。

  4. lucene.standardアナライザ。

searchAnalyzer JSON 設定に対応します。

任意
Dynamic Mapping

フィールドの動的マッピングまたは静的マッピングを指定します。動的マッピングを無効にするには、"dynamic":Off に設定します。デフォルトでは、動的マッピングは有効になっています。動的マッピングを無効にする場合は、インデックスを作成するフィールドを指定する必要があります。動的マッピングと静的マッピングについて詳しくは、「Atlas Searchインデックス構文の確認」を参照してください。

mappings.dynamic JSON 設定に対応します。

必須

次の詳細構成設定を確認します。

フィールド名
説明
必要性
Field Mappings

Index Configurations セクションの Dynamic Mapping が無効になっている場合は必須です。

独自のフィールド マッピングを定義することは、上級ユーザーのみにおすすめします。

インデックスを作成するフィールドを指定します。フィールドを追加するには、次の操作を行う必要があります。

  1. Add FieldをクリックするとAdd Field Mappingウィンドウが開きます。

  2. フィールドに関する次の情報を指定します。

    • Field name - インデックスを作成するフィールドの名前。

    • Data Type Configuration - フィールドのデータ型。サポートされているデータ型とそのオプションについて詳しくは、「データ型」を参照してください。

    • Enable Dynamic Mapping - ドキュメントおよび埋め込みドキュメント型のフィールドに使用する静的または動的マッピング。動的マッピングを無効にすると、フィールドのデータは自動的にインデックス化されません。

  3. [Add] をクリックしてフィールドを追加します。

    オプションで、Actions 列のフィールドの省略記号(...)アイコンをクリックして、次の操作を実行できます。

    • [Edit] をクリックしてフィールドの設定を変更します。

    • [Add Data Type] をクリックして、フィールドに追加のデータ型を設定します。

    • [Delete] をクリックして、インデックスからフィールドを削除します。

Atlas Search インデックス定義では、任意の順序でフィールドを定義できます。

mappings.fields JSON 設定に対応します。

条件付き
Stored Source Fields

Atlas Search に保存するフィールドを指定します。次のいずれかを選択できます。

  • None -(デフォルト)選択すると、Atlas Search はフィールドをストアしません。

  • All - 選択すると、Atlas Search はドキュメント内のすべてのフィールドをストアします。

  • Specified - 選択すると、Atlas Search は_id と指定したフィールドをストアします。フィールドを指定するには、次の手順を実行します。

    1. Field Name 列のドロップダウンから、Atlas Search に保存するフィールドを選択します。

    2. [Add] をクリックして、保存するフィールドのリストにフィールドを追加します。

    3. [Add Field] をクリックして、リストに追加するフィールドごとに手順 ab を繰り返します。

    4. (任意)次のいずれかをクリックします。

      • Edit 別のフィールドを選択します。

      • Delete 保存するフィールドのリストからフィールドを削除します。

  • All Except Specified - 選択すると、Atlas Search は特定のフィールドを Atlas Search のストレージから除外します。

    1. Field Name 列のドロップダウンから、除外するフィールドを選択します。

    2. [Add] をクリックして、除外するフィールドのリストにフィールドを追加します。

    3. [Add Field] をクリックして、リストから除外するフィールドごとに手順 ab を繰り返します。

    4. (任意)次のいずれかをクリックします。

      • Edit 別のフィールドを選択します。

      • Delete 除外するフィールドのリストからフィールドを削除します。

フィールドの保存の詳細については、「Atlas Search インデックスに保存されたソース フィールドの定義」を参照してください。

storedSource JSON 設定に対応します。

任意
Synonyms Mappings

インデックスで使用するシノニム マッピングを指定します。詳しくは、「Atlas Searchインデックスでのシノニム マッピングの定義」を参照してください。

シノニム マッピングを追加するには、シノニムごとに次の設定を指定する必要があります。

synonyms JSON 設定に対応します。

任意。

次のインデックス構成設定を確認します。

フィールド名
説明
必要性
analyzer

コレクションのデータのインデックス作成に使用するアナライザを指定します。デフォルトでは、Atlas Search は標準アナライザ("lucene.standard")を使用します。

任意
searchAnalyzer

テキストを検索する前にクエリ テキストに適用するアナライザを指定します。このフィールドを省略した場合、インデックスはデフォルトで以下の順序でアナライザを継承します。

  1. このフィールドのanalyzerオプション(指定されている場合)。

  2. インデックスsearchAnalyzerオプション(指定されている場合)。

  3. インデックスanalyzerオプション(指定されている場合)。

  4. lucene.standardアナライザ。

任意
mappings.dynamic

フィールドの動的マッピングまたは静的マッピングを指定します。動的マッピングを無効にするには、"dynamic":false に設定します。デフォルトでは、動的マッピングは有効になっています。動的マッピングを無効にする場合は、インデックスを作成するフィールドを指定する必要があります。動的マッピングと静的マッピングについて詳しくは、「Atlas Searchインデックス構文の確認」を参照してください。

必須

次の詳細構成設定を確認します。

フィールド名
説明
必要性
mappings.fields

mappings.dynamicfalseの場合は必須です。

独自のフィールド マッピングを定義することは、上級ユーザーのみにおすすめします。

インデックスを作成するフィールドを指定します。詳しくは「フィールドマッピングの定義」を参照してください。

Atlas Search インデックス定義では、任意の順序でフィールドを定義できます。

条件付き
storedSource

Atlas Search にストアするドキュメント内のフィールドを指定します。値は次のいずれかになります。

  • true: すべてのフィールドを保存

  • false、フィールドを保存しない場合

  • ストレージからincludeまたはexcludeにフィールドを指定するオブジェクト

省略した場合、デフォルトは false になります。

storedSource 次のいずれかのバージョンを実行している Atlas クラスターでのみ使用できます。

  • MongoDB 5.0.6+

  • MongoDB 6.0+

  • MongoDB 7.0+

サポートされているすべてのデータ型のフィールドを Atlas Search に保存できます。 構文とフィールドの詳細については、「 Atlas Search インデックスに保存されているソース フィールドの定義 」を参照してください。

任意
synonyms

インデックスで使用するシノニム マッピングを指定します。詳しくは、「Atlas Searchインデックスでのシノニム マッピングの定義」を参照してください。

シノニム(同意語)マッピング を使用して、同じアナライザで分析されたフィールドのみをクエリできます。 デフォルトでは、Atlas Search は標準アナライザ( "lucene.standard" )を使用します。

任意

これらのインデックス定義設定について詳しくは、「Atlas Search インデックス構文の確認」を参照してください。

5

インデックスのステータスがActiveからBuildingに変わります。 この状態では、更新されたインデックスが使用可能になるまで、Atlas Search が古いインデックスを削除しないため、古いインデックスを使用し続けることができます。 ステータスがActiveに戻ったら、変更されたインデックスは使用可能になります。

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()メソッドを呼び出します。

1
2

次のサンプル アプリケーションでは、 updateSearchIndexコマンド、更新されたインデックス定義、既存のインデックス名を指定します。 次に、アプリケーションはコマンドと更新されたインデックス情報をBSONに変換し、この情報をmongoc_collection_command_simple()メソッドに渡して検索インデックスを編集します。

#include <mongoc/mongoc.h>
#include <stdlib.h>
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;
}
3
4
gcc -o edit-index edit-index.c $(pkg-config --libs --cflags libmongoc-1.0)
./edit-index

C++ ドライバーを使用して Atlas Search インデックスを編集するには、検索インデックス ビューでupdate_one()メソッドを呼び出します。

1
2

次のサンプルアプリケーションでは、検索インデックスビューをインスタンス化し、新しいAtlas Search インデックス定義を指定します。 次に、アプリケーションはこの定義と既存のインデックス名をupdate_one()メソッドに渡します。これにより、新しい定義ドキュメントを反映するように既存のインデックスがアップデートされます。

#include <bsoncxx/builder/basic/document.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/search_index_view.hpp>
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;
}
3
4
g++ -o edit-index edit-index.cpp $(pkg-config --cflags --libs libmongocxx)
./edit-index

.NET/C# ドライバー を使用して Atlas Search インデックスを編集するには、 メソッドまたはUpdate() UpdateAsync()メソッドを使用します。

次のサンプルアプリケーションでは、既存のインデックス定義をアップデートします。 次の値を指定します。

  • Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。

  • 検索インデックスを作成したデータベースとコレクション。

  • 既存の定義を置き換える新しいインデックス定義。この例では、静的マッピングを使用するようにインデックスを更新しています。この定義は、特定のインデックス ニーズに合わせて変更できます。詳しくは「Atlas Search インデックス構文の確認」を参照してください。

  • 更新するインデックスの名前。

Program.cs
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
2
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6
7public 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}
3
  • <connection-string> - Atlas接続文字列。 詳しくは、「ドライバーによる接続 」を参照してください。

    注意

    接続文字列には、 writeConcern設定を含めないでください。

  • <database-name> - コレクションを含むデータベースの名前。

  • <collection-name> - インデックスを検索するコレクションの名前。

  • <analyzer-name> -アナライザの名前。

  • dynamic - フィールドを自動的にインデックス化するかどうかを示すフラグ。

  • <field-name> - インデックスを作成するフィールドの名前。

  • <field-type> - フィールドのデータ型。

  • <index-name> - インデックスの名前。

4
javac EditIndex.java
java EditIndex

updateSearchIndex() メソッドは非同期で実行されます。listSearchIndexes() メソッドを使用して、変更がインデックスに適用されたかどうかを確認します。Atlas Search インデックスの取得の詳細については、「手順」を参照してください。

Tip

以下も参照してください。

Node Driverを通じて Atlas Search インデックスを編集するには、 updateSearchIndexヘルパー メソッドを使用します。

既存のインデックス定義を更新するには、 update-index.jsという名前の次のサンプル アプリケーションを使用します。 次の値を指定します。

  • Atlas 接続文字列。詳しくは、「ドライバーによる接続」を参照してください。

  • 検索インデックスを作成したデータベースとコレクション。

  • 既存の定義を置き換える新しいインデックス定義。この例では、静的マッピングを使用するようにインデックスを更新しています。この定義は、特定のインデックス ニーズに合わせて変更できます。詳しくは「Atlas Search インデックス構文の確認」を参照してください。

  • 更新するインデックスの名前。

update-index.js
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()メソッドを呼び出します。

1
2

次のサンプル アプリケーションでは、新しい 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)
3
4
python edit-index.py

注意

新しいインデックスが作成されている間、さまざまなノードがそれぞれ異なる速度で更新されることがあります。この間、新しいインデックス定義と以前のインデックス定義の両方を反映して、クエリの結果が混ざることがあります。クエリを処理しているインデックスは、インデックスのステータス詳細ページで見ることができます。

戻る

ビュー