1
1
/*
2
- * Copyright 2013-2014 the original author or authors.
2
+ * Copyright 2013-2016 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
32
32
33
33
import org .apache .commons .collections .CollectionUtils ;
34
34
import org .elasticsearch .action .ListenableActionFuture ;
35
- import org .elasticsearch .action .admin .cluster . state . ClusterStateRequest ;
35
+ import org .elasticsearch .action .admin .indices . alias . get . GetAliasesRequest ;
36
36
import org .elasticsearch .action .admin .indices .create .CreateIndexRequestBuilder ;
37
37
import org .elasticsearch .action .admin .indices .delete .DeleteIndexRequest ;
38
38
import org .elasticsearch .action .admin .indices .mapping .get .GetMappingsRequest ;
57
57
import org .elasticsearch .client .Client ;
58
58
import org .elasticsearch .client .Requests ;
59
59
import org .elasticsearch .cluster .metadata .AliasAction ;
60
+ import org .elasticsearch .cluster .metadata .AliasMetaData ;
60
61
import org .elasticsearch .common .collect .MapBuilder ;
61
62
import org .elasticsearch .common .unit .TimeValue ;
62
63
import org .elasticsearch .common .xcontent .XContentBuilder ;
63
64
import org .elasticsearch .index .query .MoreLikeThisQueryBuilder ;
64
65
import org .elasticsearch .index .query .QueryBuilder ;
65
66
import org .elasticsearch .index .query .QueryBuilders ;
66
- import org .elasticsearch .script .Script ;
67
67
import org .elasticsearch .search .SearchHit ;
68
68
import org .elasticsearch .search .aggregations .AbstractAggregationBuilder ;
69
69
import org .elasticsearch .search .highlight .HighlightBuilder ;
@@ -642,6 +642,7 @@ public <T> String delete(Class<T> clazz, String id) {
642
642
@ Override
643
643
public <T > void delete (DeleteQuery deleteQuery , Class <T > clazz ) {
644
644
645
+ //TODO : clean up expose parameter for scan and scroll
645
646
String iName = deleteQuery .getIndex ();
646
647
String tName = deleteQuery .getType ();
647
648
if (clazz !=null ){
@@ -656,37 +657,46 @@ public <T> void delete(DeleteQuery deleteQuery, Class<T> clazz) {
656
657
SearchQuery searchQuery = new NativeSearchQueryBuilder ().withQuery (deleteQuery .getQuery ())
657
658
.withIndices (indexName )
658
659
.withTypes (typeName )
659
- //TOD: ako - check that id is all the time avaialable
660
- //.withFields("_id")
661
660
.withPageable (new PageRequest (0 , 1000 ))
662
661
.build ();
663
662
664
663
final String scrollId = scan (searchQuery , 10000 , true );
665
664
666
665
final BulkRequestBuilder bulkRequestBuilder = client .prepareBulk ();
667
- boolean hasMoreRecords = true ;
668
- while (hasMoreRecords ) {
669
- final Page <Object > scroll = scroll (scrollId , 10000L , new SearchResultMapper () {
666
+ List <String > ids = new ArrayList <String >();
667
+ boolean hasRecords = true ;
668
+ while (hasRecords ) {
669
+ Page <String > page = scroll (scrollId , 5000 , new SearchResultMapper () {
670
670
@ Override
671
671
public <T > FacetedPage <T > mapResults (SearchResponse response , Class <T > clazz , Pageable pageable ) {
672
- boolean hasItems = false ;
672
+ List < String > result = new ArrayList < String >() ;
673
673
for (SearchHit searchHit : response .getHits ()) {
674
- hasItems = true ;
675
- bulkRequestBuilder .add (client . prepareDelete ( indexName , typeName , searchHit . getId ()) );
674
+ String id = searchHit . getId () ;
675
+ result .add (id );
676
676
}
677
- if (hasItems ){
678
- return new FacetedPageImpl <T >((List <T >)Arrays .asList (new Object ()));
677
+
678
+ if (result .size () > 0 ) {
679
+ return new FacetedPageImpl <T >((List <T >) result );
679
680
}
680
681
return null ;
681
682
}
682
683
});
683
- if (scroll == null ) {
684
- hasMoreRecords = false ;
684
+ if (page != null && page .getContent ().size () > 0 ) {
685
+ ids .addAll (page .getContent ());
686
+ } else {
687
+ hasRecords = false ;
685
688
}
686
689
}
687
- if (bulkRequestBuilder .numberOfActions ()>0 ) {
690
+
691
+ for (String id : ids ) {
692
+ bulkRequestBuilder .add (client .prepareDelete (indexName , typeName , id ));
693
+ }
694
+
695
+ if (bulkRequestBuilder .numberOfActions () > 0 ) {
688
696
bulkRequestBuilder .execute ().actionGet ();
689
697
}
698
+
699
+ refresh (indexName , false );
690
700
}
691
701
692
702
@ Override
@@ -795,7 +805,7 @@ public <T> Page<T> scroll(String scrollId, long scrollTimeInMillis, SearchResult
795
805
796
806
@ Override
797
807
public <T > Page <T > moreLikeThis (MoreLikeThisQuery query , Class <T > clazz ) {
798
- int startRecord = 0 ;
808
+ //todo : clean up
799
809
ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor (clazz );
800
810
String indexName = isNotBlank (query .getIndexName ()) ? query .getIndexName () : persistentEntity .getIndexName ();
801
811
String type = isNotBlank (query .getType ()) ? query .getType () : persistentEntity .getIndexType ();
@@ -805,60 +815,35 @@ public <T> Page<T> moreLikeThis(MoreLikeThisQuery query, Class<T> clazz) {
805
815
Assert .notNull (query .getId (), "No document id defined for MoreLikeThisQuery" );
806
816
807
817
final MoreLikeThisQueryBuilder .Item item = new MoreLikeThisQueryBuilder .Item (indexName , type , query .getId ());
808
- final NativeSearchQuery build = new NativeSearchQueryBuilder ().withQuery (moreLikeThisQuery ().addLikeItem (item )).build ();
809
- return queryForPage (build ,clazz );
810
-
811
- //TODO: Mohins - set all other params for moreLikeThis
812
- /* MoreLikeThisRequestBuilder requestBuilder = client.prepareMoreLikeThis(indexName, type, query.getId());
813
-
814
- if (query.getPageable() != null) {
815
- startRecord = query.getPageable().getPageNumber() * query.getPageable().getPageSize();
816
- requestBuilder.setSearchSize(query.getPageable().getPageSize());
817
- }
818
- requestBuilder.setSearchFrom(startRecord);
818
+ MoreLikeThisQueryBuilder moreLikeThisQueryBuilder = moreLikeThisQuery ().addLikeItem (item );
819
819
820
- if (isNotEmpty(query.getSearchIndices())) {
821
- requestBuilder.setSearchIndices(toArray(query.getSearchIndices()));
822
- }
823
- if (isNotEmpty(query.getSearchTypes())) {
824
- requestBuilder.setSearchTypes(toArray(query.getSearchTypes()));
825
- }
826
- if (isNotEmpty(query.getFields())) {
827
- requestBuilder.setField(toArray(query.getFields()));
828
- }
829
- if (isNotBlank(query.getRouting())) {
830
- requestBuilder.setRouting(query.getRouting());
831
- }
832
- if (query.getPercentTermsToMatch() != null) {
833
- requestBuilder.setPercentTermsToMatch(query.getPercentTermsToMatch());
834
- }
835
820
if (query .getMinTermFreq () != null ) {
836
- requestBuilder.setMinTermFreq (query.getMinTermFreq());
821
+ moreLikeThisQueryBuilder . minTermFreq (query .getMinTermFreq ());
837
822
}
838
823
if (query .getMaxQueryTerms () != null ) {
839
- requestBuilder .maxQueryTerms(query.getMaxQueryTerms());
824
+ moreLikeThisQueryBuilder .maxQueryTerms (query .getMaxQueryTerms ());
840
825
}
841
826
if (isNotEmpty (query .getStopWords ())) {
842
- requestBuilder.setStopWords (toArray(query.getStopWords()));
827
+ moreLikeThisQueryBuilder . stopWords (toArray (query .getStopWords ()));
843
828
}
844
829
if (query .getMinDocFreq () != null ) {
845
- requestBuilder.setMinDocFreq (query.getMinDocFreq());
830
+ moreLikeThisQueryBuilder . minDocFreq (query .getMinDocFreq ());
846
831
}
847
832
if (query .getMaxDocFreq () != null ) {
848
- requestBuilder.setMaxDocFreq (query.getMaxDocFreq());
833
+ moreLikeThisQueryBuilder . maxDocFreq (query .getMaxDocFreq ());
849
834
}
850
835
if (query .getMinWordLen () != null ) {
851
- requestBuilder.setMinWordLen (query.getMinWordLen());
836
+ moreLikeThisQueryBuilder . minWordLength (query .getMinWordLen ());
852
837
}
853
838
if (query .getMaxWordLen () != null ) {
854
- requestBuilder.setMaxWordLen (query.getMaxWordLen());
839
+ moreLikeThisQueryBuilder . maxWordLength (query .getMaxWordLen ());
855
840
}
856
841
if (query .getBoostTerms () != null ) {
857
- requestBuilder.setBoostTerms (query.getBoostTerms());
842
+ moreLikeThisQueryBuilder . boostTerms (query .getBoostTerms ());
858
843
}
859
844
860
- SearchResponse response = getSearchResponse(requestBuilder.execute() );
861
- return resultsMapper.mapResults(response, clazz, query.getPageable());*/
845
+ final NativeSearchQuery build = new NativeSearchQueryBuilder (). withQuery ( moreLikeThisQueryBuilder ). build ( );
846
+ return queryForPage ( build , clazz );
862
847
}
863
848
864
849
private SearchResponse doSearch (SearchRequestBuilder searchRequest , SearchQuery searchQuery ) {
@@ -1052,11 +1037,13 @@ private IndexRequestBuilder prepareIndex(IndexQuery query) {
1052
1037
}
1053
1038
}
1054
1039
1040
+ //TODO : remove or waitForOperation
1055
1041
@ Override
1056
1042
public void refresh (String indexName , boolean waitForOperation ) {
1057
1043
client .admin ().indices ().refresh (refreshRequest (indexName )).actionGet ();
1058
1044
}
1059
1045
1046
+ //TODO : remove or waitForOperation
1060
1047
@ Override
1061
1048
public <T > void refresh (Class <T > clazz , boolean waitForOperation ) {
1062
1049
ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor (clazz );
@@ -1092,13 +1079,9 @@ public Boolean removeAlias(AliasQuery query) {
1092
1079
}
1093
1080
1094
1081
@ Override
1095
- public Set <String > queryForAlias (String indexName ) {
1096
- ClusterStateRequest clusterStateRequest = Requests .clusterStateRequest ()
1097
- .routingTable (true ).nodes (true ).indices (indexName );
1098
- //TODO: ako check how to find aliases for index
1099
- /* Iterator<String> iterator = client.admin().cluster().state(clusterStateRequest).actionGet().getState().getMetaData().aliases().keysIt();
1100
- return newHashSet(iterator);*/
1101
- return null ;
1082
+ public List <AliasMetaData > queryForAlias (String indexName ) {
1083
+ return client .admin ().indices ().getAliases (new GetAliasesRequest ().indices (indexName ))
1084
+ .actionGet ().getAliases ().get (indexName );
1102
1085
}
1103
1086
1104
1087
@ Override
0 commit comments