You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:18:20