List of usage examples for org.springframework.data.elasticsearch.core.query Criteria getCriteriaChain
public List<Criteria> getCriteriaChain()
From source file:com.github.vanroy.springdata.jest.CriteriaFilterProcessor.java
QueryBuilder createFilterFromCriteria(Criteria criteria) { List<QueryBuilder> fbList = new LinkedList<QueryBuilder>(); QueryBuilder filter = null;/*w w w .j a v a 2 s . c o m*/ ListIterator<Criteria> chainIterator = criteria.getCriteriaChain().listIterator(); while (chainIterator.hasNext()) { QueryBuilder fb = null; Criteria chainedCriteria = chainIterator.next(); if (chainedCriteria.isOr()) { fb = QueryBuilders.boolQuery(); for (QueryBuilder f : createFilterFragmentForCriteria(chainedCriteria)) { ((BoolQueryBuilder) fb).should(f); } fbList.add(fb); } else if (chainedCriteria.isNegating()) { List<QueryBuilder> negationFilters = buildNegationFilter(criteria.getField().getName(), criteria.getFilterCriteriaEntries().iterator()); if (!negationFilters.isEmpty()) { fbList.addAll(negationFilters); } } else { fbList.addAll(createFilterFragmentForCriteria(chainedCriteria)); } } if (!fbList.isEmpty()) { if (fbList.size() == 1) { filter = fbList.get(0); } else { filter = QueryBuilders.boolQuery(); for (QueryBuilder f : fbList) { ((BoolQueryBuilder) filter).must(f); } } } return filter; }
From source file:com.github.vanroy.springdata.jest.CriteriaQueryProcessor.java
QueryBuilder createQueryFromCriteria(Criteria criteria) { if (criteria == null) return null; List<QueryBuilder> shouldQueryBuilderList = new LinkedList<QueryBuilder>(); List<QueryBuilder> mustNotQueryBuilderList = new LinkedList<QueryBuilder>(); List<QueryBuilder> mustQueryBuilderList = new LinkedList<QueryBuilder>(); ListIterator<Criteria> chainIterator = criteria.getCriteriaChain().listIterator(); QueryBuilder firstQuery = null;/* w ww. j ava 2s. c om*/ boolean negateFirstQuery = false; while (chainIterator.hasNext()) { Criteria chainedCriteria = chainIterator.next(); QueryBuilder queryFragmentForCriteria = createQueryFragmentForCriteria(chainedCriteria); if (queryFragmentForCriteria != null) { if (firstQuery == null) { firstQuery = queryFragmentForCriteria; negateFirstQuery = chainedCriteria.isNegating(); continue; } if (chainedCriteria.isOr()) { shouldQueryBuilderList.add(queryFragmentForCriteria); } else if (chainedCriteria.isNegating()) { mustNotQueryBuilderList.add(queryFragmentForCriteria); } else { mustQueryBuilderList.add(queryFragmentForCriteria); } } } if (firstQuery != null) { if (!shouldQueryBuilderList.isEmpty() && mustNotQueryBuilderList.isEmpty() && mustQueryBuilderList.isEmpty()) { shouldQueryBuilderList.add(0, firstQuery); } else { if (negateFirstQuery) { mustNotQueryBuilderList.add(0, firstQuery); } else { mustQueryBuilderList.add(0, firstQuery); } } } BoolQueryBuilder query = null; if (!shouldQueryBuilderList.isEmpty() || !mustNotQueryBuilderList.isEmpty() || !mustQueryBuilderList.isEmpty()) { query = boolQuery(); for (QueryBuilder qb : shouldQueryBuilderList) { query.should(qb); } for (QueryBuilder qb : mustNotQueryBuilderList) { query.mustNot(qb); } for (QueryBuilder qb : mustQueryBuilderList) { query.must(qb); } } return query; }