Skip to content

Commit 4728cae

Browse files
committed
Add IndicesOptions to search request.
Closes spring-projects#2641 Closes spring-projects#2639
1 parent 0028d7d commit 4728cae

File tree

2 files changed

+55
-3
lines changed

2 files changed

+55
-3
lines changed

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

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
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;
25-
import co.elastic.clients.elasticsearch._types.SearchType;
2626
import co.elastic.clients.elasticsearch._types.SortOptions;
2727
import co.elastic.clients.elasticsearch._types.SortOrder;
2828
import co.elastic.clients.elasticsearch._types.VersionType;
@@ -64,12 +64,13 @@
6464
import java.util.Arrays;
6565
import java.util.Collections;
6666
import java.util.HashMap;
67-
import java.util.LinkedHashMap;
6867
import java.util.List;
6968
import java.util.Map;
7069
import java.util.function.Function;
7170
import java.util.stream.Collectors;
7271

72+
import org.apache.commons.logging.Log;
73+
import org.apache.commons.logging.LogFactory;
7374
import org.springframework.dao.InvalidDataAccessApiUsageException;
7475
import org.springframework.data.domain.Sort;
7576
import org.springframework.data.elasticsearch.core.RefreshPolicy;
@@ -109,6 +110,8 @@
109110
@SuppressWarnings("ClassCanBeRecord")
110111
class RequestConverter {
111112

113+
private static final Log LOGGER = LogFactory.getLog(RequestConverter.class);
114+
112115
// the default max result window size of Elasticsearch
113116
public static final Integer INDEX_MAX_RESULT_WINDOW = 10_000;
114117

@@ -1342,7 +1345,7 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
13421345
}
13431346

13441347
if (query.getIndicesOptions() != null) {
1345-
// new Elasticsearch client does not support the old Indices options, need to be adapted
1348+
addIndicesOptions(builder, query.getIndicesOptions());
13461349
}
13471350

13481351
if (query.isLimiting()) {
@@ -1429,6 +1432,34 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
14291432
}
14301433
}
14311434

1435+
private void addIndicesOptions(SearchRequest.Builder builder, IndicesOptions indicesOptions) {
1436+
1437+
indicesOptions.getOptions().forEach(option -> {
1438+
switch (option) {
1439+
case ALLOW_NO_INDICES -> builder.allowNoIndices(true);
1440+
case IGNORE_UNAVAILABLE -> builder.ignoreUnavailable(true);
1441+
case IGNORE_THROTTLED -> builder.ignoreThrottled(true);
1442+
// the following ones aren't supported by the builder
1443+
case FORBID_ALIASES_TO_MULTIPLE_INDICES, FORBID_CLOSED_INDICES, IGNORE_ALIASES -> {
1444+
if (LOGGER.isWarnEnabled()) {
1445+
LOGGER
1446+
.warn(String.format("indices option %s is not supported by the Elasticsearch client.", option.name()));
1447+
}
1448+
}
1449+
}
1450+
});
1451+
1452+
builder.expandWildcards(indicesOptions.getExpandWildcards().stream().map(wildcardStates -> {
1453+
return switch (wildcardStates) {
1454+
case OPEN -> ExpandWildcard.Open;
1455+
case CLOSED -> ExpandWildcard.Closed;
1456+
case HIDDEN -> ExpandWildcard.Hidden;
1457+
case ALL -> ExpandWildcard.All;
1458+
case NONE -> ExpandWildcard.None;
1459+
};
1460+
}).collect(Collectors.toList()));
1461+
}
1462+
14321463
private Rescore getRescore(RescorerQuery rescorerQuery) {
14331464

14341465
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)