diff --git a/src/main/java/org/springframework/data/elasticsearch/core/DeleteEntry.java b/src/main/java/org/springframework/data/elasticsearch/core/DeleteEntry.java new file mode 100644 index 000000000..3cf7a568d --- /dev/null +++ b/src/main/java/org/springframework/data/elasticsearch/core/DeleteEntry.java @@ -0,0 +1,31 @@ +/* + * Copyright 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.elasticsearch.core; + +import lombok.Value; + +/** + * DeleteEntry + * + * @author Lorenzo Spinelli + */ +@Value +public class DeleteEntry { + + private final String id; + private final String indexName; + +} diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java index 7285aef49..09a9661a4 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java @@ -132,6 +132,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @author Peter Nowak * @author Ivan Greene * @author Christoph Strobl + * @author Lorenzo Spinelli */ public class ElasticsearchRestTemplate implements ElasticsearchOperations, EsClient, ApplicationContextAware { @@ -868,13 +869,14 @@ public class ElasticsearchRestTemplate SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(deleteQuery.getQuery()).withIndices(indexName) .withTypes(typeName).withPageable(PageRequest.of(0, pageSize)).build(); - SearchResultMapper onlyIdResultMapper = new SearchResultMapperAdapter() { + SearchResultMapper deleteentryResultMapper = new SearchResultMapperAdapter() { @Override public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { - List result = new ArrayList(); + List result = new ArrayList<>(); for (SearchHit searchHit : response.getHits().getHits()) { String id = searchHit.getId(); - result.add(id); + String indexName = searchHit.getIndex(); + result.add(new DeleteEntry(id, indexName)); } if (result.size() > 0) { return new AggregatedPageImpl<>((List) result, response.getScrollId()); @@ -883,18 +885,19 @@ public class ElasticsearchRestTemplate } }; - Page scrolledResult = startScroll(scrollTimeInMillis, searchQuery, String.class, onlyIdResultMapper); + Page scrolledResult = startScroll(scrollTimeInMillis, searchQuery, DeleteEntry.class, + deleteentryResultMapper); BulkRequest request = new BulkRequest(); - List ids = new ArrayList(); + List documentsToDelete = new ArrayList<>(); do { - ids.addAll(scrolledResult.getContent()); + documentsToDelete.addAll(scrolledResult.getContent()); scrolledResult = continueScroll(((ScrolledPage) scrolledResult).getScrollId(), scrollTimeInMillis, - String.class, onlyIdResultMapper); + DeleteEntry.class, deleteentryResultMapper); } while (scrolledResult.getContent().size() != 0); - for (String id : ids) { - request.add(new DeleteRequest(indexName, typeName, id)); + for (DeleteEntry entry : documentsToDelete) { + request.add(new DeleteRequest(entry.getIndexName(), typeName, entry.getId())); } if (request.numberOfActions() > 0) { diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 36259f369..c309028b0 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -128,7 +128,8 @@ import org.springframework.util.StringUtils; */ public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient, ApplicationContextAware { - private static final Logger QUERY_LOGGER = LoggerFactory.getLogger("org.springframework.data.elasticsearch.core.QUERY"); + private static final Logger QUERY_LOGGER = LoggerFactory + .getLogger("org.springframework.data.elasticsearch.core.QUERY"); private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchTemplate.class); private static final String FIELD_SCORE = "_score"; @@ -755,13 +756,15 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient< SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(deleteQuery.getQuery()).withIndices(indexName) .withTypes(typeName).withPageable(PageRequest.of(0, pageSize)).build(); - SearchResultMapper onlyIdResultMapper = new SearchResultMapperAdapter() { + SearchResultMapper deleteEntryResultMapper = new SearchResultMapperAdapter() { @Override public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { - List result = new ArrayList(); + List result = new ArrayList<>(); for (SearchHit searchHit : response.getHits().getHits()) { + String id = searchHit.getId(); - result.add(id); + String indexName = searchHit.getIndex(); + result.add(new DeleteEntry(id, indexName)); } if (result.size() > 0) { return new AggregatedPageImpl((List) result, response.getScrollId()); @@ -770,18 +773,19 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient< } }; - Page scrolledResult = startScroll(scrollTimeInMillis, searchQuery, String.class, onlyIdResultMapper); + Page scrolledResult = startScroll(scrollTimeInMillis, searchQuery, DeleteEntry.class, + deleteEntryResultMapper); BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); - List ids = new ArrayList(); + List documentsToDelete = new ArrayList<>(); do { - ids.addAll(scrolledResult.getContent()); + documentsToDelete.addAll(scrolledResult.getContent()); scrolledResult = continueScroll(((ScrolledPage) scrolledResult).getScrollId(), scrollTimeInMillis, - String.class, onlyIdResultMapper); + DeleteEntry.class, deleteEntryResultMapper); } while (scrolledResult.getContent().size() != 0); - for (String id : ids) { - bulkRequestBuilder.add(client.prepareDelete(indexName, typeName, id)); + for (DeleteEntry entry : documentsToDelete) { + bulkRequestBuilder.add(client.prepareDelete(entry.getIndexName(), typeName, entry.getId())); } if (bulkRequestBuilder.numberOfActions() > 0) {