Skip to content

Commit b778d5b

Browse files
committed
DATAES-631 - Refactored count methods in ElasticsearchRestTemplate.
1 parent 861cd90 commit b778d5b

File tree

3 files changed

+15
-106
lines changed

3 files changed

+15
-106
lines changed

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java

+4-32
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,7 @@
2424
import org.springframework.data.domain.Page;
2525
import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter;
2626
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity;
27-
import org.springframework.data.elasticsearch.core.query.AliasQuery;
28-
import org.springframework.data.elasticsearch.core.query.BulkOptions;
29-
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
30-
import org.springframework.data.elasticsearch.core.query.DeleteQuery;
31-
import org.springframework.data.elasticsearch.core.query.GetQuery;
32-
import org.springframework.data.elasticsearch.core.query.IndexQuery;
33-
import org.springframework.data.elasticsearch.core.query.MoreLikeThisQuery;
34-
import org.springframework.data.elasticsearch.core.query.SearchQuery;
35-
import org.springframework.data.elasticsearch.core.query.StringQuery;
36-
import org.springframework.data.elasticsearch.core.query.UpdateQuery;
27+
import org.springframework.data.elasticsearch.core.query.*;
3728
import org.springframework.data.util.CloseableIterator;
3829
import org.springframework.lang.Nullable;
3930

