
prerna.engine.impl.vector.MilvusVectorQueryFitlerTranslationHelper Maven / Gradle / Ivy
The newest version!
package prerna.engine.impl.vector;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import prerna.query.interpreters.sql.SqlInterpreter;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.filters.AndQueryFilter;
import prerna.query.querystruct.filters.IQueryFilter;
import prerna.query.querystruct.filters.OrQueryFilter;
import prerna.query.querystruct.filters.SimpleQueryFilter;
import prerna.query.querystruct.selectors.IQuerySelector;
import prerna.query.querystruct.selectors.QueryArithmeticSelector;
import prerna.sablecc2.om.nounmeta.NounMetadata;
public class MilvusVectorQueryFitlerTranslationHelper {
public StringBuilder processMilvusFilter(IQueryFilter filter) {
IQueryFilter.QUERY_FILTER_TYPE filterType = filter.getQueryFilterType();
if (filterType == IQueryFilter.QUERY_FILTER_TYPE.SIMPLE) {
return processSimpleQueryFilterForMilvus((SimpleQueryFilter) filter);
} else if (filterType == IQueryFilter.QUERY_FILTER_TYPE.AND) {
return processAndQueryFilterForMilvus((AndQueryFilter) filter);
} else if (filterType == IQueryFilter.QUERY_FILTER_TYPE.OR) {
return processOrQueryFilterForMilvus((OrQueryFilter) filter);
}
return null;
}
protected StringBuilder processOrQueryFilterForMilvus(OrQueryFilter filter) {
StringBuilder filterBuilder = new StringBuilder();
List filterList = filter.getFilterList();
int numAnds = filterList.size();
for (int i = 0; i < numAnds; i++) {
if (i > 0) {
filterBuilder.append(" OR ");
}
filterBuilder.append(processMilvusFilter(filterList.get(i)));
}
return filterBuilder;
}
protected StringBuilder processAndQueryFilterForMilvus(AndQueryFilter filter) {
StringBuilder filterBuilder = new StringBuilder();
List filterList = filter.getFilterList();
int numAnds = filterList.size();
for (int i = 0; i < numAnds; i++) {
if (i > 0) {
filterBuilder.append(" AND ");
}
filterBuilder.append(processMilvusFilter(filterList.get(i)));
}
return filterBuilder;
}
protected StringBuilder processSimpleQueryFilterForMilvus(SimpleQueryFilter filter) {
NounMetadata leftComparison = filter.getLComparison();
NounMetadata rightComparison = filter.getRComparison();
String comparator = filter.getComparator();
// Handling rightComparison if it is a SelectQueryStruct
if (rightComparison.getValue() instanceof SelectQueryStruct) {
SelectQueryStruct selectQueryStruct = (SelectQueryStruct) rightComparison.getValue();
List querySelectors = selectQueryStruct.getSelectors();
if (!querySelectors.isEmpty() && querySelectors.get(0) instanceof QueryArithmeticSelector) {
QueryArithmeticSelector arithmeticSelector = (QueryArithmeticSelector) querySelectors.get(0);
IQuerySelector leftOperand = arithmeticSelector.getLeftSelector();
String operator = arithmeticSelector.getMathExpr();
IQuerySelector rightOperand = arithmeticSelector.getRightSelector();
return new StringBuilder().append(leftComparison.getValue()).append(" ").append(comparator).append(" ")
.append(leftOperand.toString()).append(" ").append(operator).append(" ")
.append(rightOperand.toString());
}
}
// Handling leftComparison if it is a SelectQueryStruct
if (leftComparison.getValue() instanceof SelectQueryStruct) {
SelectQueryStruct selectQueryStruct = (SelectQueryStruct) leftComparison.getValue();
List querySelectors = selectQueryStruct.getSelectors();
if (!querySelectors.isEmpty() && querySelectors.get(0) instanceof QueryArithmeticSelector) {
QueryArithmeticSelector arithmeticSelector = (QueryArithmeticSelector) querySelectors.get(0);
IQuerySelector leftOperand = arithmeticSelector.getLeftSelector();
String operator = arithmeticSelector.getMathExpr();
IQuerySelector rightOperand = arithmeticSelector.getRightSelector();
return new StringBuilder().append(leftOperand.toString()).append(" ").append(operator).append(" ")
.append(rightOperand.toString()).append(" ").append(comparator).append(" ")
.append(rightComparison.getValue());
}
}
return addSelectorToValuesMilvusFilter(leftComparison, rightComparison, comparator);
}
protected StringBuilder addSelectorToValuesMilvusFilter(NounMetadata leftComp, NounMetadata rightComp,
String thisComparator) {
// get the left side
IQuerySelector leftSelector = (IQuerySelector) leftComp.getValue();
String leftDataType = leftSelector.getDataType();
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy