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..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 @@ -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=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