Docs 菜单
Docs 主页
/ / /
C++ 驱动程序
/

Atlas Search 索引

在此页面上

  • Overview
  • 样本数据
  • 创建 Atlas Search 索引
  • 使用静态映射创建Atlas Search索引
  • 使用动态映射创建Atlas Search索引
  • 创建多个Atlas Search索引
  • 列出Atlas Search索引
  • 更新 Atlas Search 索引
  • 删除Atlas Search索引
  • 更多信息
  • API 文档

MongoDB Atlas Search 功能使您能够对 Atlas 上托管的集合执行全文搜索。在执行 Atlas Search 查询之前,您必须创建索引,指定要为哪些字段编制索引以及如何为它们编制索引。

要学习;了解有关Atlas Search的更多信息,请参阅Atlas Search文档中的 Atlas Search概述。

本指南中的示例使用Atlas示例数据集sample_mflix数据库中的 movies集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。

要从C++应用程序管理sample_mflix集合上的Atlas Search索引,请先实例化连接到Atlas 集群的 mongocxx::client,然后为 dbcollection 变量分配以下值:

auto db = client["sample_mflix"];
auto collection = db["movies"];

然后,对 collection 变量调用 search_indexes() 方法,在集合上实例化 mongocxx::search_index_view

auto siv = collection.search_indexes();

mongocxx::search_index_view 类包含以下成员函数,可与Atlas Search索引进行交互:

  • create_one() :使用指定配置创建Atlas Search索引

  • create_many() :使用指定配置创建多个Atlas Search索引

  • list() :返回一个mongocxx::cursor 实例,该实例指向集合上的Atlas Search索引列表

  • update_one() :更新指定Atlas Search索引的定义

  • drop_one() :从集合中删除指定索引

注意

Atlas Search索引管理是异步的

MongoDB C++驱动程序以异步方式管理Atlas Search索引。以下部分中描述的库方法会立即返回服务器响应,但对Atlas Search索引的更改会在背景进行,可能要稍后一段时间才能完成。

以下各节将提供代码示例,演示如何使用每种 Atlas Search 索引管理方法。

要在集合上创建单个Atlas Search索引,请在 mongocxx::search_index_view实例上调用 create_one() 方法,并传入指定要创建索引的 mongoxcc::search_index_model实例。

mongocxx::search_index_model 构造函数需要以下参数:

  • name:指定索引名称的字符串

  • definition:包含 mappings字段的文档,指定如何配置索引中的字段

提示

有关可在Atlas Search索引中配置的字段的完整列表,请参阅Atlas Search文档中的“查看Atlas Search索引事务语法”指南。

以下部分介绍如何创建使用静态或动态映射的单个Atlas Search索引。

在Atlas Search索引中使用静态映射来指定要索引的字段,并为各个字段配置索引选项。

要创建使用静态映射的单个Atlas Search索引,请先创建一个包含 mappings字段的 definition文档。在 mappings字段,指定包含以下字段和值的文档:

  • dynamic:设置为false

  • fields:指定要索引的字段名称及其索引配置的文档。要学习;了解有关mappings.fields 选项的更多信息,请参阅Atlas Search文档中的静态映射示例。

然后,将 name 字符串和 definition文档传递给 mongocxx::search_index_model 构造函数以实例化 mongocxx::search_index_model。将此 mongocxx::search_index_model实例传递给 create_one() 方法,以将指定的Atlas Search索引添加到您的集合中。

以下示例展示了如何创建使用静态映射的单个Atlas Search索引:

// Create an index model with your index name and definition containing the fields you want to index
auto name = "myStaticIndex";
auto fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.standard"))), kvp("year", make_document(kvp("type","number"))));
auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", fields))));
auto model = mongocxx::search_index_model(name, definition.view());
// Create the search index
auto result = siv.create_one(model);
std::cout << "New index name: " << result << std::endl;
New index name: myStaticIndex

重要

您无法对字段名称开头包含美元 ($) 符号的字段创建索引。

要学习;了解有关何时使用静态映射的更多信息,请参阅Atlas Search文档中的“静态映射”部分。

在Atlas Search索引中使用动态映射,自动为所有受支持类型的字段创建索引。有关支持的BSON数据类型的列表,请参阅Atlas Search文档中的数据类型部分。

