package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries; import com.silverforge.elasticsearchrawclient.queryDSL.Constants; import com.silverforge.elasticsearchrawclient.model.QueryTypeItem; import com.silverforge.elasticsearchrawclient.definition.Queryable; import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory; import com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries.common.MinimumShouldMatchQuery; import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList; public class BoolQuery extends MinimumShouldMatchQuery { private QueryTypeArrayList<QueryTypeItem> queryBag; public BoolQuery(QueryTypeArrayList<QueryTypeItem> queryBag) { this.queryBag = queryBag; } public static Init<?> builder() { return new BoolQueryBuilder(); } @Override public String getQueryString() { return QueryFactory .boolQueryGenerator() .generate(queryBag); } public static class BoolQueryBuilder extends Init<BoolQueryBuilder> { @Override protected BoolQueryBuilder self() { return this; } } public static abstract class Init<T extends Init<T>> extends MinimumShouldMatchQuery.MinimumShouldMatchInit<T> { protected abstract T self(); public T must(Queryable... queries) { queryBag.addItem(Constants.MUST, queries); return self(); } public T mustNot(Queryable... queries) { queryBag.addItem(Constants.MUST_NOT, queries); return self(); } public T should(Queryable... queries) { queryBag.addItem(Constants.SHOULD, queries); return self(); } public T disableCoord(boolean value) { queryBag.addItem(Constants.DISABLE_COORD, value); return self(); } 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 BoolQuery build() { return new BoolQuery(queryBag); } } }