package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries;
import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory;
import com.silverforge.elasticsearchrawclient.queryDSL.operators.ZeroToOneRangeOperator;
import com.silverforge.elasticsearchrawclient.queryDSL.Constants;
import com.silverforge.elasticsearchrawclient.model.QueryTypeItem;
import com.silverforge.elasticsearchrawclient.definition.Queryable;
import com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries.common.BoostQuery;
import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList;
public class DisMaxQuery
extends BoostQuery {
private QueryTypeArrayList<QueryTypeItem> queryBag;
protected DisMaxQuery(QueryTypeArrayList<QueryTypeItem> queryBag) {
this.queryBag = queryBag;
}
public static Init<?> builder() {
return new DisMaxQueryBuilder();
}
@Override
public String getQueryString() {
return QueryFactory
.disMaxQueryGenerator()
.generate(queryBag);
}
public static class DisMaxQueryBuilder
extends Init<DisMaxQueryBuilder> {
@Override
protected DisMaxQueryBuilder self() {
return this;
}
}
public static abstract class Init<T extends Init<T>>
extends BoostQuery.BoostInit<T> {
public T tieBreaker(ZeroToOneRangeOperator tieBreakerOperator) {
String value = tieBreakerOperator.toString();
queryBag.addItem(Constants.TIE_BREAKER, value);
return self();
}
public T queries(Queryable... queries) {
queryBag.addItem(Constants.QUERIES, queries);
return self();
}
public DisMaxQuery build() {
return new DisMaxQuery(queryBag);
}
}
}