Overview
在本指南中,您可以学习;了解如何创建和管理Atlas Search和 Vector Search 索引。这些索引允许您使用以下功能:
Atlas Search:执行快速全文搜索
Atlas Vector Search:对向量嵌入执行语义(相似度)搜索
Atlas Search和 Vector Search 索引指定要索引的字段、索引这些字段的方式以及设立其他可选配置。
注意
Atlas Search索引管理方法异步运行。驾驶员方法可以在服务器上完成所需动作之前返回结果。
本指南介绍了如何执行以下操作来管理Atlas Search和 Vector Search 索引:
注意
样本数据
本指南中的示例使用 sample_mflix
数据库中的 embedded_movies
集合,该数据库是Atlas示例数据集之一。有关导入Atlas示例数据的说明,请参阅Atlas文档中的加载样本数据。
创建搜索索引模型
要创建Atlas Search或 Vector Search索引,您必须首先构建一个用于设置索引规范的 CreateSearchIndexModel
实例。
CreateSearchIndexModel
具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
|
| 指定索引定义。如果您省略此设置,驱动程序会使用动态映射创建 Atlas Search 索引。 |
|
| 设置索引名称。如果省略此设置,驾驶员会将名称设置为 |
|
| 设置索引类型。如果省略此设置,驾驶员将默认创建Atlas Search索引。 |
要了解有关 Atlas Search 字段映射的更多信息,请参阅 Atlas 文档中的定义字段映射。
要学习;了解有关定义Atlas Vector Search索引的更多信息,请参阅Atlas文档中的如何为向量搜索的字段编制索引。
示例模型
以下示例创建一个 CreateSearchIndexModel
实例,为名为 search_idx
的索引提供规范。该代码指定了 title
和 released
字段的静态映射:
var def = new BsonDocument { { "mappings", new BsonDocument { { "dynamic", false }, { "fields", new BsonDocument { { "title", new BsonDocument { {"type", "string" } } }, { "released", new BsonDocument { { "type", "date" } } } } } } } }; var indexModel = new CreateSearchIndexModel( "search_idx", SearchIndexType.Search, def );
以下示例创建一个 CreateSearchIndexModel
实例,以便为名为 vs_idx
的索引提供规范。代码将嵌入路径指定为 plot_embedding
,索引 1536
个维度,并使用 "euclidean"
向量相似性函数:
var def = new BsonDocument { { "fields", new BsonArray { new BsonDocument { { "type", "vector" }, { "path", "plot_embedding" }, { "numDimensions", 1536 }, { "similarity", "euclidean" } } } } }; var indexModel = new CreateSearchIndexModel( "vs_idx", SearchIndexType.VectorSearch, def );
创建搜索索引
您可以通过对 IMongoCollection
实例调用 SearchIndexes.CreateOne()
方法来对集合创建Atlas Search或 Vector Search索引。此方法接受在 CreateSearchIndexModel
实例中指定的索引模型作为参数。
例子
以下示例在embedded_movies
collection 上创建 Atlas Search 搜索索引。该代码创建一个CreateSearchIndexModel
,用于设置索引名称并启用动态映射。 然后,代码将CreateSearchIndexModel
实例传递给SearchIndexes.CreateOne()
方法以创建 Atlas Search 索引:
var indexModel = new CreateSearchIndexModel( "example_index", SearchIndexType.Search, new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true }, } } } ); var result = movieCollection.SearchIndexes.CreateOne(indexModel); Console.WriteLine("Created Atlas Search index:\n{0}", result);
Created Atlas Search index: "example_index"
创建多个搜索索引
您可以通过在 IMongoCollection
实例上调用 SearchIndexes.CreateMany()
方法来创建多个Atlas Search和 Vector Search 索引。此方法接受 CreateSearchIndexModel
实例的 IEnumerable
作为参数。
例子
此示例将执行以下动作:
创建一个
CreateSearchIndexModel
实例,指定名为as_idx
的Atlas Search索引创建
CreateSearchIndexModel
实例,指定名为vs_idx
的Atlas Vector Search索引将两个
CreateSearchIndexModel
实例的List
传递给SearchIndexes.CreateMany()
方法在
embedded_movies
集合上创建Atlas Search和 Vector Search 索引
var searchModel = new CreateSearchIndexModel( "as_idx", SearchIndexType.Search, new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true }, } } } ); var vectorModel = new CreateSearchIndexModel( "vs_idx", SearchIndexType.VectorSearch, new BsonDocument { { "fields", new BsonArray { new BsonDocument { { "type", "vector" }, { "path", "plot_embedding" }, { "numDimensions", 1536 }, { "similarity", "euclidean" } } } } } ); var models = new List<CreateSearchIndexModel> { searchModel, vectorModel }; var indexes = movieCollection.SearchIndexes.CreateMany(models); Console.WriteLine("Created Search indexes:\n{0} {1}", indexes.ToArray());
Created Search indexes: as_idx vs_idx
搜索索引列表
您可以通过调用集合上的 SearchIndexes.List()
方法来访问有关集合的现有 Atlas Search 和 Vector Search 索引的信息。
例子
以下示例访问有关在本页的 创建多个搜索索引 部分中创建的 Atlas Search 和 Vector Search 索引的信息。该代码调用 SearchIndexes.List()
方法,并打印集合中 Atlas Search 和 Vector Search 搜索索引的列表:
var indexesList = movieCollection.SearchIndexes.List().ToList(); foreach (var i in indexesList) { Console.WriteLine(i); }
{ "id": "...", "name": "as_idx", "status": "READY", "queryable": true, "latestDefinitionVersion": {...}, "latestDefinition": { "mappings": { "dynamic": true } }, "statusDetail": [...] } { "id": "...", "name": "vs_idx", "type": "vectorSearch", "status": "READY", "queryable": true, ..., "latestDefinition": { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean" }] }, "statusDetail": [...] }
更新搜索索引
您可以通过在 IMongoCollection
实例上调用 SearchIndexes.Update()
方法来更新Atlas Search或 Vector Search索引。此方法接受以下参数:
要更新的索引名称
修改索引定义文档
例子
以下示例更新了在本页 创建多个搜索索引部分中创建的名为 vs_index
的 Vector Search 索引。该代码创建了一个新的索引定义文档,指示索引使用 "dotProduct"
作为向量相似性函数。然后,代码调用 SearchIndexes.Update()
方法来更新索引:
var updatedDef = new BsonDocument { { "fields", new BsonArray { new BsonDocument { { "type", "vector" }, { "path", "plot_embedding" }, { "numDimensions", 1536 }, { "similarity", "dotProduct" } } } } }; movieCollection.SearchIndexes.Update("vs_index", updatedDef);
删除搜索索引
您可以通过在 IMongoCollection
实例上调用 SearchIndexes.DropOne()
方法来删除Atlas Search或 Vector Search索引。此方法接受要删除的索引名称作为参数。
例子
以下示例删除了在本页面的“创建Atlas Search Atlas Search索引”部分中创建的名为 example_index
的 Atlas Search 索引。 代码将索引名称传递给SearchIndexes.DropOne()
方法以删除索引:
movieCollection.SearchIndexes.DropOne("example_index");
更多信息
要学习;了解可以使用.NET/ C#驱动程序创建的其他索引,请参阅创建和管理索引指南。
要了解有关 Atlas Search 的更多信息,请参阅以下 Atlas 文档:
要了解有关 Atlas Vector Search 的更多信息,请参阅以下 Atlas 文档:
API 文档
要进一步了解本指南所提及的方法和类型,请参阅以下 API 文档: