Class FilterExpressionTextParser

java.lang.Object
org.springframework.ai.vectorstore.filter.FilterExpressionTextParser

public class FilterExpressionTextParser extends Object
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
  • Constructor Details

    • FilterExpressionTextParser

      public FilterExpressionTextParser()
    • FilterExpressionTextParser

      public FilterExpressionTextParser(org.antlr.v4.runtime.ANTLRErrorStrategy handler)
  • Method Details