🧠 图解记忆: Metadata 先限定可见数据边界,向量相似度再决定相关性。
💡 答案要点
Metadata 过滤示例:
python
# Chroma 示例
results = collection.query(
query_embeddings=[...],
filter={
"tenant_id": "company_a",
"department": {"$in": ["hr", "finance"]},
"created_at": {"$gte": "2025-01-01"},
"access_level": {"$lte": 3}
},
n_results=5
)
# Milvus 示例
results = collection.search(
data=[...],
filter="tenant_id == 'company_a' and created_at > '2025-01-01'",
limit=5
)应用场景:
| 场景 | Metadata 字段 | 过滤条件 |
|---|---|---|
| 多租户 | tenant_id | tenant_id == "xxx" |
| 权限控制 | access_level | access_level <= user_level |
| 时间范围 | created_at | created_at >= "2025-01-01" |
| 部门隔离 | department | department in ["hr", "finance"] |
| 文档类型 | doc_type | doc_type == "policy" |
面试话术:
"Metadata 过滤可实现逻辑多租户,但必须由服务端从可信身份生成过滤条件,不能接受模型或客户端任意传 tenant_id。还要验证索引前/后过滤语义、缓存键、备份、日志和侧信道;高风险租户是否物理隔离取决于合规与威胁模型,不能只看成本。"
