@@ -386,22 +386,26 @@ public SearchRequestBuilder generate(QueryBuilderAdapter queryBuilderAdapter) {
386386 SearchRequestBuilder searchRequestBuilder = esClient .getClient ().prepareSearch (this .indices );
387387 searchRequestBuilder .setSearchType (SearchType .QUERY_THEN_FETCH );
388388 QueryBuilder query = queryBuilder ;
389+ if (functionScore != null ) {
390+ query = QueryBuilders .functionScoreQuery (query , ScoreFunctionBuilders .scriptFunction (functionScore ));
391+ }
389392 if (queryBuilderAdapter != null ) {
390393 query = queryBuilderAdapter .adapt (queryBuilder );
391394 }
392- if (functionScore == null ) {
393- searchRequestBuilder .setQuery (query );
394- } else {
395- searchRequestBuilder .setQuery (QueryBuilders .functionScoreQuery (query , ScoreFunctionBuilders .scriptFunction (functionScore )));
396- }
397- searchRequestBuilder .setTypes (getTypes ());
395+ // create a filtered query with filters and add aggregations
398396 if (classes != null && classes .length > 0 ) {
397+ QueryBuilder newQB = null ;
399398 addFetchContext (searchRequestBuilder );
400399 Set <String > aggIds = Sets .newHashSet ();
401400 for (Class <?> clazz : classes ) {
402- addFilters (searchRequestBuilder , customFilter , clazz , aggIds );
401+ newQB = addFilters (query , searchRequestBuilder , customFilter , clazz , aggIds );
402+ }
403+ if (newQB != null ) {
404+ query = newQB ;
403405 }
404406 }
407+ searchRequestBuilder .setQuery (query );
408+ searchRequestBuilder .setTypes (getTypes ());
405409 if (fieldSort != null ) {
406410 FieldSortBuilder sortBuilder = SortBuilders .fieldSort (fieldSort );
407411 if (fieldSortDesc ) {
@@ -475,9 +479,10 @@ private void addFetchContext(SearchRequestBuilder searchRequestBuilder) {
475479 searchRequestBuilder .setFetchSource (inc , exc );
476480 }
477481
478- private void addFilters (SearchRequestBuilder searchRequestBuilder , FilterBuilder customFilter , Class <?> clazz , Set <String > aggIds ) {
482+ private QueryBuilder addFilters (QueryBuilder query , SearchRequestBuilder searchRequestBuilder , FilterBuilder customFilter , Class <?> clazz ,
483+ Set <String > aggIds ) {
479484 if (clazz == null ) {
480- return ;
485+ return query ;
481486 }
482487 final List <FilterBuilder > esFilters = buildFilters (clazz .getName ());
483488 if (customFilter != null ) {
@@ -486,15 +491,18 @@ private void addFilters(SearchRequestBuilder searchRequestBuilder, FilterBuilder
486491 FilterBuilder filter = null ;
487492 if (esFilters .size () > 0 ) {
488493 filter = getAndFilter (esFilters );
489- searchRequestBuilder .setPostFilter (filter );
494+ if (filter != null ) {
495+ query = QueryBuilders .filteredQuery (query , filter );
496+ }
490497 }
491498 if (facets ) {
492499 if (filters == null ) {
493- addAggregations (new HashMap < String , String []> (), clazz .getName (), searchRequestBuilder , aggIds );
500+ addAggregations (new HashMap (), clazz .getName (), searchRequestBuilder , aggIds );
494501 } else {
495502 addAggregations (filters , clazz .getName (), searchRequestBuilder , aggIds );
496503 }
497504 }
505+ return query ;
498506 }
499507
500508 private void addAggregations (Map <String , String []> filters , String className , SearchRequestBuilder searchRequestBuilder , Set <String > aggIds ) {
0 commit comments