AWS Builder Center
Amazon S3 Vectors Metadata Pre-Filtering: Improve RAG and AI Vector Search

Amazon S3 Vectors Metadata Pre-Filtering: Improve RAG and AI Vector Search

Learn how Amazon S3 Vectors metadata pre-filtering improves filtered vector search for RAG, semantic search, and AI agents, with AWS CLI examples and real-world use cases.

Cloud Data Engineer
Introduction
Vector search is becoming an important part of Generative AI, Retrieval-Augmented Generation (RAG), semantic search, and AI agents.
But many real-world applications don't need to search an entire vector index.
For example, imagine an enterprise knowledge base containing millions of documents from thousands of customers. When a customer asks a question, the application should retrieve relevant information only from that customer's documents.
This is where metadata filtering becomes important.
AWS has introduced metadata pre-filtering for Amazon S3 Vectors, which evaluates metadata filters before similarity search. AWS reports that highly selective filtered searches can return up to 5× more matching vectors compared with the previous approach. (Amazon Web Services, Inc. )

What Is Amazon S3 Vectors?

Amazon S3 Vectors provides native capabilities for storing and querying vector data in Amazon S3.
A typical vector-search architecture looks like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Documents
↓
Chunking
↓
Embedding Model
↓
Vector + Metadata
↓
Amazon S3 Vectors
↓
Metadata Filter
↓
Similarity Search
↓
Relevant Results
↓
RAG / AI Application
A vector represents the semantic meaning of content as numerical values.
For example:
1
"How do I reset my password?"
can be converted into an embedding such as:
1
[0.12, -0.31, 0.72, ...]
The application can then search for vectors that are semantically similar to a user's question.

Why Metadata Filtering Matters

Consider an index containing:
1
10 million vectors
A user belongs to:
1
tenant_id = customer-104
Only 5,000 vectors belong to that customer.
Without an effective filter, the search space can be much larger than necessary.
Metadata can describe each vector:
1
2
3
4
5
6
{
"tenant_id": "customer-104",
"category": "support",
"status": "active",
"year": 2026
}
The application can then combine:
1
2
3
Semantic similarity
+
Metadata conditions
For example:
1
2
3
4
5
tenant_id = customer-104
AND
category = support
AND
status = active
This is particularly useful for multi-tenant applications, enterprise search, RAG systems, and AI agents.

Classic vs Enhanced Index Mode

Amazon S3 Vectors now has two index modes:
  • CLASSIC
  • ENHANCED
With ENHANCED mode, S3 Vectors resolves the metadata filter before performing the similarity search.
Conceptually:

CLASSIC

1
2
3
4
5
Query Vector
↓
Candidate Search + Filter Evaluation
↓
Relevant Results

ENHANCED

1
2
3
4
5
6
7
Metadata Filter
↓
Matching Vectors
↓
Similarity Search
↓
Relevant Results
For highly selective filters, AWS reports up to 5× more matching vectors with the enhanced approach. (Amazon Web Services, Inc. )
AWS recommends ENHANCED for almost all workloads. New vector buckets created on or after September 30, 2026 use ENHANCED as the default mode. (AWS Documentation )

Creating an S3 Vector Index

For example, we can create an index using the AWS CLI:
1
2
3
4
5
aws s3vectors create-index \
--index-name support-documents \
--vector-bucket-name my-vector-bucket \
--dimension 1536 \
--distance-metric cosine
The dimension must match the output dimension of your embedding model.
For text embeddings, cosine similarity is commonly used, although the appropriate distance metric depends on the embedding model and application. (Amazon Web Services, Inc. )

Adding Vectors with Metadata

A vector can contain both its numerical embedding and application metadata.
Example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
aws s3vectors put-vectors \
--index-name support-documents \
--vector-bucket-name my-vector-bucket \
--vectors '[
{
"key": "ticket-001",
"data": {
"float32": [0.10, 0.20, 0.30, 0.40]
},
"metadata": {
"tenant_id": "customer-104",
"category": "support",
"status": "active",
"year": 2026
}
}
]'
The four-dimensional vector above is only an illustrative example. If the index uses dimension 1536, the actual vector must contain 1536 values.
AWS allows filterable metadata to contain supported strings, numbers, booleans, and lists. (Amazon Web Services, Inc. )

Querying with Metadata Filters

Now imagine a customer asks:
"Show me previous incidents related to database connection failures."
The application generates an embedding for the question and applies the customer's metadata scope.
Example:
1
2
3
4
5
6
7
8
9
10
11
12
13
aws s3vectors query-vectors \
--index-name support-documents \
--vector-bucket-name my-vector-bucket \
--query-vector '{"float32":[0.10,0.20,0.30,0.40]}' \
--top-k 10 \
--return-metadata \
--filter '{
"$and": [
{"tenant_id": "customer-104"},
{"category": "support"},
{"status": "active"}
]
}'
The query combines:
1
2
3
4
5
6
7
Vector similarity
+
tenant filtering
+
category filtering
+
status filtering
S3 Vectors supports metadata filtering through the QueryVectors operation. (AWS Documentation )

Using $startsWith

