编辑 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
命令或驾驶员助手方法来编辑所有Atlas 集群层上的Atlas Search索引。
您必须至少拥有对包含索引的数据库的 atlasAdmin
角色或 dbAdmin
访问权限。如需了解更多信息,请参阅内置角色或特定权限。
➤ 使用选择语言下拉菜单设置本节中示例的语言。
要通过API编辑 Atlas Search 索引,请执行以下操作:
发送PATCH
请求。
向search/indexes/
端点发送一个PATCH
请求,其中包含您要修改的 Atlas Search 索引的唯一 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集群搜索索引更新的 Atlas CLI 文档。
在 AtlasClusters 中,转到项目的 页面。
如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。
此时会显示“集群”页面。
转到集群的 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 用户界面查看索引状态。
要使用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 用户界面查看索引状态。
要使用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 索引语法。
注意
在构建新索引时,不同节点的更新速度可能不同。在此期间,您可能会遇到混合查询结果,反映了新的索引定义和以前的索引定义。您可以在索引索引详细信息页面查看正在为查询提供服务的索引。