Skip to content

Commit e79127b

Browse files
authored
Adding deprecation warnings for rank and sub_searches (#114854)
1 parent e144184 commit e79127b

File tree

15 files changed

+178
-31
lines changed

15 files changed

+178
-31
lines changed

docs/changelog/114854.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
pr: 114854
2+
summary: Adding deprecation warnings for rrf using rank and `sub_searches`
3+
area: Search
4+
type: deprecation
5+
issues: []
6+
deprecation:
7+
title: Adding deprecation warnings for rrf using rank and `sub_searches`
8+
area: REST API
9+
details: Search API parameter `sub_searches` will no longer be a supported and will be removed in future releases. Similarly, `rrf` can only be used through the specified `retriever` and no longer though the `rank` parameter
10+
impact: Requests specifying rrf through `rank` and/or `sub_searches` elements will be disallowed in a future version. Users should instead utilize the new `retriever` parameter.

modules/reindex/src/test/java/org/elasticsearch/reindex/BulkByScrollParallelizationHelperTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@
1515
import org.elasticsearch.test.ESTestCase;
1616

1717
import java.io.IOException;
18+
import java.util.Collections;
1819

19-
import static java.util.Collections.emptyList;
2020
import static org.elasticsearch.reindex.BulkByScrollParallelizationHelper.sliceIntoSubRequests;
2121
import static org.elasticsearch.search.RandomSearchRequestGenerator.randomSearchRequest;
2222
import static org.elasticsearch.search.RandomSearchRequestGenerator.randomSearchSourceBuilder;
2323

2424
public class BulkByScrollParallelizationHelperTests extends ESTestCase {
2525
public void testSliceIntoSubRequests() throws IOException {
2626
SearchRequest searchRequest = randomSearchRequest(
27-
() -> randomSearchSourceBuilder(() -> null, () -> null, () -> null, () -> null, () -> emptyList(), () -> null, () -> null)
27+
() -> randomSearchSourceBuilder(() -> null, () -> null, () -> null, Collections::emptyList, () -> null, () -> null)
2828
);
2929
if (searchRequest.source() != null) {
3030
// Clear the slice builder if there is one set. We can't call sliceIntoSubRequests if it is.

server/src/main/java/org/elasticsearch/search/builder/SearchSourceBuilder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.elasticsearch.core.Booleans;
2626
import org.elasticsearch.core.Nullable;
2727
import org.elasticsearch.core.TimeValue;
28+
import org.elasticsearch.core.UpdateForV10;
2829
import org.elasticsearch.features.NodeFeature;
2930
import org.elasticsearch.index.query.BoolQueryBuilder;
3031
import org.elasticsearch.index.query.QueryBuilder;
@@ -98,10 +99,11 @@ public final class SearchSourceBuilder implements Writeable, ToXContentObject, R
9899
public static final ParseField TIMEOUT_FIELD = new ParseField("timeout");
99100
public static final ParseField TERMINATE_AFTER_FIELD = new ParseField("terminate_after");
100101
public static final ParseField QUERY_FIELD = new ParseField("query");
101-
public static final ParseField SUB_SEARCHES_FIELD = new ParseField("sub_searches");
102+
@UpdateForV10(owner = UpdateForV10.Owner.SEARCH_RELEVANCE) // remove [sub_searches] and [rank] support in 10.0
103+
public static final ParseField SUB_SEARCHES_FIELD = new ParseField("sub_searches").withAllDeprecated("retriever");
104+
public static final ParseField RANK_FIELD = new ParseField("rank").withAllDeprecated("retriever");
102105
public static final ParseField POST_FILTER_FIELD = new ParseField("post_filter");
103106
public static final ParseField KNN_FIELD = new ParseField("knn");
104-
public static final ParseField RANK_FIELD = new ParseField("rank");
105107
public static final ParseField MIN_SCORE_FIELD = new ParseField("min_score");
106108
public static final ParseField VERSION_FIELD = new ParseField("version");
107109
public static final ParseField SEQ_NO_PRIMARY_TERM_FIELD = new ParseField("seq_no_primary_term");

server/src/test/java/org/elasticsearch/search/AbstractSearchTestCase.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ protected SearchSourceBuilder createSearchSourceBuilder() {
8989
return RandomSearchRequestGenerator.randomSearchSourceBuilder(
9090
HighlightBuilderTests::randomHighlighterBuilder,
9191
SuggestBuilderTests::randomSuggestBuilder,
92-
TestRankBuilder::randomRankBuilder,
9392
QueryRescorerBuilderTests::randomRescoreBuilder,
9493
randomExtBuilders,
9594
CollapseBuilderTests::randomCollapseBuilder,

server/src/test/java/org/elasticsearch/search/vectors/KnnSearchRequestParserTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ public void testParseSearchRequest() throws IOException {
7474
() -> null,
7575
() -> null,
7676
() -> null,
77-
() -> null,
7877
Collections::emptyList,
7978
() -> null,
8079
() -> null

test/framework/src/main/java/org/elasticsearch/search/RandomSearchRequestGenerator.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,11 @@
2323
import org.elasticsearch.search.aggregations.AggregationBuilders;
2424
import org.elasticsearch.search.builder.PointInTimeBuilder;
2525
import org.elasticsearch.search.builder.SearchSourceBuilder;
26-
import org.elasticsearch.search.builder.SubSearchSourceBuilder;
2726
import org.elasticsearch.search.collapse.CollapseBuilder;
2827
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
2928
import org.elasticsearch.search.fetch.subphase.FieldAndFormat;
3029
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
3130
import org.elasticsearch.search.internal.SearchContext;
32-
import org.elasticsearch.search.rank.RankBuilder;
3331
import org.elasticsearch.search.rescore.RescorerBuilder;
3432
import org.elasticsearch.search.searchafter.SearchAfterBuilder;
3533
import org.elasticsearch.search.slice.SliceBuilder;
@@ -122,7 +120,6 @@ public static SearchRequest randomSearchRequest(Supplier<SearchSourceBuilder> ra
122120
public static SearchSourceBuilder randomSearchSourceBuilder(
123121
Supplier<HighlightBuilder> randomHighlightBuilder,
124122
Supplier<SuggestBuilder> randomSuggestBuilder,
125-
Supplier<RankBuilder> rankContextBuilderSupplier,
126123
Supplier<RescorerBuilder<?>> randomRescoreBuilder,
127124
Supplier<List<SearchExtBuilder>> randomExtBuilders,
128125
Supplier<CollapseBuilder> randomCollapseBuilder,
@@ -250,17 +247,6 @@ public static SearchSourceBuilder randomSearchSourceBuilder(
250247
}
251248
if (randomBoolean()) {
252249
builder.query(QueryBuilders.termQuery(randomAlphaOfLengthBetween(5, 20), randomAlphaOfLengthBetween(5, 20)));
253-
} else if (randomBoolean()) {
254-
builder.subSearches(
255-
List.of(
256-
new SubSearchSourceBuilder(
257-
QueryBuilders.termQuery(randomAlphaOfLengthBetween(5, 20), randomAlphaOfLengthBetween(5, 20))
258-
),
259-
new SubSearchSourceBuilder(
260-
QueryBuilders.termQuery(randomAlphaOfLengthBetween(5, 20), randomAlphaOfLengthBetween(5, 20))
261-
)
262-
)
263-
);
264250
}
265251
if (randomBoolean()) {
266252
builder.postFilter(QueryBuilders.termQuery(randomAlphaOfLengthBetween(5, 20), randomAlphaOfLengthBetween(5, 20)));
@@ -354,9 +340,6 @@ public static SearchSourceBuilder randomSearchSourceBuilder(
354340
if (randomBoolean()) {
355341
builder.suggest(randomSuggestBuilder.get());
356342
}
357-
if (randomBoolean()) {
358-
builder.rankBuilder(rankContextBuilderSupplier.get());
359-
}
360343
if (randomBoolean()) {
361344
int numRescores = randomIntBetween(1, 5);
362345
for (int i = 0; i < numRescores; i++) {

x-pack/plugin/rank-rrf/src/main/java/org/elasticsearch/xpack/rank/rrf/RRFRankBuilder.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,17 @@
3636

3737
/**
3838
* The builder to support RRF. Adds user-defined parameters for window size and rank constant.
39+
*
40+
* @deprecated RRF support is provided through the retriever framework. Please use {@link RRFRetrieverBuilder instead}
3941
*/
42+
@Deprecated
4043
public class RRFRankBuilder extends RankBuilder {
4144

42-
public static final int DEFAULT_RANK_CONSTANT = 60;
43-
4445
public static final ParseField RANK_CONSTANT_FIELD = new ParseField("rank_constant");
4546

4647
static final ConstructingObjectParser<RRFRankBuilder, Void> PARSER = new ConstructingObjectParser<>(RRFRankPlugin.NAME, args -> {
4748
int windowSize = args[0] == null ? DEFAULT_RANK_WINDOW_SIZE : (int) args[0];
48-
int rankConstant = args[1] == null ? DEFAULT_RANK_CONSTANT : (int) args[1];
49+
int rankConstant = args[1] == null ? RRFRetrieverBuilder.DEFAULT_RANK_CONSTANT : (int) args[1];
4950
return new RRFRankBuilder(windowSize, rankConstant);
5051
});
5152

x-pack/plugin/rank-rrf/src/main/java/org/elasticsearch/xpack/rank/rrf/RRFRankDoc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import java.util.Arrays;
2020
import java.util.Objects;
2121

22-
import static org.elasticsearch.xpack.rank.rrf.RRFRankBuilder.DEFAULT_RANK_CONSTANT;
22+
import static org.elasticsearch.xpack.rank.rrf.RRFRetrieverBuilder.DEFAULT_RANK_CONSTANT;
2323

2424
/**
2525
* {@code RRFRankDoc} supports additional ranking information

x-pack/plugin/rank-rrf/src/main/java/org/elasticsearch/xpack/rank/rrf/RRFRetrieverBuilder.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.common.util.Maps;
1313
import org.elasticsearch.features.NodeFeature;
1414
import org.elasticsearch.license.LicenseUtils;
15+
import org.elasticsearch.search.rank.RankBuilder;
1516
import org.elasticsearch.search.rank.RankDoc;
1617
import org.elasticsearch.search.retriever.CompoundRetrieverBuilder;
1718
import org.elasticsearch.search.retriever.RetrieverBuilder;
@@ -31,7 +32,6 @@
3132

3233
import static org.elasticsearch.xcontent.ConstructingObjectParser.constructorArg;
3334
import static org.elasticsearch.xcontent.ConstructingObjectParser.optionalConstructorArg;
34-
import static org.elasticsearch.xpack.rank.rrf.RRFRankPlugin.NAME;
3535

3636
/**
3737
* An rrf retriever is used to represent an rrf rank element, but
@@ -50,15 +50,16 @@ public final class RRFRetrieverBuilder extends CompoundRetrieverBuilder<RRFRetri
5050
public static final ParseField RANK_WINDOW_SIZE_FIELD = new ParseField("rank_window_size");
5151
public static final ParseField RANK_CONSTANT_FIELD = new ParseField("rank_constant");
5252

53+
public static final int DEFAULT_RANK_CONSTANT = 60;
5354
@SuppressWarnings("unchecked")
5455
static final ConstructingObjectParser<RRFRetrieverBuilder, RetrieverParserContext> PARSER = new ConstructingObjectParser<>(
5556
NAME,
5657
false,
5758
args -> {
5859
List<RetrieverBuilder> childRetrievers = (List<RetrieverBuilder>) args[0];
5960
List<RetrieverSource> innerRetrievers = childRetrievers.stream().map(r -> new RetrieverSource(r, null)).toList();
60-
int rankWindowSize = args[1] == null ? RRFRankBuilder.DEFAULT_RANK_WINDOW_SIZE : (int) args[1];
61-
int rankConstant = args[2] == null ? RRFRankBuilder.DEFAULT_RANK_CONSTANT : (int) args[2];
61+
int rankWindowSize = args[1] == null ? RankBuilder.DEFAULT_RANK_WINDOW_SIZE : (int) args[1];
62+
int rankConstant = args[2] == null ? DEFAULT_RANK_CONSTANT : (int) args[2];
6263
return new RRFRetrieverBuilder(innerRetrievers, rankWindowSize, rankConstant);
6364
}
6465
);

x-pack/plugin/rank-rrf/src/test/java/org/elasticsearch/xpack/rank/rrf/RRFRetrieverBuilderParsingTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public static RRFRetrieverBuilder createRandomRRFRetrieverBuilder() {
4141
if (randomBoolean()) {
4242
rankWindowSize = randomIntBetween(1, 10000);
4343
}
44-
int rankConstant = RRFRankBuilder.DEFAULT_RANK_CONSTANT;
44+
int rankConstant = RRFRetrieverBuilder.DEFAULT_RANK_CONSTANT;
4545
if (randomBoolean()) {
4646
rankConstant = randomIntBetween(1, 1000000);
4747
}

0 commit comments

Comments
 (0)