要创建使用动态映射的单个Atlas Search索引,请先创建一个包含 mappings字段的 definition文档。在 mappings字段,指定包含 dynamic字段的文档,并将其值设立为 true。然后,将 name 字符串和 definition文档传递给 mongocxx::search_index_model 构造函数以实例化 mongocxx::search_index_model。将此 mongocxx::search_index_model实例传递给 create_one() 方法,以将指定的Atlas Search索引添加到集合中。

以下示例展示了如何创建使用动态映射的单个Atlas Search索引:

// Create an index model with your index name and definition
auto name = "myDynamicIndex";
auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", true))));
auto model = mongocxx::search_index_model(name, definition.view());
// Create the search index
auto result = siv.create_one(model);
std::cout << "New index name: " << result << std::endl;
New index name: myDynamicIndex

要学习;了解有关何时使用动态映射的更多信息,请参阅Atlas Search文档中的动态映射部分。

要创建多个Atlas Search索引,请对 mongocxx::search_index_view实例调用 create_many() 方法,并传入指定要创建的Atlas Search索引的 mongocxx::search_index_model 实例向量。

以下示例展示了如何创建多个Atlas Search索引:

// Create a vector to store Search index models
std::vector<mongocxx::search_index_model> models;
// Add an index model with dynamic mappings to the input vector
auto name_1 = "myDynamicIndex";
auto definition_1 = make_document(kvp("mappings", make_document(kvp("dynamic", true))));
auto model_1 = mongocxx::search_index_model(name_1, definition_1.view());
models.push_back(model_1);
// Add an index model with static mappings to the input vector
auto name_2 = "myStaticIndex";
auto fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.standard"))), kvp("year", make_document(kvp("type","number"))));
auto definition_2 = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", fields))));
auto model_2 = mongocxx::search_index_model(name_2, definition_2.view());
models.push_back(model_2);
// Create the search indexes
auto result = siv.create_many(models);
// Print the search index names
std::cout << "New index names:" << std::endl;
for (const std::string& name : result) {
std::cout << name << std::endl;
}
New index names:
myDynamicIndex
myStaticIndex

要列出集合上的Atlas Search索引,请在 mongocxx::search_index_view实例上调用 list() 方法。此方法返回一个 mongocxx::cursor实例,您可以使用该实例迭代集合的Atlas Search索引。

以下示例通过迭代指向创建多个Atlas Search索引中索引的 实例来打印Atlas Search索引列表:cursor::iterator

auto cursor = siv.list();
for (mongocxx::cursor::iterator it = cursor.begin(); it != cursor.end(); ++it) {
std::cout << bsoncxx::to_json(*it) << std::endl;
}
{ "id" : ..., "name" : "myDynamicIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : true } }, ...}
{ "id" : ..., "name" : "myStaticIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : false, "fields" : { "title" : { "type" : "string", "analyzer" : "lucene.standard" }, "year" : { "type" : "number" } } } }, ...}

或者,您可以通过将索引名称传递到 list() 方法来列出特定的Atlas Search索引。这将返回一个 mongocxx::cursor实例,该实例指向仅包含指定索引的结果设立。

以下示例使用 list() 方法打印名称为 myDynamicIndex 的索引:

auto cursor = siv.list("myDynamicIndex");
for (mongocxx::cursor::iterator it = cursor.begin(); it != cursor.end(); ++it) {
std::cout << bsoncxx::to_json(*it) << std::endl;
}
{ "id" : ..., "name" : "myDynamicIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : true } }, ...}

要更新Atlas Search索引,请在 mongocxx::search_index_view实例上调用 update_one() 方法,并传入要更新的索引名称以及要更新到的索引的定义。

以下示例展示了如何更新使用静态映射创建搜索索引中的Atlas Search索引,以在 title字段上使用简单的分析器:

auto update_fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.simple"))), kvp("year", make_document(kvp("type","number"))));
auto update_definition = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", update_fields))));
siv.update_one("myStaticIndex", update_definition.view());

要从集合删除Atlas Search索引,请在 mongocxx::search_index_view实例上调用 drop_one() 方法并传入要删除的索引的名称。

以下示例展示如何删除名为 myDynamicIndex 的Atlas Search索引:

siv.drop_one("myDynamicIndex");

要查看演示如何管理索引的可运行示例,请参阅 使用索引优化查询。

有关如何使用Atlas Search功能和定义Atlas Search索引的更详细指南,请参阅以下Atlas Search文档页面:

要学习;了解有关本指南中讨论的方法的更多信息,请参阅以下API文档:

后退

复合索引