@@ -222,7 +222,7 @@ def node_embeddings() -> List[TextNode]:
222
222
text = "consectetur adipiscing elit" ,
223
223
id_ = "ccc" ,
224
224
relationships = {NodeRelationship .SOURCE : RelatedNodeInfo (node_id = "ccc" )},
225
- extra_info = {"test_key_list" : ["test_value " ]},
225
+ extra_info = {"test_key_list" : ["test_value_1" , "test_value_2 " ]},
226
226
embedding = _get_sample_vector (0.1 ),
227
227
),
228
228
TextNode (
@@ -518,6 +518,91 @@ async def test_add_to_db_and_query_with_metadata_filters_with_in_operator_and_si
518
518
assert res .nodes [0 ].node_id == "bbb"
519
519
520
520
521
+ @pytest .mark .skipif (postgres_not_available , reason = "postgres db is not available" )
522
+ @pytest .mark .asyncio
523
+ @pytest .mark .parametrize ("pg_fixture" , ["pg" , "pg_halfvec" ], indirect = True )
524
+ @pytest .mark .parametrize ("use_async" , [True , False ])
525
+ async def test_add_to_db_and_query_with_metadata_filters_with_any_operator (
526
+ pg_fixture : PGVectorStore , node_embeddings : List [TextNode ], use_async : bool
527
+ ) -> None :
528
+ if use_async :
529
+ await pg_fixture .async_add (node_embeddings )
530
+ else :
531
+ pg_fixture .add (node_embeddings )
532
+ assert isinstance (pg_fixture , PGVectorStore )
533
+ assert hasattr (pg_fixture , "_engine" )
534
+ filters = MetadataFilters (
535
+ filters = [
536
+ MetadataFilter (
537
+ key = "test_key_list" ,
538
+ value = ["test_value_1" , "test_value_new" ],
539
+ operator = FilterOperator .ANY ,
540
+ )
541
+ ]
542
+ )
543
+ q = VectorStoreQuery (
544
+ query_embedding = _get_sample_vector (0.5 ), similarity_top_k = 10 , filters = filters
545
+ )
546
+ if use_async :
547
+ res = await pg_fixture .aquery (q )
548
+ else :
549
+ res = pg_fixture .query (q )
550
+ assert res .nodes
551
+ assert len (res .nodes ) == 1
552
+ assert res .nodes [0 ].node_id == "ccc"
553
+
554
+
555
+ @pytest .mark .skipif (postgres_not_available , reason = "postgres db is not available" )
556
+ @pytest .mark .asyncio
557
+ @pytest .mark .parametrize ("pg_fixture" , ["pg" , "pg_halfvec" ], indirect = True )
558
+ @pytest .mark .parametrize ("use_async" , [True , False ])
559
+ async def test_add_to_db_and_query_with_metadata_filters_with_all_operator (
560
+ pg_fixture : PGVectorStore , node_embeddings : List [TextNode ], use_async : bool
561
+ ) -> None :
562
+ if use_async :
563
+ await pg_fixture .async_add (node_embeddings )
564
+ else :
565
+ pg_fixture .add (node_embeddings )
566
+ assert isinstance (pg_fixture , PGVectorStore )
567
+ assert hasattr (pg_fixture , "_engine" )
568
+ filters = MetadataFilters (
569
+ filters = [
570
+ MetadataFilter (
571
+ key = "test_key_list" ,
572
+ value = ["test_value_1" , "test_value_2" ],
573
+ operator = FilterOperator .ALL ,
574
+ )
575
+ ]
576
+ )
577
+ filters_no_all_match = MetadataFilters (
578
+ filters = [
579
+ MetadataFilter (
580
+ key = "test_key_list" ,
581
+ value = ["test_value_1" , "test_value_3" ],
582
+ operator = FilterOperator .ALL ,
583
+ )
584
+ ]
585
+ )
586
+ q = VectorStoreQuery (
587
+ query_embedding = _get_sample_vector (0.5 ), similarity_top_k = 10 , filters = filters
588
+ )
589
+ q2 = VectorStoreQuery (
590
+ query_embedding = _get_sample_vector (0.5 ),
591
+ similarity_top_k = 10 ,
592
+ filters = filters_no_all_match ,
593
+ )
594
+ if use_async :
595
+ res = await pg_fixture .aquery (q )
596
+ res_no_match = await pg_fixture .aquery (q2 )
597
+ else :
598
+ res = pg_fixture .query (q )
599
+ res_no_match = pg_fixture .query (q2 )
600
+ assert res .nodes
601
+ assert len (res .nodes ) == 1
602
+ assert res .nodes [0 ].node_id == "ccc"
603
+ assert not res_no_match .nodes
604
+
605
+
521
606
@pytest .mark .skipif (postgres_not_available , reason = "postgres db is not available" )
522
607
@pytest .mark .asyncio
523
608
@pytest .mark .parametrize ("pg_fixture" , ["pg" , "pg_halfvec" ], indirect = True )
@@ -535,7 +620,7 @@ async def test_add_to_db_and_query_with_metadata_filters_with_contains_operator(
535
620
filters = [
536
621
MetadataFilter (
537
622
key = "test_key_list" ,
538
- value = "test_value " ,
623
+ value = "test_value_1 " ,
539
624
operator = FilterOperator .CONTAINS ,
540
625
)
541
626
]
0 commit comments