From 25ae7364410171c224b809333345d1b049957325 Mon Sep 17 00:00:00 2001 From: "David S. Batista" Date: Mon, 10 Aug 2026 10:55:33 +0200 Subject: [PATCH 1/2] adding filter to unique metadata values --- .../document_stores/faiss/document_store.py | 4 +++- integrations/faiss/tests/test_document_store.py | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py b/integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py index 71fde17a3c..38f88c3326 100644 --- a/integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py +++ b/integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py @@ -473,6 +473,7 @@ def get_metadata_field_unique_values( search_term: str | None = None, from_: int = 0, size: int = 10, + filters: dict[str, Any] | None = None, ) -> tuple[list[Any], int]: """ Returns unique values for a metadata field, optionally filtered by a search term, with pagination. @@ -482,11 +483,12 @@ def get_metadata_field_unique_values( against the metadata field's value. :param from_: The offset to start returning values from (for pagination). :param size: The maximum number of unique values to return. + :param filters: Optional filters to restrict the documents considered. :returns: A tuple containing list of unique values (in their original type) and total count of unique values. """ values = [] - for doc in self.documents.values(): + for doc in self.filter_documents(filters): val = FAISSDocumentStore._get_doc_value(doc, metadata_field) if val is not None: values.append(val) diff --git a/integrations/faiss/tests/test_document_store.py b/integrations/faiss/tests/test_document_store.py index fc16d29b0a..f2d7e11257 100644 --- a/integrations/faiss/tests/test_document_store.py +++ b/integrations/faiss/tests/test_document_store.py @@ -250,3 +250,16 @@ def test_get_metadata_field_unique_values_preserves_non_string_types(self, docum values, total_count = document_store.get_metadata_field_unique_values("priority") assert set(values) == {1, 2} assert total_count == 2 + + def test_get_metadata_field_unique_values_with_filters(self, document_store): + docs = [ + Document(content="Doc 1", meta={"category": "A", "status": "active"}), + Document(content="Doc 2", meta={"category": "B", "status": "active"}), + Document(content="Doc 3", meta={"category": "C", "status": "inactive"}), + ] + document_store.write_documents(docs) + + filters = {"field": "meta.status", "operator": "==", "value": "active"} + values, total = document_store.get_metadata_field_unique_values("category", filters=filters) + assert set(values) == {"A", "B"} + assert total == 2 From 0f0b79c64fed2ed29833580e31dd996542f7f17e Mon Sep 17 00:00:00 2001 From: Julian Risch Date: Mon, 10 Aug 2026 14:23:29 +0200 Subject: [PATCH 2/2] Update integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py --- .../document_stores/faiss/document_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py b/integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py index 38f88c3326..04894d376e 100644 --- a/integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py +++ b/integrations/faiss/src/haystack_integrations/document_stores/faiss/document_store.py @@ -488,7 +488,7 @@ def get_metadata_field_unique_values( unique values. """ values = [] - for doc in self.filter_documents(filters): + for doc in self.filter_documents(filters=filters): val = FAISSDocumentStore._get_doc_value(doc, metadata_field) if val is not None: values.append(val)