Skip to content

Commit 224a638

Browse files
sothawopaulrizzo
authored andcommitted
Add IndicesOptions to search request.
Closes spring-projects#2641 Closes spring-projects#2639
1 parent 351a6a0 commit 224a638

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static org.springframework.util.CollectionUtils.*;
2020

2121
import co.elastic.clients.elasticsearch._types.Conflicts;
22+
import co.elastic.clients.elasticsearch._types.ExpandWildcard;
2223
import co.elastic.clients.elasticsearch._types.FieldValue;
2324
import co.elastic.clients.elasticsearch._types.InlineScript;
2425
import co.elastic.clients.elasticsearch._types.OpType;
@@ -67,12 +68,13 @@
6768
import java.util.Arrays;
6869
import java.util.Collections;
6970
import java.util.HashMap;
70-
import java.util.LinkedHashMap;
7171
import java.util.List;
7272
import java.util.Map;
7373
import java.util.function.Function;
7474
import java.util.stream.Collectors;
7575

76+
import org.apache.commons.logging.Log;
77+
import org.apache.commons.logging.LogFactory;
7678
import org.springframework.dao.InvalidDataAccessApiUsageException;
7779
import org.springframework.data.domain.Sort;
7880
import org.springframework.data.elasticsearch.core.RefreshPolicy;
@@ -105,6 +107,8 @@
105107
*/
106108
class RequestConverter {
107109

110+
private static final Log LOGGER = LogFactory.getLog(RequestConverter.class);
111+
108112
// the default max result window size of Elasticsearch
109113
public static final Integer INDEX_MAX_RESULT_WINDOW = 10_000;
110114

@@ -1119,7 +1123,7 @@ private <T> void prepareSearchRequest(Query query, @Nullable Class<T> clazz, Ind
11191123
}
11201124

11211125
if (query.getIndicesOptions() != null) {
1122-
// new Elasticsearch client does not support the old Indices options, need to be adapted
1126+
addIndicesOptions(builder, query.getIndicesOptions());
11231127
}
11241128

11251129
if (query.isLimiting()) {
@@ -1213,6 +1217,34 @@ private <T> void prepareSearchRequest(Query query, @Nullable Class<T> clazz, Ind
12131217
}
12141218
}
12151219

1220+
private void addIndicesOptions(SearchRequest.Builder builder, IndicesOptions indicesOptions) {
1221+
1222+
indicesOptions.getOptions().forEach(option -> {
1223+
switch (option) {
1224+
case ALLOW_NO_INDICES -> builder.allowNoIndices(true);
1225+
case IGNORE_UNAVAILABLE -> builder.ignoreUnavailable(true);
1226+
case IGNORE_THROTTLED -> builder.ignoreThrottled(true);
1227+
// the following ones aren't supported by the builder
1228+
case FORBID_ALIASES_TO_MULTIPLE_INDICES, FORBID_CLOSED_INDICES, IGNORE_ALIASES -> {
1229+
if (LOGGER.isWarnEnabled()) {
1230+
LOGGER
1231+
.warn(String.format("indices option %s is not supported by the Elasticsearch client.", option.name()));
1232+
}
1233+
}
1234+
}
1235+
});
1236+
1237+
builder.expandWildcards(indicesOptions.getExpandWildcards().stream().map(wildcardStates -> {
1238+
return switch (wildcardStates) {
1239+
case OPEN -> ExpandWildcard.Open;
1240+
case CLOSED -> ExpandWildcard.Closed;
1241+
case HIDDEN -> ExpandWildcard.Hidden;
1242+
case ALL -> ExpandWildcard.All;
1243+
case NONE -> ExpandWildcard.None;
1244+
};
1245+
}).collect(Collectors.toList()));
1246+
}
1247+
12161248
private Rescore getRescore(RescorerQuery rescorerQuery) {
12171249

12181250
return Rescore.of(r -> r //

src/main/java/org/springframework/data/elasticsearch/core/query/IndicesOptions.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,27 @@ public IndicesOptions(EnumSet<Option> options, EnumSet<WildcardStates> expandWil
7171
this.expandWildcards = expandWildcards;
7272
}
7373

74+
/**
75+
* @since 5.2
76+
*/
77+
public static IndicesOptions ofOptions(EnumSet<Option> options) {
78+
return of(options, EnumSet.noneOf(WildcardStates.class));
79+
}
80+
81+
/**
82+
* @since 5.2
83+
*/
84+
public static IndicesOptions oFExpandWildcards(EnumSet<WildcardStates> expandWildcards) {
85+
return of(EnumSet.noneOf(Option.class), expandWildcards);
86+
}
87+
88+
/**
89+
* @since 5.2
90+
*/
91+
public static IndicesOptions of(EnumSet<Option> options, EnumSet<WildcardStates> expandWildcards) {
92+
return new IndicesOptions(options, expandWildcards);
93+
}
94+
7495
public EnumSet<Option> getOptions() {
7596
return options;
7697
}

0 commit comments

Comments
 (0)