场景:使用腾讯云向量数据库做文档问答的检索层,集合里约 200 万条向量,每条带有 tenant_id、doc_type、update_time 等标量字段,向量索引类型为 HNSW,相似度度量为 COSINE。检索时需要先限定租户,再取相似度最高的 10 条。 现象: 1. 不带过滤条件,top 10 的结果质量正常。 2. 加上 tenant_id 过滤后,返回的结果条数有时不足 10 条,个别租户甚至只返回 2 到 3 条,但这些租户的数据量明显超过 10 条。 3. 把过滤条件去掉再在应用层筛选,又能拿到足够的结果,只是需要把 limit 调得很大,延迟随之上升。 已尝试: 1. 确认了 tenant_id 字段的值与过滤表达式完全一致,没有大小写或类型问题。 2. 把检索的 limit 调大后,结果数量会增加,但不知道这是不是正确的做法。 3. 没有给 tenant_id 建过标量索引,也没有调整过 HNSW 的 ef 相关检索参数。 想请教: 1. 向量检索与标量过滤的执行顺序是什么,是先过滤再检索,还是先取近邻再过滤?这会如何影响结果条数? 2. 是否需要为 tenant_id 等过滤字段建立过滤索引?不建索引时对召回和性能有什么影响? 3. HNSW 的 ef 检索参数、limit 与过滤选择率之间如何配合?过滤条件命中比例很低时有什么推荐做法? 4. 多租户场景下,是按租户拆分集合更合适,还是用字段过滤,各自的限制和取舍是什么?
相似问题