@@ -422,78 +422,50 @@ private <T> CloseableIterator<T> doStream(long scrollTimeInMillis, ScrolledPage<
422
422
423
423
@ Override
424
424
public <T > long count (CriteriaQuery criteriaQuery , Class <T > clazz ) {
425
- QueryBuilder elasticsearchQuery = new CriteriaQueryProcessor ().createQueryFromCriteria (criteriaQuery .getCriteria ());
426
- QueryBuilder elasticsearchFilter = new CriteriaFilterProcessor ()
427
- .createFilterFromCriteria (criteriaQuery .getCriteria ());
428
-
429
- if (elasticsearchFilter == null ) {
430
- return doCount (prepareCount (criteriaQuery , clazz ), elasticsearchQuery );
431
- } else {
432
- // filter could not be set into CountRequestBuilder, convert request into search request
433
- return doCount (prepareSearch (criteriaQuery , clazz ), elasticsearchQuery , elasticsearchFilter );
434
- }
425
+ return doCount (criteriaQuery , clazz );
435
426
}
436
427
437
428
@ Override
438
429
public <T > long count (SearchQuery searchQuery , Class <T > clazz ) {
439
- QueryBuilder elasticsearchQuery = searchQuery .getQuery ();
440
- QueryBuilder elasticsearchFilter = searchQuery .getFilter ();
441
-
442
- if (elasticsearchFilter == null ) {
443
- return doCount (prepareCount (searchQuery , clazz ), elasticsearchQuery );
444
- } else {
445
- // filter could not be set into CountRequestBuilder, convert request into search request
446
- return doCount (prepareSearch (searchQuery , clazz ), elasticsearchQuery , elasticsearchFilter );
447
- }
430
+ return doCount (searchQuery , clazz );
448
431
}
449
432
450
- @ Override
451
- public <T > long count (CriteriaQuery query ) {
452
- return count (query , null );
453
- }
433
+ private <T > long doCount (Query query , Class <T > clazz ) {
434
+ SearchRequestBuilder searchRequestBuilder = mapQuery (query , clazz );
435
+ searchRequestBuilder .setSize (0 );
454
436
455
- @ Override
456
- public <T > long count (SearchQuery query ) {
457
- return count (query , null );
437
+ return SearchHitsUtil .getTotalCount (searchRequestBuilder .execute ().actionGet ().getHits ());
458
438
}
459
439
460
- private long doCount (SearchRequestBuilder countRequestBuilder , QueryBuilder elasticsearchQuery ) {
440
+ private <T > SearchRequestBuilder mapQuery (Query query , Class <T > clazz ) {
441
+ QueryBuilder elasticsearchQuery ;
442
+ QueryBuilder elasticsearchFilter ;
461
443
462
- if (elasticsearchQuery != null ) {
463
- countRequestBuilder .setQuery (elasticsearchQuery );
444
+ if (query instanceof SearchQuery ) {
445
+ SearchQuery searchQuery = (SearchQuery ) query ;
446
+ elasticsearchQuery = searchQuery .getQuery ();
447
+ elasticsearchFilter = searchQuery .getFilter ();
448
+ } else if (query instanceof CriteriaQuery ) {
449
+ CriteriaQuery criteriaQuery = (CriteriaQuery ) query ;
450
+ elasticsearchQuery = new CriteriaQueryProcessor ().createQueryFromCriteria (criteriaQuery .getCriteria ());
451
+ elasticsearchFilter = new CriteriaFilterProcessor ().createFilterFromCriteria (criteriaQuery .getCriteria ());
452
+ } else {
453
+ throw new IllegalArgumentException ("unhandled Query implementation " + query .getClass ().getName ());
464
454
}
465
- return SearchHitsUtil .getTotalCount (countRequestBuilder .execute ().actionGet ().getHits ());
466
- }
467
455
468
- private long doCount ( SearchRequestBuilder searchRequestBuilder , QueryBuilder elasticsearchQuery ,
469
- QueryBuilder elasticsearchFilter ) {
456
+ SearchRequestBuilder searchRequestBuilder = prepareSearch ( query , clazz );
457
+
470
458
if (elasticsearchQuery != null ) {
471
459
searchRequestBuilder .setQuery (elasticsearchQuery );
472
460
} else {
473
461
searchRequestBuilder .setQuery (QueryBuilders .matchAllQuery ());
474
462
}
463
+
475
464
if (elasticsearchFilter != null ) {
476
465
searchRequestBuilder .setPostFilter (elasticsearchFilter );
477
466
}
478
- return SearchHitsUtil .getTotalCount (searchRequestBuilder .execute ().actionGet ().getHits ());
479
- }
480
-
481
- private <T > SearchRequestBuilder prepareCount (Query query , Class <T > clazz ) {
482
- String indexName [] = !isEmpty (query .getIndices ())
483
- ? query .getIndices ().toArray (new String [query .getIndices ().size ()])
484
- : retrieveIndexNameFromPersistentEntity (clazz );
485
- String types [] = !isEmpty (query .getTypes ()) ? query .getTypes ().toArray (new String [query .getTypes ().size ()])
486
- : retrieveTypeFromPersistentEntity (clazz );
487
-
488
- Assert .notNull (indexName , "No index defined for Query" );
489
-
490
- SearchRequestBuilder countRequestBuilder = client .prepareSearch (indexName );
491
467
492
- if (types != null ) {
493
- countRequestBuilder .setTypes (types );
494
- }
495
- countRequestBuilder .setSize (0 );
496
- return countRequestBuilder ;
468
+ return searchRequestBuilder ;
497
469
}
498
470
499
471
@ Override
@@ -1033,6 +1005,7 @@ private <T> SearchRequestBuilder prepareSearch(Query query, Class<T> clazz) {
1033
1005
1034
1006
private SearchRequestBuilder prepareSearch (Query query , @ Nullable ElasticsearchPersistentEntity <?> entity ) {
1035
1007
Assert .notNull (query .getIndices (), "No index defined for Query" );
1008
+ Assert .notEmpty (query .getIndices (), "No index defined for Query" );
1036
1009
Assert .notNull (query .getTypes (), "No type defined for Query" );
1037
1010
1038
1011
int startRecord = 0 ;
@@ -1196,10 +1169,18 @@ private void setPersistentEntityId(Object entity, String id) {
1196
1169
1197
1170
private void setPersistentEntityIndexAndType (Query query , Class clazz ) {
1198
1171
if (query .getIndices ().isEmpty ()) {
1199
- query .addIndices (retrieveIndexNameFromPersistentEntity (clazz ));
1172
+ String [] indices = retrieveIndexNameFromPersistentEntity (clazz );
1173
+
1174
+ if (indices != null ) {
1175
+ query .addIndices (indices );
1176
+ }
1200
1177
}
1201
1178
if (query .getTypes ().isEmpty ()) {
1202
- query .addTypes (retrieveTypeFromPersistentEntity (clazz ));
1179
+ String [] types = retrieveTypeFromPersistentEntity (clazz );
1180
+
1181
+ if (types != null ) {
1182
+ query .addTypes (types );
1183
+ }
1203
1184
}
1204
1185
}
1205
1186
0 commit comments