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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:55:06