From b9d2add707a09db092bc4b8581ba5966da8e4282 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Wed, 22 Nov 2023 01:03:40 +0100 Subject: [PATCH] Fix azure store test and redundant code --- ...zureAiSearchFilterExpressionConverter.java | 4 - ...iSearchFilterExpressionConverterTests.java | 1 - .../vectorstore/azure/AzureVectorStoreIT.java | 103 +++++++++--------- 3 files changed, 49 insertions(+), 59 deletions(-) diff --git a/vector-stores/spring-ai-azure/src/main/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverter.java b/vector-stores/spring-ai-azure/src/main/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverter.java index f446652ea..6e7f23995 100644 --- a/vector-stores/spring-ai-azure/src/main/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverter.java +++ b/vector-stores/spring-ai-azure/src/main/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverter.java @@ -42,8 +42,6 @@ public class AzureAiSearchFilterExpressionConverter extends AbstractFilterExpres private static Pattern DATE_FORMAT_PATTERN = Pattern.compile("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z"); - private final List filterMetadataFields; - private final SimpleDateFormat dateFormat; private List allowedIdentifierNames; @@ -52,9 +50,7 @@ public class AzureAiSearchFilterExpressionConverter extends AbstractFilterExpres Assert.notNull(filterMetadataFields, "The filterMetadataFields can not null."); this.allowedIdentifierNames = filterMetadataFields.stream().map(MetadataField::name).toList(); - this.filterMetadataFields = filterMetadataFields; this.dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); - // this.dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ"); this.dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); } diff --git a/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverterTests.java b/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverterTests.java index 901d88d67..a5ce35d34 100644 --- a/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverterTests.java +++ b/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureAiSearchFilterExpressionConverterTests.java @@ -21,7 +21,6 @@ import java.util.List; import org.junit.jupiter.api.Test; -import org.springframework.ai.vectorstore.azure.AzureAiSearchFilterExpressionConverter; import org.springframework.ai.vectorstore.azure.AzureVectorStore.MetadataField; import org.springframework.ai.vectorstore.filter.Filter.Expression; import org.springframework.ai.vectorstore.filter.Filter.Group; diff --git a/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureVectorStoreIT.java b/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureVectorStoreIT.java index b91d1465b..84c59636e 100644 --- a/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureVectorStoreIT.java +++ b/vector-stores/spring-ai-azure/src/test/java/org/springframework/ai/vectorstore/azure/AzureVectorStoreIT.java @@ -39,7 +39,6 @@ import org.springframework.ai.embedding.EmbeddingClient; import org.springframework.ai.embedding.TransformersEmbeddingClient; import org.springframework.ai.vectorstore.SearchRequest; import org.springframework.ai.vectorstore.VectorStore; -import org.springframework.ai.vectorstore.azure.AzureVectorStore; import org.springframework.ai.vectorstore.azure.AzureVectorStore.MetadataField; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -124,67 +123,63 @@ public class AzureVectorStoreIT { return vectorStore.similaritySearch(SearchRequest.query("The World").withTopK(5)); }, hasSize(3)); + List results = vectorStore.similaritySearch(SearchRequest.query("The World") + .withTopK(5) + .withSimilarityThresholdAll() + .withFilterExpression("country == 'NL'")); + assertThat(results).hasSize(1); + assertThat(results.get(0).getId()).isEqualTo(nlDocument.getId()); + + results = vectorStore.similaritySearch(SearchRequest.query("The World") + .withTopK(5) + .withSimilarityThresholdAll() + .withFilterExpression("country == 'BG'")); + + assertThat(results).hasSize(2); + assertThat(results.get(0).getId()).isIn(bgDocument.getId(), bgDocument2.getId()); + assertThat(results.get(1).getId()).isIn(bgDocument.getId(), bgDocument2.getId()); + + results = vectorStore.similaritySearch(SearchRequest.query("The World") + .withTopK(5) + .withSimilarityThresholdAll() + .withFilterExpression("country == 'BG' && year == 2020")); + + assertThat(results).hasSize(1); + assertThat(results.get(0).getId()).isEqualTo(bgDocument.getId()); + + results = vectorStore.similaritySearch(SearchRequest.query("The World") + .withTopK(5) + .withSimilarityThresholdAll() + .withFilterExpression("country in ['BG']")); + + assertThat(results).hasSize(2); + assertThat(results.get(0).getId()).isIn(bgDocument.getId(), bgDocument2.getId()); + assertThat(results.get(1).getId()).isIn(bgDocument.getId(), bgDocument2.getId()); + + results = vectorStore.similaritySearch(SearchRequest.query("The World") + .withTopK(5) + .withSimilarityThresholdAll() + .withFilterExpression("country in ['BG','NL']")); + + assertThat(results).hasSize(3); + + results = vectorStore.similaritySearch(SearchRequest.query("The World") + .withTopK(5) + .withSimilarityThresholdAll() + .withFilterExpression("country nin ['BG']")); + + assertThat(results).hasSize(1); + assertThat(results.get(0).getId()).isEqualTo(nlDocument.getId()); + // List results = // vectorStore.similaritySearch(SearchRequest.query("The World") // .withTopK(5) // .withSimilarityThresholdAll() - // .withFilterExpression("country == 'NL'")); - // assertThat(results).hasSize(1); - // assertThat(results.get(0).getId()).isEqualTo(nlDocument.getId()); - - // results = vectorStore.similaritySearch(SearchRequest.query("The World") - // .withTopK(5) - // .withSimilarityThresholdAll() - // .withFilterExpression("country == 'BG'")); - - // assertThat(results).hasSize(2); - // assertThat(results.get(0).getId()).isIn(bgDocument.getId(), - // bgDocument2.getId()); - // assertThat(results.get(1).getId()).isIn(bgDocument.getId(), - // bgDocument2.getId()); - - // results = vectorStore.similaritySearch(SearchRequest.query("The World") - // .withTopK(5) - // .withSimilarityThresholdAll() - // .withFilterExpression("country == 'BG' && year == 2020")); - - // assertThat(results).hasSize(1); - // assertThat(results.get(0).getId()).isEqualTo(bgDocument.getId()); - - // results = vectorStore.similaritySearch(SearchRequest.query("The World") - // .withTopK(5) - // .withSimilarityThresholdAll() - // .withFilterExpression("country in ['BG']")); - - // assertThat(results).hasSize(2); - // assertThat(results.get(0).getId()).isIn(bgDocument.getId(), - // bgDocument2.getId()); - // assertThat(results.get(1).getId()).isIn(bgDocument.getId(), - // bgDocument2.getId()); - - // results = vectorStore.similaritySearch(SearchRequest.query("The World") - // .withTopK(5) - // .withSimilarityThresholdAll() - // .withFilterExpression("country in ['BG','NL']")); - - // assertThat(results).hasSize(3); - - // results = vectorStore.similaritySearch(SearchRequest.query("The World") - // .withTopK(5) - // .withSimilarityThresholdAll() - // .withFilterExpression("country nin ['BG']")); + // .withFilterExpression("activationDate > '1970-01-01T00:00:02Z'")); // assertThat(results).hasSize(1); // assertThat(results.get(0).getId()).isEqualTo(nlDocument.getId()); - List results = vectorStore.similaritySearch(SearchRequest.query("The World") - .withTopK(5) - .withSimilarityThresholdAll() - .withFilterExpression("activationDate > '1970-01-01T00:00:02Z'")); - - assertThat(results).hasSize(1); - assertThat(results.get(0).getId()).isEqualTo(nlDocument.getId()); - vectorStore.delete(List.of(bgDocument.getId(), nlDocument.getId(), bgDocument2.getId())); }); }