Class FilterExpressionTextParser
java.lang.Object
org.springframework.ai.vectorstore.filter.FilterExpressionTextParser
Parse a textual, vector-store agnostic, filter expression language into
Filter.Expression
.
The vector-store agnostic, filter expression language is defined by a formal ANTLR4
grammar (Filters.g4). The language looks and feels like a subset of the well known SQL
WHERE filter expressions. For example you can use the parser like this:
var parser = new FilterExpressionTextParser();
exp1 = parser.parse("country == 'BG'"); // creates:
|
+-> new Expression(EQ, new Key("country"), new Value("BG"));
exp2 = parser.parse("genre == 'drama' && year >= 2020"); // creates:
|
+-> new Expression(AND,
new Expression(EQ, new Key("genre"), new Value("drama")),
new Expression(GTE, new Key("year"), new Value(2020)));
exp3 = parser.parse("genre in ['comedy', 'documentary', 'drama']");
|
+-> new Expression(IN, new Key("genre"), new Value(List.of("comedy", "documentary", "drama")));
exp4 = parser.parse("year >= 2020 || country == 'BG' && city != 'Sofia'");
|
+-> new Expression(OR,
new Expression(GTE, new Key("year"), new Value(2020)),
new Expression(AND,
new Expression(EQ, new Key("country"), new Value("BG")),
new Expression(NE, new Key("city"), new Value("Sofia"))));
exp5 = parser.parse("(year >= 2020 || country == \"BG\") && city NOT IN ['Sofia', \"Plovdiv\"]"); // creates:
|
+-> new Expression(AND,
new Group(new Expression(OR, new Expression(EQ, new Key("country"), new Value("BG")),
new Expression(GTE, new Key("year"), new Value(2020)))),
new Expression(NIN, new Key("city"), new Value(List.of("Sofia", "Varna"))));
exp6 = parser.parse("isOpen == true && year >= 2020 && country IN ['BG', 'NL', 'US']"); // creates:
|
+-> new Expression(AND,
new Expression(EQ, new Key("isOpen"), new Value(true)),
new Expression(AND,
new Expression(GTE, new Key("year"), new Value(2020)),
new Expression(IN, new Key("country"), new Value(List.of("BG", "NL", "US")))));
exp7 = parser.parse("price >= 15.6 && price <= 20.13"); // creates:
|
+-> new Expression(AND,
new Expression(GTE, new Key("price"), new Value(15.6)),
new Expression(LTE, new Key("price"), new Value(20.13)));
- Author:
- Christian Tzolov
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
static class
static class
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
-
Constructor Details
-
FilterExpressionTextParser
public FilterExpressionTextParser() -
FilterExpressionTextParser
public FilterExpressionTextParser(org.antlr.v4.runtime.ANTLRErrorStrategy handler)
-
-
Method Details
-
parse
-
clearCache
public void clearCache()
-