Atlas 搜索和向量搜索索引
概述
您可以管理您的Atlas Search 和 Atlas Vector Search 使用 PyMongo 进行索引。索引指定了搜索的行为和要索引的字段。
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 向量搜索索引。
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 或向量搜索索引。`create_search_indexes()` 方法接受一个 SearchIndexModel
对象列表,对应于您想要创建的每个索引。
以下代码示例展示了如何创建 Atlas Search 索引和 Atlas 向量搜索索引。
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")