解决Cosmos DB for MongoDB向量搜索的Similarity index未找到错误
解决Cosmos DB向量搜索"Similarity index was not found"错误
错误核心原因
你的代码存在两处关键不匹配,导致搜索时无法找到对应的向量索引:
- 向量搜索的目标字段路径与索引创建的字段不一致:搜索用
path: '/text_embedding',但索引是基于contentVector字段创建的 - 未显式指定搜索使用的索引名称(当集合存在多个索引时容易出现歧义)
修复步骤及代码修正
1. 修正向量搜索函数
将搜索路径改为索引对应的字段名,并显式指定索引名称:
# simple function to assist with vector search def vector_search(query, num_result=5): query_embedding = get_embedding(query) print(len(query_embedding)) pipeline = [ { '$search':{ 'cosmosSearch':{ 'vector': query_embedding, 'path': 'contentVector', # 匹配索引创建的字段名,顶层字段无需加斜杠 'k': num_result, 'indexName': 'text_embedding' # 显式指定使用的索引名称 }, 'returnStoredSource': True } }, {'$project': {'similarityScore': {'$meta': 'searchScore'}, 'document': '$$ROOT'}} ] results = collection.aggregate(pipeline) return list(results)
2. 确认索引创建的集合一致性
确保createIndexes指定的集合名de_iceing_test与你执行搜索的collection是同一个集合。如果集合名匹配,索引创建代码无需修改:
# 创建向量索引 db.command({ 'createIndexes': 'de_iceing_test', 'indexes':[ { 'name': 'text_embedding', 'key':{ 'contentVector': 1, }, 'cosmosSearchOptions':{ 'kind': 'vector-ivf', 'numLists': 5, 'similarity': 'COS', 'dimensions': 1536 } } ] })
3. 额外验证检查
- 确认文档中存储向量的字段确实是
contentVector,而非text_embedding - 验证
get_embedding返回的向量维度为1536,与索引指定的dimensions一致 - 执行
db.de_iceing_test.getIndexes()命令,确认text_embedding索引已成功创建
内容的提问来源于stack exchange,提问作者anubhav joshi
相关产品推荐
相关产品推荐

