@@ -738,82 +738,6 @@ def test_get_metadata_field_min_max_unknown_field_raises(self, document_store):
738738 with pytest .raises (ValueError , match = "not configured for filtering" ):
739739 document_store .get_metadata_field_min_max ("unknown_field" )
740740
741- def test_get_metadata_field_unique_values (self , document_store ):
742- """Test get_metadata_field_unique_values returns distinct values and total count."""
743- docs = [
744- Document (id = "gmv1" , content = "doc 1" , embedding = [0.1 , 0.2 , 0.3 ], meta = {"category" : "apple" , "priority" : 1 }),
745- Document (id = "gmv2" , content = "doc 2" , embedding = [0.2 , 0.3 , 0.4 ], meta = {"category" : "banana" , "priority" : 2 }),
746- Document (id = "gmv3" , content = "doc 3" , embedding = [0.3 , 0.4 , 0.5 ], meta = {"category" : "apple" , "priority" : 3 }),
747- ]
748- document_store .write_documents (docs )
749- values , total = document_store .get_metadata_field_unique_values ("category" , from_ = 0 , size = 10 )
750- assert total == 2
751- assert set (values ) == {"apple" , "banana" }
752- assert len (values ) == 2
753-
754- def test_get_metadata_field_unique_values_pagination (self , document_store ):
755- """Test get_metadata_field_unique_values with from_ and size."""
756- docs = [
757- Document (id = f"gmvp{ i } " , content = f"doc { i } " , embedding = [0.1 , 0.2 , 0.3 ], meta = {"category" : f"cat_{ i } " })
758- for i in range (5 )
759- ]
760- document_store .write_documents (docs )
761- values , total = document_store .get_metadata_field_unique_values ("category" , from_ = 1 , size = 2 )
762- assert total == 5
763- assert len (values ) == 2
764- assert sorted (values )[0 ] >= "cat_0"
765-
766- def test_get_metadata_field_unique_values_with_search_term (self , document_store ):
767- """Test get_metadata_field_unique_values with search_term filter."""
768- docs = [
769- Document (id = "gmvs1" , content = "doc 1" , embedding = [0.1 , 0.2 , 0.3 ], meta = {"category" : "apple_pie" }),
770- Document (id = "gmvs2" , content = "doc 2" , embedding = [0.2 , 0.3 , 0.4 ], meta = {"category" : "banana" }),
771- Document (id = "gmvs3" , content = "doc 3" , embedding = [0.3 , 0.4 , 0.5 ], meta = {"category" : "apple_jam" }),
772- ]
773- document_store .write_documents (docs )
774- values , total = document_store .get_metadata_field_unique_values (
775- "category" , search_term = "apple" , from_ = 0 , size = 10
776- )
777- assert total == 2
778- assert set (values ) == {"apple_pie" , "apple_jam" }
779-
780- def test_get_metadata_field_unique_values_with_filters (self , document_store ):
781- """Test get_metadata_field_unique_values restricts documents using the filters param."""
782- docs = [
783- Document (
784- id = "gmvf1" , content = "doc 1" , embedding = [0.1 , 0.2 , 0.3 ], meta = {"category" : "A" , "status" : "active" }
785- ),
786- Document (
787- id = "gmvf2" , content = "doc 2" , embedding = [0.2 , 0.3 , 0.4 ], meta = {"category" : "B" , "status" : "active" }
788- ),
789- Document (
790- id = "gmvf3" , content = "doc 3" , embedding = [0.3 , 0.4 , 0.5 ], meta = {"category" : "C" , "status" : "inactive" }
791- ),
792- ]
793- document_store .write_documents (docs )
794-
795- filters = {"field" : "meta.status" , "operator" : "==" , "value" : "active" }
796- values , total = document_store .get_metadata_field_unique_values ("category" , filters = filters )
797- assert set (values ) == {"A" , "B" }
798- assert total == 2
799-
800- def test_get_metadata_field_unique_values_preserves_non_string_types (self , document_store ):
801- """Non-string metadata values (e.g. ints) are returned in their original type, not stringified."""
802- docs = [
803- Document (id = "gmvt1" , content = "doc 1" , embedding = [0.1 , 0.2 , 0.3 ], meta = {"priority" : 1 }),
804- Document (id = "gmvt2" , content = "doc 2" , embedding = [0.2 , 0.3 , 0.4 ], meta = {"priority" : 2 }),
805- Document (id = "gmvt3" , content = "doc 3" , embedding = [0.3 , 0.4 , 0.5 ], meta = {"priority" : 1 }),
806- ]
807- document_store .write_documents (docs )
808- values , total = document_store .get_metadata_field_unique_values ("priority" )
809- assert total == 2
810- assert set (values ) == {1 , 2 }
811-
812- def test_get_metadata_field_unique_values_unknown_field_raises (self , document_store ):
813- """Test get_metadata_field_unique_values raises for unconfigured field."""
814- with pytest .raises (ValueError , match = "not configured for filtering" ):
815- document_store .get_metadata_field_unique_values ("unknown_field" )
816-
817741 def test_count_unique_metadata_by_filter_invalid_field_raises (self , document_store ):
818742 """Test count_unique_metadata_by_filter raises for unconfigured field."""
819743 document_store .write_documents (
@@ -1256,17 +1180,19 @@ def test_prepare_document_dict_validates_tag_field_type():
12561180 store ._prepare_document_dict (doc )
12571181
12581182
1259- def test_prepare_document_dict_validates_numeric_field_type ():
1260- """Test that numeric fields reject non- numeric values ."""
1183+ def test_prepare_document_dict_omits_non_numeric_value_from_index ():
1184+ """Test that a non- numeric value for a numeric field is omitted from the index but kept in the payload ."""
12611185 store = ValkeyDocumentStore (
12621186 index_name = "test_validation" ,
12631187 embedding_dim = 3 ,
12641188 metadata_fields = {"priority" : int },
12651189 )
12661190 doc = Document (content = "test" , embedding = [0.1 , 0.2 , 0.3 ], meta = {"priority" : "high" })
12671191
1268- with pytest .raises (ValueError , match = "Field 'priority' expects numeric value but got str" ):
1269- store ._prepare_document_dict (doc )
1192+ doc_dict = store ._prepare_document_dict (doc )
1193+
1194+ assert doc_dict ["meta_priority" ] is None
1195+ assert doc_dict ["payload" ]["meta" ]["priority" ] == "high"
12701196
12711197
12721198@pytest .fixture
0 commit comments