31
31
import java .util .*;
32
32
33
33
import org .apache .commons .collections .CollectionUtils ;
34
+ import org .elasticsearch .action .ListenableActionFuture ;
34
35
import org .elasticsearch .action .admin .cluster .state .ClusterStateRequest ;
35
36
import org .elasticsearch .action .admin .indices .create .CreateIndexRequestBuilder ;
36
37
import org .elasticsearch .action .admin .indices .delete .DeleteIndexRequest ;
51
52
import org .elasticsearch .action .search .SearchRequestBuilder ;
52
53
import org .elasticsearch .action .search .SearchResponse ;
53
54
import org .elasticsearch .action .search .SearchType ;
54
- import org .elasticsearch .action .suggest .SuggestRequest ;
55
- import org .elasticsearch .action .suggest .SuggestRequestBuilder ;
56
- import org .elasticsearch .action .suggest .SuggestResponse ;
55
+ import org .elasticsearch .action .suggest .SuggestRequestBuilder ;
56
+ import org .elasticsearch .action .suggest .SuggestResponse ;
57
57
import org .elasticsearch .action .update .UpdateRequestBuilder ;
58
58
import org .elasticsearch .action .update .UpdateResponse ;
59
59
import org .elasticsearch .client .Client ;
63
63
import org .elasticsearch .common .collect .ImmutableOpenMap ;
64
64
import org .elasticsearch .common .collect .MapBuilder ;
65
65
import org .elasticsearch .common .unit .TimeValue ;
66
- import org .elasticsearch .common .xcontent .ToXContent ;
67
66
import org .elasticsearch .common .xcontent .XContentBuilder ;
68
67
import org .elasticsearch .index .query .FilterBuilder ;
69
68
import org .elasticsearch .index .query .QueryBuilder ;
74
73
import org .elasticsearch .search .highlight .HighlightBuilder ;
75
74
import org .elasticsearch .search .sort .SortBuilder ;
76
75
import org .elasticsearch .search .sort .SortOrder ;
77
- import org .elasticsearch .search .suggest .SuggestBuilder ;
76
+ import org .elasticsearch .search .suggest .SuggestBuilder ;
78
77
import org .slf4j .Logger ;
79
78
import org .slf4j .LoggerFactory ;
80
79
import org .springframework .beans .BeansException ;
@@ -111,6 +110,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati
111
110
private Client client ;
112
111
private ElasticsearchConverter elasticsearchConverter ;
113
112
private ResultsMapper resultsMapper ;
113
+ private String searchTimeout ;
114
114
115
115
public ElasticsearchTemplate (Client client ) {
116
116
this (client , null , null );
@@ -135,6 +135,10 @@ public ElasticsearchTemplate(Client client, ElasticsearchConverter elasticsearch
135
135
this .resultsMapper = (resultsMapper == null ) ? new DefaultResultMapper (this .elasticsearchConverter .getMappingContext ()) : resultsMapper ;
136
136
}
137
137
138
+ public void setSearchTimeout (String searchTimeout ) {
139
+ this .searchTimeout = searchTimeout ;
140
+ }
141
+
138
142
@ Override
139
143
public <T > boolean createIndex (Class <T > clazz ) {
140
144
return createIndexIfNotCreated (clazz );
@@ -285,7 +289,7 @@ public <T> List<String> queryForIds(SearchQuery query) {
285
289
if (query .getFilter () != null ) {
286
290
request .setPostFilter (query .getFilter ());
287
291
}
288
- SearchResponse response = request .execute (). actionGet ( );
292
+ SearchResponse response = getSearchResponse ( request .execute ());
289
293
return extractIds (response );
290
294
}
291
295
@@ -308,8 +312,8 @@ public <T> Page<T> queryForPage(CriteriaQuery criteriaQuery, Class<T> clazz) {
308
312
if (elasticsearchFilter != null )
309
313
searchRequestBuilder .setPostFilter (elasticsearchFilter );
310
314
311
- SearchResponse response = searchRequestBuilder
312
- .execute (). actionGet ( );
315
+ SearchResponse response = getSearchResponse ( searchRequestBuilder
316
+ .execute ());
313
317
return resultsMapper .mapResults (response , clazz , criteriaQuery .getPageable ());
314
318
}
315
319
@@ -320,7 +324,7 @@ public <T> FacetedPage<T> queryForPage(StringQuery query, Class<T> clazz) {
320
324
321
325
@ Override
322
326
public <T > FacetedPage <T > queryForPage (StringQuery query , Class <T > clazz , SearchResultMapper mapper ) {
323
- SearchResponse response = prepareSearch (query , clazz ).setQuery (query .getSource ()).execute (). actionGet ( );
327
+ SearchResponse response = getSearchResponse ( prepareSearch (query , clazz ).setQuery (query .getSource ()).execute ());
324
328
return mapper .mapResults (response , clazz , query .getPageable ());
325
329
}
326
330
@@ -569,20 +573,20 @@ public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noF
569
573
if (noFields ) {
570
574
requestBuilder .setNoFields ();
571
575
}
572
- return requestBuilder .execute (). actionGet ( ).getScrollId ();
576
+ return getSearchResponse ( requestBuilder .execute ()).getScrollId ();
573
577
}
574
578
575
579
@ Override
576
580
public <T > Page <T > scroll (String scrollId , long scrollTimeInMillis , Class <T > clazz ) {
577
- SearchResponse response = client .prepareSearchScroll (scrollId )
578
- .setScroll (TimeValue .timeValueMillis (scrollTimeInMillis )).execute (). actionGet ( );
581
+ SearchResponse response = getSearchResponse ( client .prepareSearchScroll (scrollId )
582
+ .setScroll (TimeValue .timeValueMillis (scrollTimeInMillis )).execute ());
579
583
return resultsMapper .mapResults (response , clazz , null );
580
584
}
581
585
582
586
@ Override
583
587
public <T > Page <T > scroll (String scrollId , long scrollTimeInMillis , SearchResultMapper mapper ) {
584
- SearchResponse response = client .prepareSearchScroll (scrollId )
585
- .setScroll (TimeValue .timeValueMillis (scrollTimeInMillis )).execute (). actionGet ( );
588
+ SearchResponse response = getSearchResponse ( client .prepareSearchScroll (scrollId )
589
+ .setScroll (TimeValue .timeValueMillis (scrollTimeInMillis )).execute ());
586
590
return mapper .mapResults (response , null , null );
587
591
}
588
592
@@ -645,7 +649,7 @@ public <T> Page<T> moreLikeThis(MoreLikeThisQuery query, Class<T> clazz) {
645
649
requestBuilder .setBoostTerms (query .getBoostTerms ());
646
650
}
647
651
648
- SearchResponse response = requestBuilder .execute (). actionGet ( );
652
+ SearchResponse response = getSearchResponse ( requestBuilder .execute ());
649
653
return resultsMapper .mapResults (response , clazz , query .getPageable ());
650
654
}
651
655
@@ -681,8 +685,11 @@ private SearchResponse doSearch(SearchRequestBuilder searchRequest, SearchQuery
681
685
searchRequest .addAggregation (aggregationBuilder );
682
686
}
683
687
}
688
+ return getSearchResponse (searchRequest .setQuery (searchQuery .getQuery ()).execute ());
689
+ }
684
690
685
- return searchRequest .setQuery (searchQuery .getQuery ()).execute ().actionGet ();
691
+ private SearchResponse getSearchResponse (ListenableActionFuture <SearchResponse > response ) {
692
+ return searchTimeout == null ? response .actionGet () : response .actionGet (searchTimeout );
686
693
}
687
694
688
695
private <T > boolean createIndexIfNotCreated (Class <T > clazz ) {
@@ -981,14 +988,14 @@ public static String readFileFromClasspath(String url) {
981
988
982
989
return stringBuilder .toString ();
983
990
}
984
-
985
- public SuggestResponse suggest (SuggestBuilder .SuggestionBuilder <?> suggestion , String ... indices ) {
986
- SuggestRequestBuilder suggestRequestBuilder = client .prepareSuggest (indices );
987
- suggestRequestBuilder .addSuggestion (suggestion );
988
- return suggestRequestBuilder .execute ().actionGet ();
989
- }
990
-
991
- public SuggestResponse suggest (SuggestBuilder .SuggestionBuilder <?> suggestion , Class clazz ) {
992
- return suggest (suggestion , retrieveIndexNameFromPersistentEntity (clazz ));
993
- }
991
+
992
+ public SuggestResponse suggest (SuggestBuilder .SuggestionBuilder <?> suggestion , String ... indices ) {
993
+ SuggestRequestBuilder suggestRequestBuilder = client .prepareSuggest (indices );
994
+ suggestRequestBuilder .addSuggestion (suggestion );
995
+ return suggestRequestBuilder .execute ().actionGet ();
996
+ }
997
+
998
+ public SuggestResponse suggest (SuggestBuilder .SuggestionBuilder <?> suggestion , Class clazz ) {
999
+ return suggest (suggestion , retrieveIndexNameFromPersistentEntity (clazz ));
1000
+ }
994
1001
}
0 commit comments