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 命令或驾驶员助手方法来编辑所有AtlasAtlas Search Atlas集群层上的Atlas Search索引。有关支持的驾驶员版本的列表,请参阅MongoDB驱动程序。

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


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


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

1

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

2

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

atlas clusters search indexes update <indexId> [options]

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

提示

请参阅:相关链接

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

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

  3. 如果尚未出现,请单击侧边栏中的 Clusters(部署)。

    会显示集群页面。

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 UI 查看索引状态

提示

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 UI 查看索引状态

要使用 Python 驱动程序更新您的 Atlas 搜索索引,请在您的集合中调用 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

注意

在建立新索引时,不同节点的更新速度可能不同。在此期间,您可能会遇到混合查询结果,既反映新的索引定义,也反映以前的索引定义。您可以在索引状态详细信息页面中查看正在提供查询的索引。

后退

查看