patterntypescriptModerate
RAG retrieval quality degrades without metadata filtering
Viewed 0 times
ragmetadata-filterretrievalsemantic-searchpineconechroma
Problem
A naive RAG implementation retrieves top-K chunks by embedding similarity alone. When the knowledge base spans multiple users, documents, or time periods, irrelevant chunks from other contexts pollute the retrieved context and degrade answer quality.
Solution
Attach metadata to every upserted vector (userId, documentId, date, category, etc.) and apply metadata filters at query time. Both Pinecone and Chroma support pre-filtering that narrows the candidate set before running similarity search.
Why
Similarity search finds semantically close vectors regardless of ownership or relevance. Metadata filters enforce hard constraints before the similarity ranking step.
Gotchas
- Metadata filtering in Pinecone requires the metadata to be indexed — some fields must be declared in index metadata config
- Over-filtering can leave too few candidates for meaningful similarity ranking — monitor recall
- Chroma's 'where' filter uses a MongoDB-style query syntax, not SQL
Code Snippets
Pinecone query with metadata filter
const results = await index.query({
vector: queryEmbedding,
topK: 5,
includeMetadata: true,
filter: { userId: { $eq: currentUserId }, category: { $in: ['docs', 'faq'] } },
});Context
Multi-tenant RAG systems or knowledge bases with access control requirements
Revisions (0)
No revisions yet.