package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries;
import com.silverforge.elasticsearchrawclient.model.QueryTypeItem;
import com.silverforge.elasticsearchrawclient.queryDSL.Constants;
import com.silverforge.elasticsearchrawclient.definition.MultiTermQueryable;
import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory;
import com.silverforge.elasticsearchrawclient.queryDSL.operators.FuzzinessOperator;
import com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries.common.FieldValueQuery;
import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList;
public class FuzzyQuery
extends FieldValueQuery implements MultiTermQueryable {
private QueryTypeArrayList<QueryTypeItem> queryBag;
FuzzyQuery(QueryTypeArrayList<QueryTypeItem> queryBag) {
this.queryBag = queryBag;
}
@Override
public String getQueryString() {
return QueryFactory
.fuzzyQueryGenerator()
.generate(queryBag);
}
public static Init<?> builder() {
return new FuzzyQueryBuilder();
}
public static class FuzzyQueryBuilder
extends Init<FuzzyQueryBuilder> {
@Override
protected FuzzyQueryBuilder self() {
return this;
}
}
public static abstract class Init<T extends Init<T>>
extends FieldValueInit<T> {
public T boost(int boost) {
queryBag.addItem(Constants.BOOST, boost);
return self();
}
public T boost(float boost) {
queryBag.addItem(Constants.BOOST, boost);
return self();
}
public T fuzziness(FuzzinessOperator fuzzinessOperator) {
String value = fuzzinessOperator.toString();
queryBag.addItem(Constants.FUZZINESS, value);
return self();
}
public T fuzziness(String fuzzinessOperator) {
queryBag.addItem(Constants.FUZZINESS, fuzzinessOperator);
return self();
}
public T maxExpansions(int maxExpansions) {
queryBag.addItem(Constants.MAX_EXPANSIONS, maxExpansions);
return self();
}
public T prefixLength(int prefixLength) {
queryBag.addItem(Constants.PREFIX_LENGTH, prefixLength);
return self();
}
public FuzzyQuery build() {
return new FuzzyQuery(queryBag);
}
}
}