MongoDB Cosmos余弦相似度搜索:仅筛选Source=B文档失败求助
解决Cosmos DB向量搜索仅筛选source='B'文档的问题
问题原因
你之前先查询所有source='B'文档的ID再传入cosmosSearch的ids参数的方式无效,大概率是因为该参数并非为批量文档过滤场景设计,且当文档数量较多时,过长的ID列表可能引发参数解析异常,最终导致向量搜索仍覆盖全部文档。
正确解决方案
推荐直接在$search阶段使用复合查询(compound),将向量搜索条件与source字段过滤条件结合,这样向量搜索会仅在符合source='B'的文档中执行,既高效又能保证结果准确。
代码示例
query = [ { "$search": { "compound": { "must": [ { "cosmosSearch": { "vector": embedded_vector, "path": "values", "k": k_closest } }, { "term": { "path": "source", "value": "B" } } ] }, "returnStoredSource": True } } ] response = collection.aggregate(query)
备选方案(不推荐)
如果上述复合查询无法使用,也可以在向量搜索后添加$match阶段过滤结果,但这种方式是先对全量文档做向量搜索,再过滤出source='B'的结果,可能出现返回结果不足指定数量(比如k=4,但前4个相似结果里只有1个是B)的情况,且效率更低:
query = [ { "$search": { "cosmosSearch": { "vector": embedded_vector, "path": "values", "k": k_closest * 10 # 需放大k值来保证过滤后有足够结果 }, "returnStoredSource": True } }, { "$match": { "source": "B" } }, { "$limit": k_closest # 最终保留指定数量结果 } ]
内容的提问来源于stack exchange,提问作者NuTs
相关产品推荐
相关产品推荐

