package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries;
import com.silverforge.elasticsearchrawclient.model.QueryTypeItem;
import com.silverforge.elasticsearchrawclient.queryDSL.Constants;
import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory;
import com.silverforge.elasticsearchrawclient.queryDSL.operators.LogicOperator;
import com.silverforge.elasticsearchrawclient.queryDSL.operators.ZeroToOneRangeOperator;
import com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries.common.MinimumShouldMatchQuery;
import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList;
public class CommonTermsQuery
extends MinimumShouldMatchQuery {
private QueryTypeArrayList<QueryTypeItem> queryBag;
protected CommonTermsQuery(QueryTypeArrayList<QueryTypeItem> queryBag) {
this.queryBag = queryBag;
}
@Override
public String getQueryString() {
return QueryFactory
.commonTermsQueryGenerator()
.generate(queryBag);
}
public static Init<?> builder() {
return new CommonTermsQueryBuilder();
}
public static class CommonTermsQueryBuilder extends Init<CommonTermsQueryBuilder> {
@Override
protected CommonTermsQueryBuilder self() {
return this;
}
}
public static abstract class Init<T extends Init<T>>
extends MinimumShouldMatchQuery.MinimumShouldMatchInit<T> {
public T field(String fieldName) {
queryBag.addParentItem(Constants.FIELD_NAME, fieldName);
return self();
}
public T query(String query) {
queryBag.addItem(Constants.QUERY, query);
return self();
}
public T cutoffFrequency(ZeroToOneRangeOperator cutOffFrequencyOperator) {
String value = cutOffFrequencyOperator.toString();
queryBag.addItem(Constants.CUTOFF_FREQUENCY, value);
return self();
}
// region Low Freq
public T lowFreq(int value) {
queryBag.addItem(Constants.LOW_FREQ, value);
return self();
}
public T lowFreqPercentage(int value) {
queryBag.addPercentageItem(Constants.LOW_FREQ, value);
return self();
}
public T lowFreqPercentage(float value) {
queryBag.addPercentageItem(Constants.LOW_FREQ, value);
return self();
}
public T lowFreqCombination(String expression) {
queryBag.addItem(Constants.LOW_FREQ, expression);
return self();
}
// endregion
// region High Freq
public T highFreq(int value) {
queryBag.addItem(Constants.HIGH_FREQ, value);
return self();
}
public T highFreqPercentage(int value) {
queryBag.addPercentageItem(Constants.HIGH_FREQ, value);
return self();
}
public T highFreqPercentage(float value) {
queryBag.addPercentageItem(Constants.HIGH_FREQ, value);
return self();
}
public T highFreqCombination(String expression) {
queryBag.addItem(Constants.HIGH_FREQ, expression);
return self();
}
// endregion
public T lowFreqOperator(LogicOperator lowFreqOperator) {
String value = lowFreqOperator.toString();
queryBag.addItem(Constants.LOW_FREQ_OPERATOR, value);
return self();
}
public T highFreqOperator(LogicOperator highFreqOperator) {
String value = highFreqOperator.toString();
queryBag.addItem(Constants.HIGH_FREQ_OPERATOR, value);
return self();
}
public CommonTermsQuery build() {
return new CommonTermsQuery(queryBag);
}
}
}