Saltar al contenido
Explorar conocimiento

patrón · intermedio · 4 min de lectura

Metadata Filtering

Metadata filtering permite restringir resultados de búsqueda por atributos estructurados como fecha, fuente, autor o categoría, mejorando precisión sin depender solo de la similitud semántica.

No requiere conocimientos previos.

Alcance en breve

Cubre

  • metadata filtering as a pre-filter or post-filter on vector search results
  • common filter types: date range, source, author, category, tags, numeric ranges
  • pre-filtering vs post-filtering: performance and accuracy trade-offs
  • filter integration with sparse and dense retrieval

No cubre

  • database indexing for metadata
  • chunking strategies
  • vector database implementation details

Supone

  • The reader understands retrieval, vector search, and basic RAG pipeline concepts.

Resumen

Metadata filtering agrega filtros estructurados a la búsqueda semántica o por keywords. Antes o después de recuperar candidatos por similitud, aplicas condiciones sobre metadatos asociados a cada documento: "solo artículos del último año", "solo documentos del departamento legal", "solo contenido en español".

Este patrón es esencial cuando el corpus tiene documentos de diferentes tipos, fechas, fuentes o dominios. Sin filtros, la búsqueda semántica puede traer documentos relevantes por significado pero irrelevantes por contexto temporal, geográfico o de autoridad.

Alcance y supuestos

Este paquete cubre metadata filtering como pre-filter y post-filter, tipos comunes de filtros, trade-offs de performance y precisión, y cómo integrarlos con búsqueda dispersa y densa.

No cubre indexing de metadatos en bases de datos, chunking strategies, ni implementación interna de bases vectoriales. Asume que entiendes recuperación, búsqueda vectorial y conceptos básicos de RAG.

Modelo mental

Piensa en buscar en un archivo físico. La búsqueda semántica encuentra todos los documentos que hablan de "reembolsos". Pero si solo necesitas los de 2024 del departamento de soporte, los filtros de metadatos son como decir "solo del cajón etiquetado Soporte 2024".

Sin filtros, el archivador te trae documentos de todas las épocas y departamentos. Con filtros, reduces drásticamente el ruido.

Uso práctico

Usa metadata filtering cuando:

  • ✅ Tu corpus tiene documentos de múltiples fuentes, fechas, autores o dominios.
  • ✅ Necesitas garantizar que los resultados cumplan condiciones específicas (solo público, solo vigente).
  • ✅ Los usuarios pueden acotar su búsqueda por categorías o rangos de fechas.
  • ❌ Todos tus documentos son del mismo tipo y época: el filtro no agrega valor.
  • ❌ El filtro es tan restrictivo que deja cero resultados: mejor relajar y luego re-rankear.

Ejemplo trabajado: pre-filter vs post-filter

Existen dos estrategias con trade-offs distintos:

interface DocMetadata {
  date: string;
  department: "legal" | "support" | "engineering";
  language: string;
  visibility: "public" | "internal";
}

async function preFilterSearch(query: string, filters: Partial<DocMetadata>) {
  // Pre-filter: filtra antes de la búsqueda semántica
  // Más rápido para filtros muy selectivos, pero puede excluir resultados semánticos relevantes
  const filteredIds = await metadataIndex.query(filters);
  return vectorSearch(query, { filterIds: filteredIds });
}

async function postFilterSearch(query: string, filters: Partial<DocMetadata>) {
  // Post-filter: busca semánticamente, luego filtra
  // Más lento (recupera de más), pero no pierde resultados semánticos por filtros
  const results = await vectorSearch(query, { topK: 100 });
  return results.filter(doc => matchesFilters(doc.metadata, filters));
}

La decisión depende de cuán selectivo es el filtro. Si filtras por "solo documentos públicos" y el 90% lo son, post-filter es mejor. Si filtras por "solo Q1 2023" y eso es el 5% del corpus, pre-filter evita trabajo inútil.

Evidencia

Fuentes citadas