Amazon S3 Vectors
haystack_integrations.components.retrievers.amazon_s3_vectors.embedding_retriever
AmazonS3VectorsEmbeddingRetriever
Retrieve documents from an AmazonS3VectorsDocumentStore based on their dense embeddings.
Usage example:
from haystack import Document, Pipeline
from haystack.document_stores.types import DuplicatePolicy
# Requires: pip install sentence-transformers-haystack
from haystack_integrations.components.embedders.sentence_transformers import SentenceTransformersTextEmbedder
from haystack_integrations.components.embedders.sentence_transformers import SentenceTransformersDocumentEmbedder
from haystack_integrations.components.retrievers.amazon_s3_vectors import AmazonS3VectorsEmbeddingRetriever
from haystack_integrations.document_stores.amazon_s3_vectors import AmazonS3VectorsDocumentStore
document_store = AmazonS3VectorsDocumentStore(
vector_bucket_name="my-vectors",
index_name="my-index",
dimension=768,
)
documents = [
Document(content="There are over 7,000 languages spoken around the world today."),
Document(content="Elephants have been observed to behave in a way that indicates..."),
Document(content="In certain places, you can witness the phenomenon of bioluminescent waves."),
]
document_embedder = SentenceTransformersDocumentEmbedder()
document_embedder.warm_up()
documents_with_embeddings = document_embedder.run(documents)
document_store.write_documents(documents_with_embeddings.get("documents"), policy=DuplicatePolicy.OVERWRITE)
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component("retriever", AmazonS3VectorsEmbeddingRetriever(document_store=document_store))
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "How many languages are there?"
res = query_pipeline.run({"text_embedder": {"text": query}})
init
__init__(
*,
document_store: AmazonS3VectorsDocumentStore,
filters: dict[str, Any] | None = None,
top_k: int = 10,
filter_policy: str | FilterPolicy = FilterPolicy.REPLACE
) -> None
Initialize the AmazonS3VectorsEmbeddingRetriever.
Parameters:
- document_store (
AmazonS3VectorsDocumentStore) – An instance ofAmazonS3VectorsDocumentStore. - filters (
dict[str, Any] | None) – Filters applied to the retrieved Documents. - top_k (
int) – Maximum number of Documents to return. - filter_policy (
str | FilterPolicy) – Policy to determine how filters are applied.
Raises:
ValueError– Ifdocument_storeis not anAmazonS3VectorsDocumentStore.
to_dict
Serialize this component to a dictionary.
from_dict
Deserialize the component from a dictionary.
run
run(
query_embedding: list[float],
filters: dict[str, Any] | None = None,
top_k: int | None = None,
) -> dict[str, list[Document]]
Retrieve documents from the AmazonS3VectorsDocumentStore based on dense embeddings.
Parameters:
- query_embedding (
list[float]) – Embedding of the query. - filters (
dict[str, Any] | None) – Filters applied to the retrieved Documents. The way runtime filters are applied depends on thefilter_policychosen at retriever initialization. Filters are applied server-side during the vector search. - top_k (
int | None) – Maximum number of Documents to return. S3 Vectors caps this at 10,000.
Returns:
dict[str, list[Document]]– A dictionary with key"documents"containing the retrieved Documents. Returned documents will not contain embeddings.
close
Release the resources of the underlying Document Store.
haystack_integrations.document_stores.amazon_s3_vectors.document_store
AmazonS3VectorsDocumentStore
A Document Store using Amazon S3 Vectors.
Amazon S3 Vectors provides serverless vector storage and similarity search within Amazon S3.
This document store stores Haystack Document objects as vectors with associated metadata
in an S3 vector bucket and index.
Service limits:
- Maximum
top_k: 10,000 results per query. Search is approximate, so atop_kclose to the number of stored or matching documents can return fewer results - Maximum vector dimension: 4,096
- Metadata per vector: 40 KB total, 2 KB filterable
- A metadata value must be a string, a boolean, a finite number, or a non-empty array of either
all strings or all non-boolean numbers. Anything else (
None, nested objects, empty or mixed arrays) is dropped with a warning rather than failing the write - Every record needs a vector (
float32only), so documents written without an embedding are stored with a placeholder vector (stripped again on read) and are only meaningfully retrievable viafilter_documents() - Only
DuplicatePolicy.OVERWRITEis supported, sinceput_vectorsis an upsert - Distance metrics:
cosineoreuclidean(set at index creation, immutable) filter_documents()filters locally, so preferAmazonS3VectorsEmbeddingRetrieverwith filtersDocument.blobis not stored
Usage example:
from haystack_integrations.document_stores.amazon_s3_vectors import AmazonS3VectorsDocumentStore
document_store = AmazonS3VectorsDocumentStore(
vector_bucket_name="my-vectors",
index_name="my-index",
dimension=768,
)
init
__init__(
*,
vector_bucket_name: str,
index_name: str,
dimension: int,
distance_metric: Literal["cosine", "euclidean"] = "cosine",
region_name: str | None = None,
aws_access_key_id: Secret | None = None,
aws_secret_access_key: Secret | None = None,
aws_session_token: Secret | None = None,
create_bucket_and_index: bool = True,
non_filterable_metadata_keys: list[str] | None = None
) -> None
Create an AmazonS3VectorsDocumentStore instance.
Parameters:
- vector_bucket_name (
str) – Name of the S3 vector bucket. - index_name (
str) – Name of the vector index within the bucket. - dimension (
int) – Dimensionality of the embeddings when creating an index (e.g. 768, 1536). When connecting to an existing index, its actual dimension is used. - distance_metric (
Literal['cosine', 'euclidean']) – Distance metric for similarity search:"cosine"or"euclidean". - region_name (
str | None) – AWS region. If not provided, uses the default from the environment/config. - aws_access_key_id (
Secret | None) – AWS access key ID. If not provided, uses the default credential chain. - aws_secret_access_key (
Secret | None) – AWS secret access key. - aws_session_token (
Secret | None) – AWS session token for temporary credentials. - create_bucket_and_index (
bool) – Whether to automatically create the vector bucket and index if they do not exist. Defaults toTrue. - non_filterable_metadata_keys (
list[str] | None) – Additional metadata keys to mark as non-filterable on the index (beyond the internal key used for Document content).
to_dict
Serialize this document store to a dictionary.
from_dict
Deserialize a document store from a dictionary.
count_documents
Return the number of documents in the document store.
Note: S3 Vectors does not provide a dedicated count API. This method lists all vector keys via pagination, which can be slow for large indexes.
write_documents
write_documents(
documents: list[Document],
policy: DuplicatePolicy = DuplicatePolicy.OVERWRITE,
) -> int
Write Documents to the S3 Vectors index.
AmazonS3VectorsDocumentStore only supports DuplicatePolicy.OVERWRITE: put_vectors is an
upsert, and S3 Vectors offers no cheap existence check (only get_vectors on batches of
100 keys, or a full index scan), so enforcing any other policy would cost an extra read
pass on every write. Other policies are ignored with a warning.
Documents without an embedding are stored with a placeholder vector, since S3 Vectors
requires a vector on every record. filter_documents() strips the placeholder, so they read
back with embedding=None, but they are meaningless as similarity-search results.
Metadata per vector is limited to 40 KB total (2 KB filterable).
Parameters:
- documents (
list[Document]) – A list of Documents to write. - policy (
DuplicatePolicy) – The duplicate policy. OnlyDuplicatePolicy.OVERWRITEis supported.
Returns:
int– The number of documents written.
Raises:
ValueError– Ifdocumentsis not a list ofDocumentinstances.
filter_documents
Return documents matching the provided filters.
Note: S3 Vectors only supports metadata filtering during vector similarity queries, not as a
standalone operation. This method lists all vectors and filters them locally with Haystack,
which can be slow for large indexes. AmazonS3VectorsEmbeddingRetriever filters through S3
Vectors instead, and the two can match different documents for the same filter, especially
on array metadata: S3 Vectors matches an array field when any element matches, while
Haystack compares the whole array.
Parameters:
- filters (
dict[str, Any] | None) – Haystack-format filters to apply.
Returns:
list[Document]– A list of matching Documents.
delete_documents
Delete documents by their IDs.
Parameters:
- document_ids (
list[str]) – List of document IDs to delete.
delete_all_documents
Delete all documents from the index.
Note: S3 Vectors has no truncate operation, so every key is listed and then deleted in batches, which can be slow for large indexes.
close
Close the underlying boto3 client and release its connection pool.
The store can be used again afterwards: the next call lazily creates a new client.