一句话定义:元数据过滤(Metadata Filtering)是在向量检索之前或检索过程中,先用结构化条件把候选数据缩小到"有资格被比较"的范围,再去算语义相似度。
元数据(metadata)指挂在每条数据上的结构化字段:部门、权限等级、语言、地区、上架时间、状态、产品线、文档类型等。它们不是正文内容,而是描述这条数据的"标签"。
打个比方。你在图书馆找书,说"帮我找讲定价策略的书",这是语义检索;但你其实还有硬性要求:"只要三楼中文区、2020 年之后上架、对普通读者开放的"。这就是元数据过滤。少了后一句,很可能捞出一本语义极像、却属于内部资料或别的语言的书。
难点在顺序。 常见三种做法:
- 先过滤再检索(pre-filter):先按条件筛出子集,再在这个子集里做向量比较。结果一定合规,但子集太小会削弱召回。
- 先检索再过滤(post-filter):先取相似度最高的若干条,再剔除不合格的。实现简单,风险是"top-k 被掏空"——本来取 20 条,过滤完只剩 1 条。
- 检索中过滤:在索引遍历时只走满足条件的节点。这是工程上常追求的形态,但具体支持程度和性能表现因实现而异,以官方文档为准。
和相邻概念的区别:
| 维度 | 元数据过滤 | 语义向量检索 | 关键词检索 |
|---|---|---|---|
| 判断依据 | 字段是否为真、是否落在区间 | 向量距离远近 | 词是否出现 |
| 输出性质 | 硬性通过或淘汰 | 排序打分 | 排序打分 |
| 擅长解决 | 权限、时间、品类、地区 | "意思差不多"的模糊表达 | 专有名词、编号、代码 |
| 典型失败 | 标签缺失导致误杀 | 语义相近但不合规 | 同义词漏召回 |
它和重排序(rerank)也不是一回事:重排序发生在召回之后,用更贵的模型精排;元数据过滤通常发生在前端,是布尔逻辑,不参与打分。
对从业者的实际意义有三点。 一是合规与权限:把"不该看"变成"检索不到",而不是指望模型自觉——语义最像的那篇,往往正好是别的部门、未发布状态或不适用地区的版本。二是成本与延迟:候选集小了,算得少。三是别把过滤当成万能药:标签缺失、枚举值漂移、过滤条件过严,都会让结果突然变少,而这类故障很难从"回答变差"里直接看出来。
对普通职场人,结论更朴素:认真给文档打标签、别乱填权限字段,决定的不只是归档整齐,而是 AI 能不能找到你那份材料。
