@@ -386,22 +386,26 @@ public SearchRequestBuilder generate(QueryBuilderAdapter queryBuilderAdapter) {
386
386
SearchRequestBuilder searchRequestBuilder = esClient .getClient ().prepareSearch (this .indices );
387
387
searchRequestBuilder .setSearchType (SearchType .QUERY_THEN_FETCH );
388
388
QueryBuilder query = queryBuilder ;
389
+ if (functionScore != null ) {
390
+ query = QueryBuilders .functionScoreQuery (query , ScoreFunctionBuilders .scriptFunction (functionScore ));
391
+ }
389
392
if (queryBuilderAdapter != null ) {
390
393
query = queryBuilderAdapter .adapt (queryBuilder );
391
394
}
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
398
396
if (classes != null && classes .length > 0 ) {
397
+ QueryBuilder newQB = null ;
399
398
addFetchContext (searchRequestBuilder );
400
399
Set <String > aggIds = Sets .newHashSet ();
401
400
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 ;
403
405
}
404
406
}
407
+ searchRequestBuilder .setQuery (query );
408
+ searchRequestBuilder .setTypes (getTypes ());
405
409
if (fieldSort != null ) {
406
410
FieldSortBuilder sortBuilder = SortBuilders .fieldSort (fieldSort );
407
411
if (fieldSortDesc ) {
@@ -475,9 +479,10 @@ private void addFetchContext(SearchRequestBuilder searchRequestBuilder) {
475
479
searchRequestBuilder .setFetchSource (inc , exc );
476
480
}
477
481
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 ) {
479
484
if (clazz == null ) {
480
- return ;
485
+ return query ;
481
486
}
482
487
final List <FilterBuilder > esFilters = buildFilters (clazz .getName ());
483
488
if (customFilter != null ) {
@@ -486,15 +491,18 @@ private void addFilters(SearchRequestBuilder searchRequestBuilder, FilterBuilder
486
491
FilterBuilder filter = null ;
487
492
if (esFilters .size () > 0 ) {
488
493
filter = getAndFilter (esFilters );
489
- searchRequestBuilder .setPostFilter (filter );
494
+ if (filter != null ) {
495
+ query = QueryBuilders .filteredQuery (query , filter );
496
+ }
490
497
}
491
498
if (facets ) {
492
499
if (filters == null ) {
493
- addAggregations (new HashMap < String , String []> (), clazz .getName (), searchRequestBuilder , aggIds );
500
+ addAggregations (new HashMap (), clazz .getName (), searchRequestBuilder , aggIds );
494
501
} else {
495
502
addAggregations (filters , clazz .getName (), searchRequestBuilder , aggIds );
496
503
}
497
504
}
505
+ return query ;
498
506
}
499
507
500
508
private void addAggregations (Map <String , String []> filters , String className , SearchRequestBuilder searchRequestBuilder , Set <String > aggIds ) {
0 commit comments