编辑 Atlas Search 索引
您可以更改现有 Atlas Search 索引的 索引定义。您无法对索引重命名;如果需要更改索引名称,则必须创建新索引并删除旧索引。
必需的访问权限
下表列出了每个角色支持的访问模式。
角色 | 操作 | Atlas UI | Atlas API | Atlas Search API | Atlas CLI |
---|---|---|---|---|---|
Project Data Access Read Only 或更高级别的角色 | 用于查看 Atlas Search 分析器和索引。 | ✓ | ✓ | ||
Project Data Access Admin 或更高级别的角色 | 创建和管理 Atlas Search 分析器和索引,并 为您的 API 密钥分配角色。 | ✓ | ✓ | ✓ | ✓ |
✓ | ✓ | ||||
为 API 密钥创建访问列表条目,并从显示在 API 密钥访问列表中的客户端发送请求。 | ✓ | ✓ | |||
使用 Atlas 用户界面或 API 创建、查看、编辑和删除 Atlas Search 索引。 | ✓ | ✓ | ✓ |
编辑 Atlas Search 索引
您可以在 Atlas 用户界面中编辑 Atlas Search 索引,也可以使用mongosh
、Atlas CLI、 API或您首选语言支持的MongoDB 驱动程序以编程方式编辑 Atlas Search 索引。
注意
您可以使用mongosh
命令或驾驶员助手方法来编辑所有AtlasAtlas Search Atlas集群层上的Atlas Search索引。有关支持的驾驶员版本的列表,请参阅MongoDB驱动程序。
您必须至少拥有对包含索引的数据库的 atlasAdmin
角色或 dbAdmin
访问权限。如需了解更多信息,请参阅内置角色或特定权限。
➤ 使用选择语言下拉菜单设置本节中示例的语言。
要通过 API 编辑 Atlas Search 索引,请执行以下操作:
发送 PATCH
请求。
向 search/indexes/
端点发送 PATCH
请求,其中包含要修改的 Atlas 搜索索引的唯一 ID 或名称。
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" } } ] } }'
要了解有关任一端点的语法和参数的更多信息,请参阅按名称更新一个和按 ID 更新一个。
要使用 Atlas CLI 更新集群的搜索索引,请运行以下命令:
atlas clusters search indexes update <indexId> [options]
要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 Atlas 集群搜索索引更新。
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未出现,请单击侧边栏中的 Clusters(部署)。
会显示集群页面。
转到集群的 Atlas Search 页面。
您可以从侧边栏、 Data Explorer 或集群详细信息页面转到 Atlas Search 页面。
在侧边栏中,单击 Services 标题下的 Atlas Search。
从 Select data source 下拉菜单中选择您的集群并单击 Go to Atlas Search。
将显示 Atlas Search 页面。
单击集群的对应 Browse Collections 按钮。
展开数据库并选择集合。
单击该集合的 Search Indexes 标签页。
将显示 Atlas Search 页面。
单击集群的名称。
单击 Atlas Search 标签页。
将显示 Atlas Search 页面。
检查当前配置设置,并根据需要进行编辑。
检查以下索引配置设置:
字段名称 | 说明 | 必要性 |
---|---|---|
Index Analyzer | Optional | |
Query Analyzer | Optional | |
Dynamic Mapping | 指定字段的动态或静态映射。要禁用动态映射,请将 对应于 | 必需 |
检查以下高级配置设置:
字段名称 | 说明 | 必要性 |
---|---|---|
Field Mappings | 如果 Index Configurations 部分中的 Dynamic Mapping 处于禁用状态,则为必填项。 仅建议高级用户定义自己的字段映射。 指定要编制索引的字段。要添加字段,必须执行以下操作:
您可以按任意顺序定义 Atlas Search 索引定义中的字段。 对应于 | 可选的 |
Stored Source Fields | 指定要在 Atlas Search 上存储的字段。您可以选择以下选项之一:
要了解有关存储字段的更多信息,请参阅在 Atlas Search 索引中定义存储的源字段。 对应于 | Optional |
Synonyms Mappings | 指定要在索引中使用的同义词映射。要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射。 要添加同义词映射,您必须为每个同义词指定以下设置:
对应于 | 可选。 |
检查以下索引配置设置:
字段名称 | 说明 | 必要性 |
---|---|---|
analyzer | Optional | |
searchAnalyzer | Optional | |
mappings.dynamic | 指定字段的动态或静态映射。要禁用动态映射,请将 | 必需 |
检查以下高级配置设置:
字段名称 | 说明 | 必要性 |
---|---|---|
mappings.fields | 如果 仅建议高级用户定义自己的字段映射。 指定要编制索引的字段。要了解更多信息,请参阅定义字段映射。 您可以按任意顺序定义 Atlas Search 索引定义中的字段。 | 可选的 |
storedSource | 指定要在 Atlas Search 上存储的文档中的字段。值可以是以下值之一:
如果省略,则默认值为
您可以在 Atlas Search 上存储所有受支持的数据类型的字段。要了解有关语法和字段的更多信息,请参阅 在 Atlas Search 索引中定义存储源字段。 | Optional |
synonyms | 指定要在索引中使用的同义词映射。要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射。 您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 ( | Optional |
要详细了解这些索引定义设置,请参阅查看 Atlas Search 索引语法。
要通过mongosh
编辑 Atlas Search 索引,请使用db.collection.updateSearchIndex()
方法。
该命令采用以下语法。 指定要编辑的索引名称,并定义新的索引定义。 此定义将替换索引的现有定义。 要了解更多信息,请参阅查看 Atlas Search 搜索索引语法。
db.<collection>.updateSearchIndex( "<index-name>", /* updated search index definition */ )
例子
以下命令会更新collection中名为default
movies
的搜索索引以使用 静态映射:
db.movies.updateSearchIndex( "default", { "mappings": { "dynamic": false, "fields": { "<field-name>": { "type": "<field-type>" } } } )
注意
db.collection.updateSearchIndex()
命令不返回输出。 您可以使用 Atlas 用户界面查看索引状态。
要使用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 索引的更多信息,请参阅过程。
要通过节点驱动程序编辑 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 搜索索引,请在您的集合中调用 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 索引语法。
注意
在建立新索引时,不同节点的更新速度可能不同。在此期间,您可能会遇到混合查询结果,既反映新的索引定义,也反映以前的索引定义。您可以在索引状态详细信息页面中查看正在提供查询的索引。