Atlas Search和 Vector Search 索引
Overview
您可以使用 PyMongo 管理您的 Atlas Search 和 Atlas Vector Search 索引。索引指定了搜索行为以及要索引的字段。
Atlas Search 功能使您能够对 MongoDB Atlas 上托管的集合执行全文搜索。Atlas Search 索引指定了搜索行为以及要索引的字段。
Atlas Vector Search 使您能够对存储在 MongoDB Atlas 中的向量嵌入执行语义搜索。向量搜索索引定义要查询的向量嵌入的索引,以及要用于预过滤数据的布尔值、日期、objectId、数字、字符串或 UUID 值。
您可以在集合上调用以下方法来管理Atlas Search和 Vector Search 索引:
create_search_index()
create_search_indexes()
list_search_indexes()
update_search_index()
drop_search_index()
注意
Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行前返回。要确定索引的当前状态,请调用 list_search_indexes()
方法。
以下各节将提供代码示例,演示如何使用上述每种方法。
创建搜索索引
您可以使用 create_search_index() 和 create_search_indexes() 方法创建 Atlas Search 索引或 Atlas Vector Search 索引。
以下代码示例展示了如何创建单个 Atlas Search 索引:
index = { "definition": { "mappings": { "dynamic": True } }, "name": "<index name>", } collection.create_search_index(index)
下面的代码示例展示了如何使用 SearchIndexModel 对象创建单个 Atlas Vector Search 索引:
from pymongo.operations import SearchIndexModel search_index_model = SearchIndexModel( definition={ "fields": [ { "type": "vector", "numDimensions": <number of dimensions>, "path": "<field to index>", "similarity": "<select from euclidean, cosine, dotProduct>" } ] }, name="<index name>", type="vectorSearch", ) collection.create_search_index(model=search_index_model)
您可以使用 create_search_indexes() 方法来创建多个索引。这些索引可以是 Atlas Search 或 Vector Search 搜索索引。create_search_indexes()
方法采用与要创建的每个索引对应的 SearchIndexModel
对象的列表。
以下代码示例展示了如何创建 Atlas Search 索引和 Atlas Vector Search 索引:
search_idx = SearchIndexModel( definition ={ "mappings": { "dynamic": True } }, name="my_index", ) vector_idx = SearchIndexModel( definition={ "fields": [ { "type": "vector", "numDimensions": <number of dimensions>, "path": "<field to index>", "similarity": "<select from euclidean, cosine, dotProduct>" } ] }, name="my_vector_index", type="vectorSearch", ) indexes = [search_idx, vector_idx] collection.create_search_indexes(models=indexes)
搜索索引列表
您可以使用 list_search_indexes() 方法来获取有关集合的 Atlas Search 和 Vector Search 索引的信息。
以下代码示例显示如何打印集合的搜索索引列表:
results = list(collection.list_search_indexes()) for index in results: print(index)
更新搜索索引
您可以使用 update_search_index() 方法更新 Atlas Search 或 Vector Search 索引。
以下代码示例展示如何更新 Atlas Search 索引:
new_index_definition = { "mappings": { "dynamic": False } } collection.update_search_index("my_index", new_index)
以下代码示例展示如何更新 Atlas Vector Search 索引:
new_index_definition = { "fields": [ { "type": "vector", "numDimensions": 1536, "path": "<field to index>", "similarity": "euclidean" }, ] } collection.update_search_index("my_vector_index", new_index_definition)
删除搜索索引
您可以使用 drop_search_index() 方法删除 Atlas Search 或 Vector Search 索引。
以下代码展示了如何从集合中删除搜索索引:
collection.drop_index("my_index")