
com.redis.om.spring.search.stream.predicates.numeric.BetweenPredicate Maven / Gradle / Ivy
package com.redis.om.spring.search.stream.predicates.numeric;
import java.lang.reflect.Field;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import com.redis.om.spring.search.stream.predicates.BaseAbstractPredicate;
import io.redisearch.querybuilder.Node;
import io.redisearch.querybuilder.QueryBuilder;
import io.redisearch.querybuilder.Values;
public class BetweenPredicate extends BaseAbstractPredicate {
private T min;
private T max;
public BetweenPredicate(Field field, T min, T max) {
super(field);
this.min = min;
this.max = max;
}
public T getMin() {
return min;
}
public T getMax() {
return max;
}
@Override
public Node apply(Node root) {
Class> cls = min.getClass();
if (cls == LocalDate.class) {
LocalDate minLocalDate = (LocalDate) min;
LocalDate maxLocalDate = (LocalDate) max;
Instant minInstant = minLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
Instant maxInstant = maxLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
Long minUnixTime = minInstant.getEpochSecond();
Long maxUnixTime = maxInstant.getEpochSecond();
return QueryBuilder.intersect(root).add(getField().getName(),
Values.between(Double.valueOf(minUnixTime.toString()), Double.valueOf(maxUnixTime.toString())));
} else if (cls == Integer.class) {
return QueryBuilder.intersect(root).add(getField().getName(),
Values.between(Integer.valueOf(getMin().toString()), Integer.valueOf(getMax().toString())));
} else if (cls == Double.class) {
return QueryBuilder.intersect(root).add(getField().getName(),
Values.between(Double.valueOf(getMin().toString()), Double.valueOf(getMax().toString())));
} else {
return root;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy