* Used to generate queries against Elasticsearch for filter related queries.
*/
public class FilterQueryBuilder {
-
+
private static final int EXISTING_FILTERS_LIMIT = 0;
private static final int SHOULD_BRANCH_LIMIT = 2;
- public static JsonObject createFilteredBoolQueryObject(List<SearchFilter> searchFilters,
- int minShouldMatch, List<String> fields) {
+ public static JsonObject createFilteredBoolQueryObject(FiltersConfig filtersConfig, List<SearchFilter> searchFilters, int minShouldMatch, List<String> fields) {
if (searchFilters == null || searchFilters.size() == 0) {
return null;
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
- FiltersConfig filters = FiltersConfig.getInstance();
-
for (SearchFilter searchFilter : searchFilters) {
searchFilterValueSize = searchFilter.getValues().size();
/*
* translate the filter-id into the filter-name from the oxm data model/config file
*/
- UiFilterConfig filter = filters.getFilterById(searchFilter.getFilterId());
+ UiFilterConfig filter = filtersConfig.getFilterById(searchFilter.getFilterId());
if (filter == null || filter.getFilterName() == null) {
// log error and continue
} else {
-
+
String fieldName = filter.getDataSource().getFieldName();
- if (!fields.contains(fieldName)) {
+ if(!fields.contains(fieldName)) {
fields.add(fieldName);
}
-
+
if (searchFilterValueSize >= SHOULD_BRANCH_LIMIT) {
// Add should branches
for (String filterValue : searchFilter.getValues()) {
- boolQueryBuilder.addShouldFilter(new MatchFilterCriteriaEntity(fieldName, filterValue));
+ boolQueryBuilder.addShouldFilter(new MatchFilterCriteriaEntity(fieldName, filterValue));
}
} else if (searchFilterValueSize > EXISTING_FILTERS_LIMIT) {
}
boolQueryBuilder.setMinShouldMatch(minShouldMatch);
-
+
return boolQueryBuilder.getJsonObject();
}
- public static JsonObject createAggregationQueryArray(List<SearchFilter> searchFilters) {
+ public static JsonObject createAggregationQueryArray(FiltersConfig filtersConfig, List<SearchFilter> searchFilters) {
if (searchFilters == null || searchFilters.size() == 0) {
// log error
FilteredAggregationQueryBuilder aggQueryBuilder = new FilteredAggregationQueryBuilder();
- FiltersConfig filters = FiltersConfig.getInstance();
-
for (SearchFilter searchFilter : searchFilters) {
/*
* translate the filter-id into the filter-name from the oxm data model/config file
*/
- UiFilterConfig filter = filters.getFilterById(searchFilter.getFilterId());
+ UiFilterConfig filter = filtersConfig.getFilterById(searchFilter.getFilterId());
if (filter == null || filter.getFilterName() == null) {
// log error and continue
return aggQueryBuilder.getJsonObject();
}
- public static JsonObject createCombinedBoolAndAggQuery(List<SearchFilter> searchFilters,
- int minShouldMatch) {
+ public static JsonObject createCombinedBoolAndAggQuery(FiltersConfig filtersConfig, List<SearchFilter> searchFilters, int minShouldMatch) {
JsonObjectBuilder wrappedQueryBuilder = Json.createObjectBuilder();
- if (searchFilters != null) {
+ if(searchFilters != null) {
List<String> fields = new ArrayList<String>();
- JsonObject boolQuery = createFilteredBoolQueryObject(searchFilters, minShouldMatch, fields);
- JsonObject aggQuery = createAggregationQueryArray(searchFilters);
+ JsonObject boolQuery = createFilteredBoolQueryObject(filtersConfig,searchFilters, minShouldMatch, fields);
+ JsonObject aggQuery = createAggregationQueryArray(filtersConfig, searchFilters);
if (boolQuery != null) {
wrappedQueryBuilder.add("size", 0);
-
- JsonArrayBuilder filedsArrayBuilder = Json.createBuilderFactory(null).createArrayBuilder(); // TODO
- // ->
- // Should
- // we
- // use
- // a
- // class
- // instance
- // factory?
- for (String field : fields) {
+
+ JsonArrayBuilder filedsArrayBuilder = Json.createBuilderFactory(null).createArrayBuilder(); // TODO -> Should we use a class instance factory?
+ for(String field : fields) {
filedsArrayBuilder.add(field);
}
wrappedQueryBuilder.add("fields", filedsArrayBuilder.build());
-
+
wrappedQueryBuilder.add("query", boolQuery);
}