Skip to content

Commit cd9ed2c

Browse files
gpantheakonczak
authored andcommitted
DATAES-100: Allow configurable searchTimeout.
1 parent 14c63b3 commit cd9ed2c

File tree

1 file changed

+33
-26
lines changed

1 file changed

+33
-26
lines changed

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

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.*;
3232

3333
import org.apache.commons.collections.CollectionUtils;
34+
import org.elasticsearch.action.ListenableActionFuture;
3435
import org.elasticsearch.action.admin.cluster.state.ClusterStateRequest;
3536
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
3637
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
@@ -51,9 +52,8 @@
5152
import org.elasticsearch.action.search.SearchRequestBuilder;
5253
import org.elasticsearch.action.search.SearchResponse;
5354
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;
5757
import org.elasticsearch.action.update.UpdateRequestBuilder;
5858
import org.elasticsearch.action.update.UpdateResponse;
5959
import org.elasticsearch.client.Client;
@@ -63,7 +63,6 @@
6363
import org.elasticsearch.common.collect.ImmutableOpenMap;
6464
import org.elasticsearch.common.collect.MapBuilder;
6565
import org.elasticsearch.common.unit.TimeValue;
66-
import org.elasticsearch.common.xcontent.ToXContent;
6766
import org.elasticsearch.common.xcontent.XContentBuilder;
6867
import org.elasticsearch.index.query.FilterBuilder;
6968
import org.elasticsearch.index.query.QueryBuilder;
@@ -74,7 +73,7 @@
7473
import org.elasticsearch.search.highlight.HighlightBuilder;
7574
import org.elasticsearch.search.sort.SortBuilder;
7675
import org.elasticsearch.search.sort.SortOrder;
77-
import org.elasticsearch.search.suggest.SuggestBuilder;
76+
import org.elasticsearch.search.suggest.SuggestBuilder;
7877
import org.slf4j.Logger;
7978
import org.slf4j.LoggerFactory;
8079
import org.springframework.beans.BeansException;
@@ -111,6 +110,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati
111110
private Client client;
112111
private ElasticsearchConverter elasticsearchConverter;
113112
private ResultsMapper resultsMapper;
113+
private String searchTimeout;
114114

115115
public ElasticsearchTemplate(Client client) {
116116
this(client, null, null);
@@ -135,6 +135,10 @@ public ElasticsearchTemplate(Client client, ElasticsearchConverter elasticsearch
135135
this.resultsMapper = (resultsMapper == null) ? new DefaultResultMapper(this.elasticsearchConverter.getMappingContext()) : resultsMapper;
136136
}
137137

138+
public void setSearchTimeout(String searchTimeout) {
139+
this.searchTimeout = searchTimeout;
140+
}
141+
138142
@Override
139143
public <T> boolean createIndex(Class<T> clazz) {
140144
return createIndexIfNotCreated(clazz);
@@ -285,7 +289,7 @@ public <T> List<String> queryForIds(SearchQuery query) {
285289
if (query.getFilter() != null) {
286290
request.setPostFilter(query.getFilter());
287291
}
288-
SearchResponse response = request.execute().actionGet();
292+
SearchResponse response = getSearchResponse(request.execute());
289293
return extractIds(response);
290294
}
291295

@@ -308,8 +312,8 @@ public <T> Page<T> queryForPage(CriteriaQuery criteriaQuery, Class<T> clazz) {
308312
if (elasticsearchFilter != null)
309313
searchRequestBuilder.setPostFilter(elasticsearchFilter);
310314

311-
SearchResponse response = searchRequestBuilder
312-
.execute().actionGet();
315+
SearchResponse response = getSearchResponse(searchRequestBuilder
316+
.execute());
313317
return resultsMapper.mapResults(response, clazz, criteriaQuery.getPageable());
314318
}
315319

@@ -320,7 +324,7 @@ public <T> FacetedPage<T> queryForPage(StringQuery query, Class<T> clazz) {
320324

321325
@Override
322326
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());
324328
return mapper.mapResults(response, clazz, query.getPageable());
325329
}
326330

@@ -569,20 +573,20 @@ public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noF
569573
if (noFields) {
570574
requestBuilder.setNoFields();
571575
}
572-
return requestBuilder.execute().actionGet().getScrollId();
576+
return getSearchResponse(requestBuilder.execute()).getScrollId();
573577
}
574578

575579
@Override
576580
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());
579583
return resultsMapper.mapResults(response, clazz, null);
580584
}
581585

582586
@Override
583587
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());
586590
return mapper.mapResults(response, null, null);
587591
}
588592

@@ -645,7 +649,7 @@ public <T> Page<T> moreLikeThis(MoreLikeThisQuery query, Class<T> clazz) {
645649
requestBuilder.setBoostTerms(query.getBoostTerms());
646650
}
647651

648-
SearchResponse response = requestBuilder.execute().actionGet();
652+
SearchResponse response = getSearchResponse(requestBuilder.execute());
649653
return resultsMapper.mapResults(response, clazz, query.getPageable());
650654
}
651655

@@ -681,8 +685,11 @@ private SearchResponse doSearch(SearchRequestBuilder searchRequest, SearchQuery
681685
searchRequest.addAggregation(aggregationBuilder);
682686
}
683687
}
688+
return getSearchResponse(searchRequest.setQuery(searchQuery.getQuery()).execute());
689+
}
684690

685-
return searchRequest.setQuery(searchQuery.getQuery()).execute().actionGet();
691+
private SearchResponse getSearchResponse(ListenableActionFuture<SearchResponse> response) {
692+
return searchTimeout == null ? response.actionGet() : response.actionGet(searchTimeout);
686693
}
687694

688695
private <T> boolean createIndexIfNotCreated(Class<T> clazz) {
@@ -981,14 +988,14 @@ public static String readFileFromClasspath(String url) {
981988

982989
return stringBuilder.toString();
983990
}
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+
}
9941001
}

0 commit comments

Comments
 (0)