@@ -339,39 +330,20 @@ default List<List<?>> queryForList(List<SearchQuery> queries, List<Class<?>> cla
339330
* @param clazz
340331
* @return
341332
*/
342-
<T> long count(CriteriaQuery query, Class<T> clazz);
333+
<T> long count(Query query, Class<T> clazz);
343334

344335
/**
345336
* return number of elements found by given query
346337
*
347338
* @param query
348339
* @return
349340
*/
350-
default <T> long count(CriteriaQuery query) {
341+
default <T> long count(Query query) {
351342
return count(query, null);
352343
}
353344

354345
/**
355-
* return number of elements found by given query
356-
*
357-
* @param query
358-
* @param clazz
359-
* @return
360-
*/
361-
<T> long count(SearchQuery query, Class<T> clazz);
362-
363-
/**
364-
* return number of elements found by given query
365-
*
366-
* @param query
367-
* @return
368-
*/
369-
default <T> long count(SearchQuery query) {
370-
return count(query, null);
371-
}
372-
373-
/**
374-
* Execute a multiGet against elasticsearch for the given ids
346+
* /** Execute a multiGet against elasticsearch for the given ids
375347
*
376348
* @param searchQuery
377349
* @param clazz

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java

+10-64
Original file line numberDiff line numberDiff line change
@@ -513,31 +513,14 @@ private <T> CloseableIterator<T> doStream(long scrollTimeInMillis, ScrolledPage<
513513
}
514514

515515
@Override
516-
public <T> long count(CriteriaQuery criteriaQuery, Class<T> clazz) {
517-
QueryBuilder elasticsearchQuery = new CriteriaQueryProcessor().createQueryFromCriteria(criteriaQuery.getCriteria());
518-
QueryBuilder elasticsearchFilter = new CriteriaFilterProcessor()
519-
.createFilterFromCriteria(criteriaQuery.getCriteria());
520-
521-
if (elasticsearchFilter == null) {
522-
return doCount(prepareCount(criteriaQuery, clazz), elasticsearchQuery);
523-
} else {
524-
// filter could not be set into CountRequestBuilder, convert request into search request
525-
return doCount(prepareSearch(criteriaQuery, clazz), elasticsearchQuery, elasticsearchFilter);
526-
}
527-
}
516+
public <T> long count(Query query, Class<T> clazz) {
517+
SearchRequest searchRequest = mapQuery(query, clazz);
518+
searchRequest.source().size(0);
528519

529-
@Override
530-
public <T> long count(SearchQuery searchQuery, Class<T> clazz) {
531-
QueryBuilder elasticsearchQuery = searchQuery.getQuery();
532-
QueryBuilder elasticsearchFilter = searchQuery.getFilter();
533-
534-
if (elasticsearchFilter == null) {
535-
// return doCount(prepareCount(searchQuery, clazz),
536-
// elasticsearchQuery);
537-
return doCount(prepareSearch(searchQuery, clazz), elasticsearchQuery, elasticsearchFilter);
538-
} else {
539-
// filter could not be set into CountRequestBuilder, convert request into search request
540-
return doCount(prepareSearch(searchQuery, clazz), elasticsearchQuery, elasticsearchFilter);
520+
try {
521+
return SearchHitsUtil.getTotalCount(client.search(searchRequest, RequestOptions.DEFAULT).getHits());
522+
} catch (IOException e) {
523+
throw new ElasticsearchException("Error for search request: " + searchRequest.toString(), e);
541524
}
542525
}
543526

@@ -559,55 +542,17 @@ private <T> SearchRequest mapQuery(Query query, Class<T> clazz) {
559542

560543
SearchRequest searchRequest = prepareSearch(query, clazz);
561544

562-
return searchRequest;
563-
}
564-
565-
private long doCount(SearchRequest countRequest, QueryBuilder elasticsearchQuery) {
566-
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
567-
if (elasticsearchQuery != null) {
568-
sourceBuilder.query(elasticsearchQuery);
569-
}
570-
countRequest.source(sourceBuilder);
571-
572-
try {
573-
return SearchHitsUtil.getTotalCount(client.search(countRequest, RequestOptions.DEFAULT).getHits());
574-
} catch (IOException e) {
575-
throw new ElasticsearchException("Error while searching for request: " + countRequest.toString(), e);
576-
}
577-
}
578-
579-
private long doCount(SearchRequest searchRequest, QueryBuilder elasticsearchQuery, QueryBuilder elasticsearchFilter) {
580545
if (elasticsearchQuery != null) {
581546
searchRequest.source().query(elasticsearchQuery);
582547
} else {
583548
searchRequest.source().query(QueryBuilders.matchAllQuery());
584549
}
550+
585551
if (elasticsearchFilter != null) {
586552
searchRequest.source().postFilter(elasticsearchFilter);
587553
}
588554

589-
try {
590-
return SearchHitsUtil.getTotalCount(client.search(searchRequest, RequestOptions.DEFAULT).getHits());
591-
} catch (IOException e) {
592-
throw new ElasticsearchException("Error for search request: " + searchRequest.toString(), e);
593-
}
594-
}
595-
596-
private <T> SearchRequest prepareCount(Query query, Class<T> clazz) {
597-
String[] indexName = !isEmpty(query.getIndices())
598-
? query.getIndices().toArray(new String[query.getIndices().size()])
599-
: retrieveIndexNameFromPersistentEntity(clazz);
600-
String[] types = !isEmpty(query.getTypes()) ? query.getTypes().toArray(new String[query.getTypes().size()])
601-
: retrieveTypeFromPersistentEntity(clazz);
602-
603-
Assert.notNull(indexName, "No index defined for Query");
604-
605-
SearchRequest countRequestBuilder = new SearchRequest(indexName);
606-
607-
if (types != null) {
608-
countRequestBuilder.types(types);
609-
}
610-
return countRequestBuilder;
555+
return searchRequest;
611556
}
612557

613558
@Override
@@ -1258,6 +1203,7 @@ private <T> SearchRequest prepareSearch(SearchQuery query, Class<T> clazz) {
12581203

12591204
private SearchRequest prepareSearch(Query query, Optional<QueryBuilder> builder, @Nullable Class<?> clazz) {
12601205
Assert.notNull(query.getIndices(), "No index defined for Query");
1206+
Assert.notEmpty(query.getIndices(), "No index defined for Query");
12611207
Assert.notNull(query.getTypes(), "No type defined for Query");
12621208

12631209
int startRecord = 0;

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java

+1-10
Original file line numberDiff line numberDiff line change
@@ -421,16 +421,7 @@ private <T> CloseableIterator<T> doStream(long scrollTimeInMillis, ScrolledPage<
421421
}
422422

423423
@Override
424-
public <T> long count(CriteriaQuery criteriaQuery, Class<T> clazz) {
425-
return doCount(criteriaQuery, clazz);
426-
}
427-
428-
@Override
429-
public <T> long count(SearchQuery searchQuery, Class<T> clazz) {
430-
return doCount(searchQuery, clazz);
431-
}
432-
433-
private <T> long doCount(Query query, Class<T> clazz) {
424+
public <T> long count(Query query, Class<T> clazz) {
434425
SearchRequestBuilder searchRequestBuilder = mapQuery(query, clazz);
435426
searchRequestBuilder.setSize(0);
436427

0 commit comments

Comments
 (0)