Skip to content

Commit ac3c6d3

Browse files
committed
DATAES-631 - WIP.
1 parent cedb18f commit ac3c6d3

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

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

+33-13
Original file line numberDiff line numberDiff line change
@@ -532,21 +532,34 @@ public <T> long count(SearchQuery searchQuery, Class<T> clazz) {
532532
QueryBuilder elasticsearchFilter = searchQuery.getFilter();
533533

534534
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);
536538
} else {
537539
// filter could not be set into CountRequestBuilder, convert request into search request
538540
return doCount(prepareSearch(searchQuery, clazz), elasticsearchQuery, elasticsearchFilter);
539541
}
540542
}
541543

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;
546547

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;
550563
}
551564

552565
private long doCount(SearchRequest countRequest, QueryBuilder elasticsearchQuery) {
@@ -572,13 +585,12 @@ private long doCount(SearchRequest searchRequest, QueryBuilder elasticsearchQuer
572585
if (elasticsearchFilter != null) {
573586
searchRequest.source().postFilter(elasticsearchFilter);
574587
}
575-
SearchResponse response;
588+
576589
try {
577-
response = client.search(searchRequest, RequestOptions.DEFAULT);
590+
return SearchHitsUtil.getTotalCount(client.search(searchRequest, RequestOptions.DEFAULT).getHits());
578591
} catch (IOException e) {
579592
throw new ElasticsearchException("Error for search request: " + searchRequest.toString(), e);
580593
}
581-
return SearchHitsUtil.getTotalCount(response.getHits());
582594
}
583595

584596
private <T> SearchRequest prepareCount(Query query, Class<T> clazz) {
@@ -1473,10 +1485,18 @@ private void setPersistentEntityId(Object entity, String id) {
14731485

14741486
private void setPersistentEntityIndexAndType(Query query, Class clazz) {
14751487
if (query.getIndices().isEmpty()) {
1476-
query.addIndices(retrieveIndexNameFromPersistentEntity(clazz));
1488+
String[] indices = retrieveIndexNameFromPersistentEntity(clazz);
1489+
1490+
if (indices != null) {
1491+
query.addIndices(indices);
1492+
}
14771493
}
14781494
if (query.getTypes().isEmpty()) {
1479-
query.addTypes(retrieveTypeFromPersistentEntity(clazz));
1495+
String[] types = retrieveTypeFromPersistentEntity(clazz);
1496+
1497+
if (types != null) {
1498+
query.addTypes(types);
1499+
}
14801500
}
14811501
}
14821502

0 commit comments

Comments
 (0)