package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries; import com.silverforge.elasticsearchrawclient.model.QueryTypeItem; import com.silverforge.elasticsearchrawclient.queryDSL.Constants; import com.silverforge.elasticsearchrawclient.definition.Functionable; import com.silverforge.elasticsearchrawclient.definition.Queryable; import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory; import com.silverforge.elasticsearchrawclient.queryDSL.operators.BoostModeOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.ScoreModeOperator; import com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries.common.BoostQuery; import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList; public class FunctionScoreQuery extends BoostQuery { private QueryTypeArrayList<QueryTypeItem> queryBag; public FunctionScoreQuery(QueryTypeArrayList<QueryTypeItem> queryBag) { this.queryBag = queryBag; } public static Init<?> builder() { return new FunctionScoreQueryBuilder(); } @Override public String getQueryString() { return QueryFactory .functionScoreQueryGenerator() .generate(queryBag); } public static class FunctionScoreQueryBuilder extends Init<FunctionScoreQueryBuilder> { @Override protected FunctionScoreQueryBuilder self() { return this; } } public static abstract class Init<T extends Init<T>> extends BoostQuery.BoostInit<T> { public T query(Queryable query) { queryBag.addItem(Constants.QUERY, query); return self(); } public T maxBoost(int maxBoost) { queryBag.addItem(Constants.MAX_BOOST, maxBoost); return self(); } public T maxBoost(float maxBoost) { queryBag.addItem(Constants.MAX_BOOST, maxBoost); return self(); } public T scoreMode(ScoreModeOperator scoreModeOperator) { String value = scoreModeOperator.toString(); queryBag.addItem(Constants.SCORE_MODE, value); return self(); } public T boostMode(BoostModeOperator boostModeOperator) { String value = boostModeOperator.toString(); queryBag.addItem(Constants.BOOST_MODE, value); return self(); } public T minScore(int minScore) { queryBag.addItem(Constants.MIN_SCORE, minScore); return self(); } public T minScore(float minScore) { queryBag.addItem(Constants.MIN_SCORE, minScore); return self(); } public T functions(Functionable... function) { queryBag.addItem(Constants.FUNCTIONS, function); return self(); } public FunctionScoreQuery build() { return new FunctionScoreQuery(queryBag); } } }