147
147
* @author Gyula Attila Csorogi
148
148
*/
149
149
public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate
150
- implements EsClient < RestHighLevelClient >, ApplicationContextAware {
150
+ implements ApplicationContextAware {
151
151
152
152
private static final Logger logger = LoggerFactory .getLogger (ElasticsearchRestTemplate .class );
153
153
154
+ private SearchRequestFactory searchRequestFactory ;
155
+
154
156
private RestHighLevelClient client ;
155
157
private String searchTimeout ;
156
158
@@ -169,11 +171,7 @@ private void initialize(RestHighLevelClient client, ElasticsearchConverter elast
169
171
170
172
this .client = client ;
171
173
this .elasticsearchConverter = elasticsearchConverter ;
172
- }
173
-
174
- @ Override
175
- public RestHighLevelClient getClient () {
176
- return client ;
174
+ this .searchRequestFactory = new SearchRequestFactory (elasticsearchConverter );
177
175
}
178
176
179
177
public void setSearchTimeout (String searchTimeout ) {
@@ -514,89 +512,15 @@ private <T> CloseableIterator<T> doStream(long scrollTimeInMillis, ScrolledPage<
514
512
}
515
513
516
514
@ Override
517
- public <T > long count (CriteriaQuery criteriaQuery , Class <T > clazz ) {
518
- QueryBuilder elasticsearchQuery = new CriteriaQueryProcessor ().createQueryFromCriteria (criteriaQuery .getCriteria ());
519
- QueryBuilder elasticsearchFilter = new CriteriaFilterProcessor ()
520
- .createFilterFromCriteria (criteriaQuery .getCriteria ());
521
-
522
- if (elasticsearchFilter == null ) {
523
- return doCount (prepareCount (criteriaQuery , clazz ), elasticsearchQuery );
524
- } else {
525
- // filter could not be set into CountRequestBuilder, convert request into search request
526
- return doCount (prepareSearch (criteriaQuery , clazz ), elasticsearchQuery , elasticsearchFilter );
527
- }
528
- }
529
-
530
- @ Override
531
- public <T > long count (NativeSearchQuery searchQuery , Class <T > clazz ) {
532
- QueryBuilder elasticsearchQuery = searchQuery .getQuery ();
533
- QueryBuilder elasticsearchFilter = searchQuery .getFilter ();
534
-
535
- if (elasticsearchFilter == null ) {
536
- return doCount (prepareCount (searchQuery , clazz ), elasticsearchQuery );
537
- } else {
538
- // filter could not be set into CountRequestBuilder, convert request into search request
539
- return doCount (prepareSearch (searchQuery , clazz ), elasticsearchQuery , elasticsearchFilter );
540
- }
541
- }
542
-
543
- @ Override
544
- public <T > long count (CriteriaQuery query ) {
545
- return count (query , null );
546
- }
547
-
548
- @ Override
549
- public <T > long count (NativeSearchQuery query ) {
550
- return count (query , null );
551
- }
552
-
553
- private long doCount (SearchRequest countRequest , QueryBuilder elasticsearchQuery ) {
554
- SearchSourceBuilder sourceBuilder = new SearchSourceBuilder ();
555
- if (elasticsearchQuery != null ) {
556
- sourceBuilder .query (elasticsearchQuery );
557
- }
558
- countRequest .source (sourceBuilder );
515
+ public long count (Query query , Class <?> clazz , IndexCoordinates index ) {
516
+ SearchRequest searchRequest = searchRequestFactory .searchRequestFor (query , clazz , index );
517
+ searchRequest .source ().size (0 );
559
518
560
519
try {
561
- return SearchHitsUtil .getTotalCount (client .search (countRequest , RequestOptions .DEFAULT ).getHits ());
562
- } catch (IOException e ) {
563
- throw new ElasticsearchException ("Error while searching for request: " + countRequest .toString (), e );
564
- }
565
- }
566
-
567
- private long doCount (SearchRequest searchRequest , QueryBuilder elasticsearchQuery , QueryBuilder elasticsearchFilter ) {
568
- if (elasticsearchQuery != null ) {
569
- searchRequest .source ().query (elasticsearchQuery );
570
- } else {
571
- searchRequest .source ().query (QueryBuilders .matchAllQuery ());
572
- }
573
- if (elasticsearchFilter != null ) {
574
- searchRequest .source ().postFilter (elasticsearchFilter );
575
- }
576
- SearchResponse response ;
577
- try {
578
- response = client .search (searchRequest , RequestOptions .DEFAULT );
520
+ return SearchHitsUtil .getTotalCount (client .search (searchRequest , RequestOptions .DEFAULT ).getHits ());
579
521
} catch (IOException e ) {
580
522
throw new ElasticsearchException ("Error for search request: " + searchRequest .toString (), e );
581
523
}
582
- return SearchHitsUtil .getTotalCount (response .getHits ());
583
- }
584
-
585
- private <T > SearchRequest prepareCount (Query query , Class <T > clazz ) {
586
- String [] indexName = !isEmpty (query .getIndices ())
587
- ? query .getIndices ().toArray (new String [query .getIndices ().size ()])
588
- : retrieveIndexNameFromPersistentEntity (clazz );
589
- String [] types = !isEmpty (query .getTypes ()) ? query .getTypes ().toArray (new String [query .getTypes ().size ()])
590
- : retrieveTypeFromPersistentEntity (clazz );
591
-
592
- Assert .notNull (indexName , "No index defined for Query" );
593
-
594
- SearchRequest countRequestBuilder = new SearchRequest (indexName );
595
-
596
- if (types != null ) {
597
- countRequestBuilder .types (types );
598
- }
599
- return countRequestBuilder ;
600
524
}
601
525
602
526
@ Override
@@ -1247,6 +1171,7 @@ private <T> SearchRequest prepareSearch(NativeSearchQuery query, Class<T> clazz)
1247
1171
1248
1172
private SearchRequest prepareSearch (Query query , Optional <QueryBuilder > builder , @ Nullable Class <?> clazz ) {
1249
1173
Assert .notNull (query .getIndices (), "No index defined for Query" );
1174
+ Assert .notEmpty (query .getIndices (), "No index defined for Query" );
1250
1175
Assert .notNull (query .getTypes (), "No type defined for Query" );
1251
1176
1252
1177
int startRecord = 0 ;
@@ -1474,10 +1399,18 @@ private void setPersistentEntityId(Object entity, String id) {
1474
1399
1475
1400
private void setPersistentEntityIndexAndType (Query query , Class clazz ) {
1476
1401
if (query .getIndices ().isEmpty ()) {
1477
- query .addIndices (retrieveIndexNameFromPersistentEntity (clazz ));
1402
+ String [] indices = retrieveIndexNameFromPersistentEntity (clazz );
1403
+
1404
+ if (indices != null ) {
1405
+ query .addIndices (indices );
1406
+ }
1478
1407
}
1479
1408
if (query .getTypes ().isEmpty ()) {
1480
- query .addTypes (retrieveTypeFromPersistentEntity (clazz ));
1409
+ String [] types = retrieveTypeFromPersistentEntity (clazz );
1410
+
1411
+ if (types != null ) {
1412
+ query .addTypes (types );
1413
+ }
1481
1414
}
1482
1415
}
1483
1416
0 commit comments