Docs 菜单
Docs 主页
/ /

MongoDB Vector Search 索引

MongoDB Vector Search 使您能够对存储在MongoDB Atlas中的向量嵌入执行语义搜索。在执行MongoDB Vector Search 查询之前,您必须创建索引,指定要索引的字段以及索引的方式。

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

The examples in this guide use the movies collection in the sample_mflix database from the Atlas sample datasets. To learn how to create a free MongoDB Atlas cluster and load the sample datasets, see the MongoDB Get Started guide.

要从C++应用程序管理sample_mflix集合上的MongoDB Vector 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 类包含以下允许您与MongoDB Vector Search 索引进行交互的成员函数:

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

  • list():返回一个 mongocxx::cursor对象,该对象指向集合上的MongoDB Vector Search 和 Search 索引列表

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

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

以下部分提供的代码示例演示了如何使用每种MongoDB Vector Search索引管理方法。

注意

MongoDB Vector Search 索引管理是异步的

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

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

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

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

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

提示

有关可在MongoDB Vector Search索引中配置的字段的完整列表,请参阅MongoDB Vector Search 文档中的MongoDB Vector Search 索引字段参考部分。

以下示例展示了如何创建单个MongoDB Vector Search索引:

// Define the index model with an index name and a definition document
auto model = mongocxx::search_index_model(
"<vectorSearchIndexName>",
make_document(
kvp("fields",
make_array(make_document(
kvp("type", "vector"),
kvp("path", "<fieldName>"),
kvp("numDimensions", 2048),
kvp("similarity", "dotProduct"),
kvp("quantization", "scalar"))))));
model.type("vectorSearch");
// Creates the vector search index
auto result = siv.create_one(model);
std::cout << "New vector search index name: " << result << std::endl;
New vector search index name: vector_search

向量搜索索引的定义如下:

  • type:索引的类型为 vectorSearch

  • path:索引位于 plot_embedding_voyage_3_large字段上。

  • numDimensions:向量嵌入的维数为 2048

  • similarity:索引使用 dotProduct 相似度来衡量相似度。

  • quantization:索引使用 scalar 量化。

要列出集合上的所有搜索索引,请对 mongocxx::search_index_view对象调用 list() 方法。此方法返回一个 mongocxx::cursor对象,您可以使用该对象迭代集合的MongoDB Vector Search 和MongoDB Search 索引。

以下示例打印指定集合上的可用搜索索引列表:

auto cursor = siv.list();
for (auto const& doc : siv.list()) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "id" : ..., "name" : "vector_index", "type" : "vectorSearch", ...,
"latestDefinition" : { "fields" : [ { "type" : "vector", "path" : "plot_embedding_voyage_3_large", "numDimensions" : 2048, ...}

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

以下示例使用 list() 方法返回名称为 vector_index 的索引:

for (auto const& doc : siv.list("vector_index")) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "id" : ..., "name" : "vector_index", "type" : "vectorSearch", ...,
"latestDefinition" : { "fields" : [ { "type" : "vector", "path" : "plot_embedding_voyage_3_large", "numDimensions" : 2048, ...}

要更新MongoDB Vector Search索引,请对 mongocxx::search_index_view对象调用 update_one() 方法,并传入要更新的索引名称以及要更新到的索引的定义。

以下示例展示了如何更新一个创建MongoDB Vector Search 索引示例中的现有MongoDB Vector Search索引,以使用 euclidean而不是dotProduct 相似度以及binary 而不是scalar 量化:

auto definition = make_document(
kvp("fields",
make_array(make_document(
kvp("type", "vector"), kvp("path", "plot_embedding_voyage_3_large"),
kvp("numDimensions", 2048), kvp("similarity", "euclidean"),
kvp("quantization", "binary")))));
siv.update_one("vector_index", definition.view());

要从集合中删除MongoDB Vector Search索引,请对 mongocxx::search_index_view对象调用 drop_one() 方法并传入要删除的索引的名称。

以下示例展示如何删除名为 vector_index 的MongoDB Vector Search索引:

siv.drop_one("vector_index");

有关演示如何在C++驾驶员中管理索引的示例应用程序,请参阅 索引指南。

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

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

后退

MongoDB搜索索引

在此页面上