| 
25 | 25 | import org.springframework.ai.vectorstore.filter.converter.AbstractFilterExpressionConverter;  | 
26 | 26 | 
 
  | 
27 | 27 | /**  | 
28 |  | - * Converts {@link Expression} into PgVector metadata filter expression format.  | 
29 |  | - * (https://www.postgresql.org/docs/current/functions-json.html)  | 
 | 28 | + * Converts {@link Expression} into PgVector metadata filter expression format. (<a href=  | 
 | 29 | + * "https://www.postgresql.org/docs/current/functions-json.html">functions-json</a>)  | 
30 | 30 |  *  | 
31 | 31 |  * @author Muthukumaran Navaneethakrishnan  | 
32 | 32 |  * @author Christian Tzolov  | 
 | 33 | + * @author Sun Yuhan  | 
33 | 34 |  */  | 
34 | 35 | public class PgVectorFilterExpressionConverter extends AbstractFilterExpressionConverter {  | 
35 | 36 | 
 
  | 
36 | 37 | 	@Override  | 
37 | 38 | 	protected void doExpression(Expression expression, StringBuilder context) {  | 
38 |  | -		if (expression.type() == Filter.ExpressionType.IN) {  | 
39 |  | -			handleIn(expression, context);  | 
40 |  | -		}  | 
41 |  | -		else if (expression.type() == Filter.ExpressionType.NIN) {  | 
42 |  | -			handleNotIn(expression, context);  | 
43 |  | -		}  | 
44 |  | -		else {  | 
45 |  | -			this.convertOperand(expression.left(), context);  | 
46 |  | -			context.append(getOperationSymbol(expression));  | 
47 |  | -			this.convertOperand(expression.right(), context);  | 
 | 39 | +		switch (expression.type()) {  | 
 | 40 | +			case IN -> handleIn(expression, context);  | 
 | 41 | +			case NIN -> handleNotIn(expression, context);  | 
 | 42 | +			case AND, OR -> handleAndOr(expression, context);  | 
 | 43 | +			default -> {  | 
 | 44 | +				this.convertOperand(expression.left(), context);  | 
 | 45 | +				context.append(getOperationSymbol(expression));  | 
 | 46 | +				this.convertOperand(expression.right(), context);  | 
 | 47 | +			}  | 
48 | 48 | 		}  | 
49 | 49 | 	}  | 
50 | 50 | 
 
  | 
@@ -77,6 +77,14 @@ private void handleNotIn(Expression expression, StringBuilder context) {  | 
77 | 77 | 		context.append(")");  | 
78 | 78 | 	}  | 
79 | 79 | 
 
  | 
 | 80 | +	private void handleAndOr(Expression expression, StringBuilder context) {  | 
 | 81 | +		context.append("(");  | 
 | 82 | +		this.convertOperand(expression.left(), context);  | 
 | 83 | +		context.append(getOperationSymbol(expression));  | 
 | 84 | +		this.convertOperand(expression.right(), context);  | 
 | 85 | +		context.append(")");  | 
 | 86 | +	}  | 
 | 87 | + | 
80 | 88 | 	private String getOperationSymbol(Expression exp) {  | 
81 | 89 | 		switch (exp.type()) {  | 
82 | 90 | 			case AND:  | 
 | 
0 commit comments