The enhanced filtering capability also supports the $startsWith operator.
This is useful for hierarchical values such as:
1
2
3
matter-4417/exhibits/
matter-4417/contracts/
matter-4417/emails/
For example:
1
2
3
4
5
{
"$startsWith": {
"document_id": "matter-4417/exhibits/"
}
}
This can be useful for applications such as:
  • Legal document search
  • Enterprise document repositories
  • File and URL hierarchies
  • Knowledge bases
  • AI agents
AWS specifically introduced $startsWith for values such as paths, URLs, and hierarchical keys. (Amazon Web Services, Inc. )

Real-World Use Case: Multi-Tenant RAG

One of the most interesting use cases is a multi-tenant RAG application.
Imagine a SaaS platform with:
1
2
1,000 customers
10 million documents
Every document has metadata:
1
2
3
4
5
6
{
"tenant_id": "customer-104",
"department": "support",
"document_type": "incident",
"status": "active"
}
A user asks:
"Have we experienced this database error before?"
The RAG pipeline can work like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
User
↓
Authentication
↓
User/Tenant Identification
↓
Question Embedding
↓
Metadata Filter
↓
Amazon S3 Vectors
↓
Similarity Search
↓
Top-K Relevant Documents
↓
Foundation Model
↓
Answer
The important architectural principle is:
First define the valid search scope, then find the most relevant content within that scope.
This can help RAG systems retrieve more complete and relevant context when filters are highly selective.

Other Practical Use Cases

Legal Search

Filter by:
1
2
3
client_id
matter_id
document_type
Then perform semantic search.

Financial Research

Filter by:
1
2
3
company
document_type
publication_year
Then search for relevant research.

Media Applications

Filter by:
1
2
3
region
language
content_rating
Then perform semantic similarity search.

AI Agents

Filter by:
1
2
3
4
user_id
session_id
document_set
timestamp
Then allow the agent to retrieve information relevant to the current task.
AWS highlights legal/professional services, financial services, media and entertainment, and agentic applications as potential use cases. (Amazon Web Services, Inc. )

Filterable vs Non-Filterable Metadata

An important design decision is deciding which metadata needs to be searchable.

Filterable metadata

Use this for fields that your application needs to query:
1
2
3
4
5
{
"tenant_id": "customer-104",
"category": "support",
"status": "active"
}

Non-filterable metadata

Use this for contextual information that doesn't need to be used as a filter.
For example:
1
2
3
4
{
"document_title": "Database Troubleshooting Guide",
"text_chunk": "Detailed document content..."
}
Non-filterable metadata can be useful for returning context with search results without using that information as a query filter. (AWS Documentation )

Existing S3 Vector Indexes

If you already have an existing index using CLASSIC mode, you don't necessarily need to recreate the index.
AWS provides UpdateIndexMode to move an existing index to ENHANCED mode.
For example:
1
2
3
4
aws s3vectors update-index-mode \
--vector-bucket-name my-vector-bucket \
--index-name support-documents \
--index-mode ENHANCED
AWS states that existing indexes can be updated in place without re-ingestion or changing the application's existing vector-writing and query APIs. (Amazon Web Services, Inc. )

Security Considerations

Metadata filtering should not be treated as a replacement for authentication and authorization.
For a multi-tenant application, the application should determine the user's tenant from authenticated identity rather than allowing a user to freely supply a tenant ID.
A secure architecture should look like:
1
2
3
4
5
6
7
8
9
10
11
User
↓
Authentication
↓
Authorization
↓
Determine Tenant
↓
Generate Safe Metadata Filter
↓
S3 Vectors Query
Use IAM permissions based on the principle of least privilege.
This is especially important when vector data contains confidential enterprise, customer, financial, or legal information.

Cost and Architecture Considerations

One of the interesting aspects of this update is that AWS makes metadata pre-filtering available at no additional cost. Standard S3 Vectors pricing still applies for storage, PUT requests, and queries. (Amazon Web Services, Inc. )
However, optimizing an AI architecture means looking beyond the vector store.
Consider the complete cost:
1
2
3
4
5
6
7
8
9
10
11
12
13
Document Processing
+
Embedding Generation
+
Vector Storage
+
Vector Queries
+
Application Compute
+
Foundation Model Inference
+
RAG Token Usage
A more targeted retrieval strategy can also help reduce unnecessary context being passed into downstream AI processing.

Key Takeaways

The biggest lesson I take from this AWS update is simple:
Don't search everything when you already know what subset matters.
Instead of thinking:
1
2
3
Search everything
↓
Filter results
we can think:
1
2
3
4
5
Define the search scope
↓
Search within that scope
↓
Return relevant results
Amazon S3 Vectors metadata pre-filtering is particularly interesting for:
  • RAG applications
  • AI agents
  • Semantic search
  • Multi-tenant SaaS
  • Enterprise knowledge bases
  • Legal search
  • Financial research
  • Media applications
For highly selective filters, AWS reports up to 5× higher recall, making this an important capability to consider when designing new S3 Vectors architectures. (Amazon Web Services, Inc. )

Official AWS Resources


Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article