
io.redisearch.aggregation.AggregationBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jredisearch Show documentation
Show all versions of jredisearch Show documentation
Official client for Redis Search
package io.redisearch.aggregation;
import io.redisearch.aggregation.reducers.Reducer;
import redis.clients.jedis.util.SafeEncoder;
import java.util.*;
/**
* @author Guy Korland
*/
public class AggregationBuilder {
private final List args = new ArrayList<>();
private boolean isWithCursor = false;
public AggregationBuilder(String query) {
args.add(query);
}
public AggregationBuilder() {
this("*");
}
public AggregationBuilder load(String ...fields) {
addCmdArgs(args, "LOAD", Arrays.asList(fields));
return this;
}
public AggregationBuilder limit(int offset, int count) {
Limit limit = new Limit(offset, count);
limit.addArgs(args);
return this;
}
public AggregationBuilder limit(int count) {
return limit(0, count);
}
public AggregationBuilder sortBy(SortedField ...fields) {
args.add("SORTBY");
args.add(Integer.toString(fields.length * 2));
for (SortedField field : fields) {
args.add(field.getField());
args.add(field.getOrder());
}
return this;
}
public AggregationBuilder sortBy(int max, SortedField ...fields) {
sortBy(fields);
if (max > 0) {
args.add("MAX");
args.add(Integer.toString(max));
}
return this;
}
public AggregationBuilder sortByAsc(String field) {
return sortBy(SortedField.asc(field));
}
public AggregationBuilder sortByDesc(String field) {
return sortBy(SortedField.desc(field));
}
public AggregationBuilder apply(String projection, String alias) {
args.add("APPLY");
args.add(projection);
args.add("AS");
args.add(alias);
return this;
}
public AggregationBuilder groupBy(Collection fields, Collection reducers) {
String[] fieldsArr = new String[fields.size()];
Group g = new Group(fields.toArray(fieldsArr));
for (Reducer r : reducers) {
g.reduce(r);
}
groupBy(g);
return this;
}
public AggregationBuilder groupBy(String field, Reducer ...reducers) {
return groupBy(Collections.singletonList(field), Arrays.asList(reducers));
}
public AggregationBuilder groupBy(Group group) {
args.add("GROUPBY");
group.addArgs(args);
return this;
}
public AggregationBuilder filter(String expression) {
args.add("FILTER");
args.add(expression);
return this;
}
public AggregationBuilder cursor(int count, long maxIdle) {
isWithCursor = true;
if(count > 0) {
args.add("WITHCURSOR");
args.add("COUNT");
args.add(Integer.toString(count));
if(maxIdle < Long.MAX_VALUE && maxIdle>=0) {
args.add("MAXIDLE");
args.add(Long.toString(maxIdle));
}
}
return this;
}
private static void addCmdLen(List list, String cmd, int len) {
list.add(cmd);
list.add(Integer.toString(len));
}
private static void addCmdArgs(List dst, String cmd, List src) {
addCmdLen(dst, cmd, src.size());
dst.addAll(src);
}
public List getArgs() {
return Collections.unmodifiableList(args);
}
public void serializeRedisArgs(List redisArgs) {
for (String s : getArgs()) {
redisArgs.add(SafeEncoder.encode(s));
}
}
public String getArgsString() {
StringJoiner sj = new StringJoiner(" ");
for (String s : getArgs()) {
sj.add(s);
}
return sj.toString();
}
public boolean isWithCursor() {
return isWithCursor;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy