Docs 菜单
Docs 主页
/
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 密钥。
为 API 密钥创建访问列表条目,并从 API 密钥访问列表中显示的客户端发送请求。
使用 Atlas 用户界面或 API 创建、查看、编辑和删除 Atlas Search 索引。

您可以在 Atlas 用户界面中编辑 Atlas Search 索引,也可以使用mongosh 、Atlas CLI、 API或您首选语言支持的MongoDB 驱动程序以编程方式编辑 Atlas Search 索引。

注意

您可以使用mongosh命令或驾驶员助手方法来编辑所有Atlas 集群层上的Atlas Search索引。

您必须至少拥有对包含索引的数据库的 atlasAdmin 角色或 dbAdmin 访问权限。如需了解更多信息,请参阅内置角色特定权限


➤ 使用选择语言下拉菜单设置本节中示例的语言。


要通过API编辑 Atlas Search 索引,请执行以下操作:

1

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 更新。

2

要使用 Atlas CLI 更新集群的搜索索引,请运行以下命令:

atlas clusters search indexes update <indexId> [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas集群搜索索引更新的 Atlas CLI 文档。

提示

请参阅:相关链接

1
  1. 如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。

  2. 如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。

  3. 如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。

    此时会显示“集群”页面。

2

您可以从侧边栏、 Data Explorer或集群详细信息页面转到 Atlas Search 页面。

  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 设置。

Optional
Query Analyzer

指定在搜索查询文本之前要应用到文本的分析器。如果省略此字段,则索引默认按以下顺序继承分析器:

  1. 该字段的 analyzer 选项(如果已指定)。

  2. 索引searchAnalyzer 选项(如果指定)。

  3. 索引analyzer 选项(如果指定)。

  4. lucene.standard 分析器。

对应于 searchAnalyzer JSON 设置。

Optional
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 设置。

Optional
Synonyms Mappings

指定要在索引中使用的同义词映射。要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射

要添加同义词映射,您必须为每个同义词指定以下设置:

  • Synonym mapping name - 此标签用于标识查询时要引用的同义词映射。必须指定一个唯一值。不能指定空字符串值。

  • Synonym source collection — 此标签用于标识与 Atlas Search 索引位于同一数据库中的 MongoDB 集合。此集合中的文档使用同义词源集合文档中描述的格式。您还可以添加空集合或加载示例集合。

  • Analyzer — 标识用于此同义词映射的分析器的标签。

    您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 ("lucene.standard")。

    您可以指定任何 Atlas Search 分析器,但以下分析器除外:

对应于 synonyms JSON 设置。

可选。

查看以下索引配置设置:

字段名称
说明
必要性
analyzer

指定用于索引集合数据的分析器。默认情况下,Atlas Search 使用标准分析器 ("lucene.standard")。

Optional
searchAnalyzer

指定在搜索查询文本之前要应用到文本的分析器。如果省略此字段,则索引默认按以下顺序继承分析器:

  1. 该字段的 analyzer 选项(如果已指定)。

  2. 索引searchAnalyzer 选项(如果指定)。

  3. 索引analyzer 选项(如果指定)。

  4. lucene.standard 分析器。

Optional
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 索引中定义存储的源字段。

Optional
synonyms

指定要在索引中使用的同义词映射。要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射

您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 ("lucene.standard")。

Optional

要了解有关这些搜索索引定义设置的更多信息,请参阅查看 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 */
)

以下命令会更新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()方法。

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 用户界面查看索引状态。

提示

API 文档

要使用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索引的更多信息,请参阅过程。

提示

另请参阅:

要通过节点驱动程序编辑 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 用户界面查看索引状态。

要使用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

注意

在构建新索引时,不同节点的更新速度可能不同。在此期间,您可能会遇到混合查询结果,反映了新的索引定义和以前的索引定义。您可以在索引索引详细信息页面查看正在为查询提供服务的索引。

后退

查看