From a55ac14f20d07c134b43f312a1cc9be4381bf117 Mon Sep 17 00:00:00 2001 From: Hyun Jong Park Date: Wed, 19 Nov 2025 15:19:42 +0900 Subject: [PATCH] fix: incorrect IN operator detection in SimpleVectorStoreFilterExpressionConverter Signed-off-by: Hyun Jong Park --- .../SimpleVectorStoreFilterExpressionConverter.java | 6 +++++- ...leVectorStoreFilterExpressionConverterTests.java | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/filter/converter/SimpleVectorStoreFilterExpressionConverter.java b/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/filter/converter/SimpleVectorStoreFilterExpressionConverter.java index 838e26a2d42..7c3eaf3d847 100644 --- a/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/filter/converter/SimpleVectorStoreFilterExpressionConverter.java +++ b/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/filter/converter/SimpleVectorStoreFilterExpressionConverter.java @@ -85,7 +85,11 @@ protected void doValue(Filter.Value filterValue, StringBuilder context) { } formattedList.append("}"); - if (context.lastIndexOf("in ") == -1) { + String ctx = context.toString().trim(); + boolean isInClause = ctx.endsWith(" in"); + boolean isNotInClause = ctx.endsWith(" not in"); + + if (!isInClause && !isNotInClause) { context.append(formattedList); } else { diff --git a/spring-ai-vector-store/src/test/java/org/springframework/ai/vectorstore/filter/converter/SimpleVectorStoreFilterExpressionConverterTests.java b/spring-ai-vector-store/src/test/java/org/springframework/ai/vectorstore/filter/converter/SimpleVectorStoreFilterExpressionConverterTests.java index 43a236c5149..3542eb59753 100644 --- a/spring-ai-vector-store/src/test/java/org/springframework/ai/vectorstore/filter/converter/SimpleVectorStoreFilterExpressionConverterTests.java +++ b/spring-ai-vector-store/src/test/java/org/springframework/ai/vectorstore/filter/converter/SimpleVectorStoreFilterExpressionConverterTests.java @@ -217,4 +217,17 @@ public void testComplexIdentifiers() { Assertions.assertEquals(Boolean.TRUE, parser.parseExpression(vectorExpr).getValue(context, Boolean.class)); } + @Test + void eqExpressionWithListAndKeyContainingInSpaceShouldNotUseContains() { + Filter.Expression expr = new Filter.Expression( + Filter.ExpressionType.EQ, + new Filter.Key("pin code"), + new Filter.Value(List.of("1234", "5678")) + ); + + String result = converter.convertExpression(expr); + + Assertions.assertEquals("#metadata['pin code'] == {'1234','5678'}", result); + } + }