@@ -532,21 +532,34 @@ public <T> long count(SearchQuery searchQuery, Class<T> clazz) {
532
532
QueryBuilder elasticsearchFilter = searchQuery .getFilter ();
533
533
534
534
if (elasticsearchFilter == null ) {
535
- return doCount (prepareCount (searchQuery , clazz ), elasticsearchQuery );
535
+ // return doCount(prepareCount(searchQuery, clazz),
536
+ // elasticsearchQuery);
537
+ return doCount (prepareSearch (searchQuery , clazz ), elasticsearchQuery , elasticsearchFilter );
536
538
} else {
537
539
// filter could not be set into CountRequestBuilder, convert request into search request
538
540
return doCount (prepareSearch (searchQuery , clazz ), elasticsearchQuery , elasticsearchFilter );
539
541
}
540
542
}
541
543
542
- @ Override
543
- public <T > long count (CriteriaQuery query ) {
544
- return count (query , null );
545
- }
544
+ private <T > SearchRequest mapQuery (Query query , Class <T > clazz ) {
545
+ QueryBuilder elasticsearchQuery ;
546
+ QueryBuilder elasticsearchFilter ;
546
547
547
- @ Override
548
- public <T > long count (SearchQuery query ) {
549
- return count (query , null );
548
+ if (query instanceof SearchQuery ) {
549
+ SearchQuery searchQuery = (SearchQuery ) query ;
550
+ elasticsearchQuery = searchQuery .getQuery ();
551
+ elasticsearchFilter = searchQuery .getFilter ();
552
+ } else if (query instanceof CriteriaQuery ) {
553
+ CriteriaQuery criteriaQuery = (CriteriaQuery ) query ;
554
+ elasticsearchQuery = new CriteriaQueryProcessor ().createQueryFromCriteria (criteriaQuery .getCriteria ());
555
+ elasticsearchFilter = new CriteriaFilterProcessor ().createFilterFromCriteria (criteriaQuery .getCriteria ());
556
+ } else {
557
+ throw new IllegalArgumentException ("unhandled Query implementation " + query .getClass ().getName ());
558
+ }
559
+
560
+ SearchRequest searchRequest = prepareSearch (query , clazz );
561
+
562
+ return searchRequest ;
550
563
}
551
564
552
565
private long doCount (SearchRequest countRequest , QueryBuilder elasticsearchQuery ) {
@@ -572,13 +585,12 @@ private long doCount(SearchRequest searchRequest, QueryBuilder elasticsearchQuer
572
585
if (elasticsearchFilter != null ) {
573
586
searchRequest .source ().postFilter (elasticsearchFilter );
574
587
}
575
- SearchResponse response ;
588
+
576
589
try {
577
- response = client .search (searchRequest , RequestOptions .DEFAULT );
590
+ return SearchHitsUtil . getTotalCount ( client .search (searchRequest , RequestOptions .DEFAULT ). getHits () );
578
591
} catch (IOException e ) {
579
592
throw new ElasticsearchException ("Error for search request: " + searchRequest .toString (), e );
580
593
}
581
- return SearchHitsUtil .getTotalCount (response .getHits ());
582
594
}
583
595
584
596
private <T > SearchRequest prepareCount (Query query , Class <T > clazz ) {
@@ -1473,10 +1485,18 @@ private void setPersistentEntityId(Object entity, String id) {
1473
1485
1474
1486
private void setPersistentEntityIndexAndType (Query query , Class clazz ) {
1475
1487
if (query .getIndices ().isEmpty ()) {
1476
- query .addIndices (retrieveIndexNameFromPersistentEntity (clazz ));
1488
+ String [] indices = retrieveIndexNameFromPersistentEntity (clazz );
1489
+
1490
+ if (indices != null ) {
1491
+ query .addIndices (indices );
1492
+ }
1477
1493
}
1478
1494
if (query .getTypes ().isEmpty ()) {
1479
- query .addTypes (retrieveTypeFromPersistentEntity (clazz ));
1495
+ String [] types = retrieveTypeFromPersistentEntity (clazz );
1496
+
1497
+ if (types != null ) {
1498
+ query .addTypes (types );
1499
+ }
1480
1500
}
1481
1501
}
1482
1502
0 commit comments