|
24 | 24 | import java.io.BufferedReader;
|
25 | 25 | import java.io.IOException;
|
26 | 26 | import java.io.InputStreamReader;
|
27 |
| -import java.util.*; |
| 27 | +import java.util.ArrayList; |
| 28 | +import java.util.HashMap; |
| 29 | +import java.util.Iterator; |
| 30 | +import java.util.LinkedList; |
| 31 | +import java.util.List; |
| 32 | +import java.util.Map; |
| 33 | +import java.util.NoSuchElementException; |
| 34 | +import java.util.Optional; |
| 35 | +import java.util.Set; |
28 | 36 |
|
29 | 37 | import org.apache.http.util.EntityUtils;
|
30 | 38 | import org.elasticsearch.action.ActionFuture;
|
|
52 | 60 | import org.elasticsearch.action.search.SearchScrollRequest;
|
53 | 61 | import org.elasticsearch.action.update.UpdateRequest;
|
54 | 62 | import org.elasticsearch.action.update.UpdateResponse;
|
| 63 | +import org.elasticsearch.client.RequestOptions; |
55 | 64 | import org.elasticsearch.client.Requests;
|
56 | 65 | import org.elasticsearch.client.Response;
|
57 | 66 | import org.elasticsearch.client.RestClient;
|
|
69 | 78 | import org.elasticsearch.index.query.MoreLikeThisQueryBuilder;
|
70 | 79 | import org.elasticsearch.index.query.QueryBuilder;
|
71 | 80 | import org.elasticsearch.index.query.QueryBuilders;
|
| 81 | +import org.elasticsearch.index.reindex.DeleteByQueryRequest; |
72 | 82 | import org.elasticsearch.search.SearchHit;
|
73 | 83 | import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
74 | 84 | import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
85 | 95 | import org.springframework.context.ApplicationContextAware;
|
86 | 96 | import org.springframework.core.io.ClassPathResource;
|
87 | 97 | import org.springframework.data.domain.Page;
|
88 |
| -import org.springframework.data.domain.PageRequest; |
89 | 98 | import org.springframework.data.domain.Pageable;
|
90 | 99 | import org.springframework.data.domain.Sort;
|
91 | 100 | import org.springframework.data.elasticsearch.ElasticsearchException;
|
92 | 101 | import org.springframework.data.elasticsearch.annotations.Document;
|
93 | 102 | import org.springframework.data.elasticsearch.annotations.Mapping;
|
94 | 103 | import org.springframework.data.elasticsearch.annotations.Setting;
|
95 | 104 | import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
96 |
| -import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl; |
97 | 105 | import org.springframework.data.elasticsearch.core.client.support.AliasData;
|
98 | 106 | import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter;
|
99 | 107 | import org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter;
|
@@ -863,47 +871,24 @@ public <T> void delete(DeleteQuery deleteQuery, Class<T> clazz) {
|
863 | 871 | : getPersistentEntityFor(clazz).getIndexName();
|
864 | 872 | String typeName = hasText(deleteQuery.getType()) ? deleteQuery.getType()
|
865 | 873 | : getPersistentEntityFor(clazz).getIndexType();
|
866 |
| - Integer pageSize = deleteQuery.getPageSize() != null ? deleteQuery.getPageSize() : 1000; |
867 |
| - Long scrollTimeInMillis = deleteQuery.getScrollTimeInMillis() != null ? deleteQuery.getScrollTimeInMillis() |
868 |
| - : 10000l; |
869 | 874 |
|
870 |
| - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(deleteQuery.getQuery()).withIndices(indexName) |
871 |
| - .withTypes(typeName).withPageable(PageRequest.of(0, pageSize)).build(); |
| 875 | + DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(indexName) // |
| 876 | + .setDocTypes(typeName) // |
| 877 | + .setQuery(deleteQuery.getQuery()) // |
| 878 | + .setAbortOnVersionConflict(false) // |
| 879 | + .setRefresh(true); |
872 | 880 |
|
873 |
| - SearchResultMapper deleteEntryResultMapper = new SearchResultMapperAdapter() { |
| 881 | + if (deleteQuery.getPageSize() != null) |
| 882 | + deleteByQueryRequest.setBatchSize(deleteQuery.getPageSize()); |
874 | 883 |
|
875 |
| - @Override |
876 |
| - public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) { |
877 |
| - return new AggregatedPageImpl<>((List<T>) Arrays.asList(response.getHits().getHits()), response.getScrollId()); |
878 |
| - } |
879 |
| - }; |
880 |
| - |
881 |
| - ScrolledPage<SearchHit> scrolledResult = startScroll(scrollTimeInMillis, searchQuery, SearchHit.class, |
882 |
| - deleteEntryResultMapper); |
883 |
| - BulkRequest request = new BulkRequest(); |
884 |
| - List<SearchHit> documentsToDelete = new ArrayList<>(); |
885 |
| - |
886 |
| - do { |
887 |
| - documentsToDelete.addAll(scrolledResult.getContent()); |
888 |
| - scrolledResult = continueScroll(scrolledResult.getScrollId(), scrollTimeInMillis, |
889 |
| - SearchHit.class, deleteEntryResultMapper); |
890 |
| - } while (scrolledResult.getContent().size() != 0); |
891 |
| - |
892 |
| - for (SearchHit entry : documentsToDelete) { |
893 |
| - request.add(new DeleteRequest(entry.getIndex(), typeName, entry.getId())); |
894 |
| - } |
| 884 | + if (deleteQuery.getScrollTimeInMillis() != null) |
| 885 | + deleteByQueryRequest.setScroll(TimeValue.timeValueMillis(deleteQuery.getScrollTimeInMillis())); |
895 | 886 |
|
896 |
| - if (request.numberOfActions() > 0) { |
897 |
| - BulkResponse response; |
898 |
| - try { |
899 |
| - response = client.bulk(request); |
900 |
| - checkForBulkUpdateFailure(response); |
901 |
| - } catch (IOException e) { |
902 |
| - throw new ElasticsearchException("Error while deleting bulk: " + request.toString(), e); |
903 |
| - } |
| 887 | + try { |
| 888 | + client.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT); |
| 889 | + } catch (IOException e) { |
| 890 | + throw new ElasticsearchException("Error for delete request: " + deleteByQueryRequest.toString(), e); |
904 | 891 | }
|
905 |
| - |
906 |
| - clearScroll(scrolledResult.getScrollId()); |
907 | 892 | }
|
908 | 893 |
|
909 | 894 | @Override
|
@@ -1475,7 +1460,8 @@ List<AliasMetaData> convertAliasResponse(String aliasResponse) {
|
1475 | 1460 | node = node.findValue("aliases");
|
1476 | 1461 |
|
1477 | 1462 | Map<String, AliasData> aliasData = mapper.readValue(mapper.writeValueAsString(node),
|
1478 |
| - new TypeReference<Map<String, AliasData>>() {}); |
| 1463 | + new TypeReference<Map<String, AliasData>>() { |
| 1464 | + }); |
1479 | 1465 |
|
1480 | 1466 | Iterable<Map.Entry<String, AliasData>> aliasIter = aliasData.entrySet();
|
1481 | 1467 | List<AliasMetaData> aliasMetaDataList = new ArrayList<AliasMetaData>();
|
|
0 commit comments