Skip to content

Commit 2ef4e4e

Browse files
committed
Rename lenient to failuresAllowed
1 parent bc81bd0 commit 2ef4e4e

File tree

10 files changed

+84
-61
lines changed

10 files changed

+84
-61
lines changed

server/src/main/java/org/elasticsearch/TransportVersions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ static TransportVersion def(int id) {
180180
public static final TransportVersion REMOVE_DESIRED_NODE_VERSION = def(9_004_0_00);
181181
public static final TransportVersion ESQL_DRIVER_TASK_DESCRIPTION = def(9_005_0_00);
182182
public static final TransportVersion ESQL_RETRY_ON_SHARD_LEVEL_FAILURE = def(9_006_0_00);
183-
public static final TransportVersion LENIENT_RERANKERS = def(9_007_0_00);
183+
public static final TransportVersion RERANKER_FAILURES_ALLOWED = def(9_007_0_00);
184184

185185
/*
186186
* STOP! READ THIS FIRST! No, really,

server/src/main/java/org/elasticsearch/action/search/RankFeaturePhase.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ private void onPhaseDone(
187187
new ActionListener<>() {
188188
@Override
189189
public void onResponse(RankFeatureDoc[] docsWithUpdatedScores) {
190-
RankFeatureDoc[] topResults = rankFeaturePhaseRankCoordinatorContext.rankAndPaginate(docsWithUpdatedScores);
190+
RankFeatureDoc[] topResults = rankFeaturePhaseRankCoordinatorContext.rankAndPaginate(docsWithUpdatedScores, true);
191191
SearchPhaseController.ReducedQueryPhase reducedRankFeaturePhase = newReducedQueryPhaseResults(
192192
reducedQueryPhase,
193193
topResults
@@ -197,7 +197,7 @@ public void onResponse(RankFeatureDoc[] docsWithUpdatedScores) {
197197

198198
@Override
199199
public void onFailure(Exception e) {
200-
if (rankFeaturePhaseRankCoordinatorContext.isLenient()) {
200+
if (rankFeaturePhaseRankCoordinatorContext.failuresAllowed()) {
201201
// TODO: handle the exception somewhere
202202
// don't want to log the entire stack trace, it's not helpful here
203203
logger.warn("Exception computing updated ranks: {}. Continuing with existing ranks.", e.toString());
@@ -206,9 +206,12 @@ public void onFailure(Exception e) {
206206
.map(sd -> new RankFeatureDoc(sd.doc, sd.score, sd.shardIndex))
207207
.toArray(RankFeatureDoc[]::new);
208208

209-
// AbstractThreadedActionListener forks onFailure to the same executor as onResponse,
210-
// so we can just call this direct
211-
onResponse(existingScores);
209+
RankFeatureDoc[] topResults = rankFeaturePhaseRankCoordinatorContext.rankAndPaginate(existingScores, false);
210+
SearchPhaseController.ReducedQueryPhase reducedRankFeaturePhase = newReducedQueryPhaseResults(
211+
reducedQueryPhase,
212+
topResults
213+
);
214+
moveToNextPhase(rankPhaseResults, reducedRankFeaturePhase);
212215
} else {
213216
context.onPhaseFailure(NAME, "Computing updated ranks for results failed", e);
214217
}

server/src/main/java/org/elasticsearch/search/rank/context/RankFeaturePhaseRankCoordinatorContext.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,17 @@ public abstract class RankFeaturePhaseRankCoordinatorContext {
2929
protected final int size;
3030
protected final int from;
3131
protected final int rankWindowSize;
32-
protected final boolean lenient;
32+
protected final boolean failuresAllowed;
3333

34-
public RankFeaturePhaseRankCoordinatorContext(int size, int from, int rankWindowSize, boolean lenient) {
34+
public RankFeaturePhaseRankCoordinatorContext(int size, int from, int rankWindowSize, boolean failuresAllowed) {
3535
this.size = size < 0 ? DEFAULT_SIZE : size;
3636
this.from = from < 0 ? DEFAULT_FROM : from;
3737
this.rankWindowSize = rankWindowSize;
38-
this.lenient = lenient;
38+
this.failuresAllowed = failuresAllowed;
3939
}
4040

41-
public boolean isLenient() {
42-
return lenient;
41+
public boolean failuresAllowed() {
42+
return failuresAllowed;
4343
}
4444

4545
/**
@@ -50,9 +50,11 @@ public boolean isLenient() {
5050

5151
/**
5252
* Preprocesses the provided documents: sorts them by score descending.
53-
* @param originalDocs documents to process
53+
*
54+
* @param originalDocs documents to process
55+
* @param rerankedScores {@code true} if the document scores have been reranked
5456
*/
55-
protected RankFeatureDoc[] preprocess(RankFeatureDoc[] originalDocs) {
57+
protected RankFeatureDoc[] preprocess(RankFeatureDoc[] originalDocs, boolean rerankedScores) {
5658
RankFeatureDoc[] sorted = originalDocs.clone();
5759
Arrays.sort(sorted, Comparator.comparing((RankFeatureDoc doc) -> doc.score).reversed());
5860
return sorted;
@@ -82,10 +84,12 @@ public void computeRankScoresForGlobalResults(RankFeatureDoc[] featureDocs, Acti
8284
/**
8385
* Ranks the provided {@link RankFeatureDoc} array and paginates the results based on the `from` and `size` parameters. Filters out
8486
* documents that have a relevance score less than min_score.
87+
*
8588
* @param rankFeatureDocs documents to process
89+
* @param rerankedScores {@code true} if the document scores have been reranked
8690
*/
87-
public RankFeatureDoc[] rankAndPaginate(RankFeatureDoc[] rankFeatureDocs) {
88-
RankFeatureDoc[] sortedDocs = preprocess(rankFeatureDocs);
91+
public RankFeatureDoc[] rankAndPaginate(RankFeatureDoc[] rankFeatureDocs, boolean rerankedScores) {
92+
RankFeatureDoc[] sortedDocs = preprocess(rankFeatureDocs, rerankedScores);
8993
RankFeatureDoc[] topResults = new RankFeatureDoc[Math.max(0, Math.min(size, sortedDocs.length - from))];
9094
for (int rank = 0; rank < topResults.length; ++rank) {
9195
topResults[rank] = sortedDocs[from + rank];

server/src/test/java/org/elasticsearch/action/search/RankFeaturePhaseTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ public void computeRankScoresForGlobalResults(RankFeatureDoc[] featureDocs, Acti
790790
}
791791

792792
@Override
793-
public RankFeatureDoc[] rankAndPaginate(RankFeatureDoc[] rankFeatureDocs) {
793+
public RankFeatureDoc[] rankAndPaginate(RankFeatureDoc[] rankFeatureDocs, boolean rerankedScores) {
794794
Arrays.sort(rankFeatureDocs, Comparator.comparing((RankFeatureDoc doc) -> doc.score).reversed());
795795
RankFeatureDoc[] topResults = new RankFeatureDoc[Math.max(0, Math.min(size, rankFeatureDocs.length - from))];
796796
// perform pagination

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/rank/textsimilarity/TextSimilarityRankBuilder.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,22 @@ public class TextSimilarityRankBuilder extends RankBuilder {
4848
private final String inferenceText;
4949
private final String field;
5050
private final Float minScore;
51-
private final boolean lenient;
51+
private final boolean failuresAllowed;
5252

5353
public TextSimilarityRankBuilder(
5454
String field,
5555
String inferenceId,
5656
String inferenceText,
5757
int rankWindowSize,
5858
Float minScore,
59-
boolean lenient
59+
boolean failuresAllowed
6060
) {
6161
super(rankWindowSize);
6262
this.inferenceId = inferenceId;
6363
this.inferenceText = inferenceText;
6464
this.field = field;
6565
this.minScore = minScore;
66-
this.lenient = lenient;
66+
this.failuresAllowed = failuresAllowed;
6767
}
6868

6969
public TextSimilarityRankBuilder(StreamInput in) throws IOException {
@@ -73,10 +73,10 @@ public TextSimilarityRankBuilder(StreamInput in) throws IOException {
7373
this.inferenceText = in.readString();
7474
this.field = in.readString();
7575
this.minScore = in.readOptionalFloat();
76-
if (in.getTransportVersion().onOrAfter(TransportVersions.LENIENT_RERANKERS)) {
77-
this.lenient = in.readBoolean();
76+
if (in.getTransportVersion().onOrAfter(TransportVersions.RERANKER_FAILURES_ALLOWED)) {
77+
this.failuresAllowed = in.readBoolean();
7878
} else {
79-
this.lenient = false;
79+
this.failuresAllowed = false;
8080
}
8181
}
8282

@@ -97,8 +97,8 @@ public void doWriteTo(StreamOutput out) throws IOException {
9797
out.writeString(inferenceText);
9898
out.writeString(field);
9999
out.writeOptionalFloat(minScore);
100-
if (out.getTransportVersion().onOrAfter(TransportVersions.LENIENT_RERANKERS)) {
101-
out.writeBoolean(lenient);
100+
if (out.getTransportVersion().onOrAfter(TransportVersions.RERANKER_FAILURES_ALLOWED)) {
101+
out.writeBoolean(failuresAllowed);
102102
}
103103
}
104104

@@ -164,7 +164,7 @@ public RankFeaturePhaseRankCoordinatorContext buildRankFeaturePhaseCoordinatorCo
164164
inferenceId,
165165
inferenceText,
166166
minScore,
167-
lenient
167+
failuresAllowed
168168
);
169169
}
170170

@@ -184,8 +184,8 @@ public Float minScore() {
184184
return minScore;
185185
}
186186

187-
public boolean isLenient() {
188-
return lenient;
187+
public boolean failuresAllowed() {
188+
return failuresAllowed;
189189
}
190190

191191
@Override
@@ -195,11 +195,11 @@ protected boolean doEquals(RankBuilder other) {
195195
&& Objects.equals(inferenceText, that.inferenceText)
196196
&& Objects.equals(field, that.field)
197197
&& Objects.equals(minScore, that.minScore)
198-
&& lenient == that.lenient;
198+
&& failuresAllowed == that.failuresAllowed;
199199
}
200200

201201
@Override
202202
protected int doHashCode() {
203-
return Objects.hash(inferenceId, inferenceText, field, minScore, lenient);
203+
return Objects.hash(inferenceId, inferenceText, field, minScore, failuresAllowed);
204204
}
205205
}

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/rank/textsimilarity/TextSimilarityRankFeaturePhaseRankCoordinatorContext.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ public TextSimilarityRankFeaturePhaseRankCoordinatorContext(
4444
String inferenceId,
4545
String inferenceText,
4646
Float minScore,
47-
boolean lenient
47+
boolean failuresAllowed
4848
) {
49-
super(size, from, rankWindowSize, lenient);
49+
super(size, from, rankWindowSize, failuresAllowed);
5050
this.client = client;
5151
this.inferenceId = inferenceId;
5252
this.inferenceText = inferenceText;
@@ -127,10 +127,17 @@ protected void computeScores(RankFeatureDoc[] featureDocs, ActionListener<float[
127127

128128
/**
129129
* Sorts documents by score descending and discards those with a score less than minScore.
130-
* @param originalDocs documents to process
130+
*
131+
* @param originalDocs documents to process
132+
* @param rerankedScores {@code true} if the document scores have been reranked
131133
*/
132134
@Override
133-
protected RankFeatureDoc[] preprocess(RankFeatureDoc[] originalDocs) {
135+
protected RankFeatureDoc[] preprocess(RankFeatureDoc[] originalDocs, boolean rerankedScores) {
136+
if (rerankedScores == false) {
137+
// just do a sort, don't normalize or apply minScore to scores that haven't been modified
138+
Arrays.sort(originalDocs);
139+
return originalDocs;
140+
}
134141
List<RankFeatureDoc> docs = new ArrayList<>(originalDocs.length);
135142
for (RankFeatureDoc doc : originalDocs) {
136143
if (minScore == null || doc.score >= minScore) {

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/rank/textsimilarity/TextSimilarityRankRetrieverBuilder.java

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class TextSimilarityRankRetrieverBuilder extends CompoundRetrieverBuilder
4444
public static final ParseField INFERENCE_ID_FIELD = new ParseField("inference_id");
4545
public static final ParseField INFERENCE_TEXT_FIELD = new ParseField("inference_text");
4646
public static final ParseField FIELD_FIELD = new ParseField("field");
47-
public static final ParseField LENIENT_FIELD = new ParseField("lenient");
47+
public static final ParseField FAILURES_ALLOWED_FIELD = new ParseField("failures_allowed");
4848

4949
public static final ConstructingObjectParser<TextSimilarityRankRetrieverBuilder, RetrieverParserContext> PARSER =
5050
new ConstructingObjectParser<>(TextSimilarityRankBuilder.NAME, args -> {
@@ -53,9 +53,16 @@ public class TextSimilarityRankRetrieverBuilder extends CompoundRetrieverBuilder
5353
String inferenceText = (String) args[2];
5454
String field = (String) args[3];
5555
int rankWindowSize = args[4] == null ? DEFAULT_RANK_WINDOW_SIZE : (int) args[4];
56-
boolean lenient = args[5] != null && (Boolean) args[5];
57-
58-
return new TextSimilarityRankRetrieverBuilder(retrieverBuilder, inferenceId, inferenceText, field, rankWindowSize, lenient);
56+
boolean failuresAllowed = args[5] != null && (Boolean) args[5];
57+
58+
return new TextSimilarityRankRetrieverBuilder(
59+
retrieverBuilder,
60+
inferenceId,
61+
inferenceText,
62+
field,
63+
rankWindowSize,
64+
failuresAllowed
65+
);
5966
});
6067

6168
static {
@@ -68,7 +75,7 @@ public class TextSimilarityRankRetrieverBuilder extends CompoundRetrieverBuilder
6875
PARSER.declareString(constructorArg(), INFERENCE_TEXT_FIELD);
6976
PARSER.declareString(constructorArg(), FIELD_FIELD);
7077
PARSER.declareInt(optionalConstructorArg(), RANK_WINDOW_SIZE_FIELD);
71-
PARSER.declareBoolean(optionalConstructorArg(), LENIENT_FIELD);
78+
PARSER.declareBoolean(optionalConstructorArg(), FAILURES_ALLOWED_FIELD);
7279

7380
RetrieverBuilder.declareBaseParserFields(TextSimilarityRankBuilder.NAME, PARSER);
7481
}
@@ -87,21 +94,21 @@ public static TextSimilarityRankRetrieverBuilder fromXContent(
8794
private final String inferenceId;
8895
private final String inferenceText;
8996
private final String field;
90-
private final boolean lenient;
97+
private final boolean failuresAllowed;
9198

9299
public TextSimilarityRankRetrieverBuilder(
93100
RetrieverBuilder retrieverBuilder,
94101
String inferenceId,
95102
String inferenceText,
96103
String field,
97104
int rankWindowSize,
98-
boolean lenient
105+
boolean failuresAllowed
99106
) {
100107
super(List.of(new RetrieverSource(retrieverBuilder, null)), rankWindowSize);
101108
this.inferenceId = inferenceId;
102109
this.inferenceText = inferenceText;
103110
this.field = field;
104-
this.lenient = lenient;
111+
this.failuresAllowed = failuresAllowed;
105112
}
106113

107114
public TextSimilarityRankRetrieverBuilder(
@@ -111,7 +118,7 @@ public TextSimilarityRankRetrieverBuilder(
111118
String field,
112119
int rankWindowSize,
113120
Float minScore,
114-
boolean lenient,
121+
boolean failuresAllowed,
115122
String retrieverName,
116123
List<QueryBuilder> preFilterQueryBuilders
117124
) {
@@ -123,7 +130,7 @@ public TextSimilarityRankRetrieverBuilder(
123130
this.inferenceText = inferenceText;
124131
this.field = field;
125132
this.minScore = minScore;
126-
this.lenient = lenient;
133+
this.failuresAllowed = failuresAllowed;
127134
this.retrieverName = retrieverName;
128135
this.preFilterQueryBuilders = preFilterQueryBuilders;
129136
}
@@ -140,7 +147,7 @@ protected TextSimilarityRankRetrieverBuilder clone(
140147
field,
141148
rankWindowSize,
142149
minScore,
143-
lenient,
150+
failuresAllowed,
144151
retrieverName,
145152
newPreFilterQueryBuilders
146153
);
@@ -171,7 +178,9 @@ protected RankDoc[] combineInnerRetrieverResults(List<ScoreDoc[]> rankResults, b
171178

172179
@Override
173180
protected SearchSourceBuilder finalizeSourceBuilder(SearchSourceBuilder sourceBuilder) {
174-
sourceBuilder.rankBuilder(new TextSimilarityRankBuilder(field, inferenceId, inferenceText, rankWindowSize, minScore, lenient));
181+
sourceBuilder.rankBuilder(
182+
new TextSimilarityRankBuilder(field, inferenceId, inferenceText, rankWindowSize, minScore, failuresAllowed)
183+
);
175184
return sourceBuilder;
176185
}
177186

@@ -188,8 +197,8 @@ public int rankWindowSize() {
188197
return rankWindowSize;
189198
}
190199

191-
public boolean isLenient() {
192-
return lenient;
200+
public boolean failuresAllowed() {
201+
return failuresAllowed;
193202
}
194203

195204
@Override
@@ -199,8 +208,8 @@ protected void doToXContent(XContentBuilder builder, Params params) throws IOExc
199208
builder.field(INFERENCE_TEXT_FIELD.getPreferredName(), inferenceText);
200209
builder.field(FIELD_FIELD.getPreferredName(), field);
201210
builder.field(RANK_WINDOW_SIZE_FIELD.getPreferredName(), rankWindowSize);
202-
if (lenient) {
203-
builder.field(LENIENT_FIELD.getPreferredName(), lenient);
211+
if (failuresAllowed) {
212+
builder.field(FAILURES_ALLOWED_FIELD.getPreferredName(), failuresAllowed);
204213
}
205214
}
206215

@@ -213,11 +222,11 @@ public boolean doEquals(Object other) {
213222
&& Objects.equals(field, that.field)
214223
&& rankWindowSize == that.rankWindowSize
215224
&& Objects.equals(minScore, that.minScore)
216-
&& lenient == that.lenient;
225+
&& failuresAllowed == that.failuresAllowed;
217226
}
218227

219228
@Override
220229
public int doHashCode() {
221-
return Objects.hash(inferenceId, inferenceText, field, rankWindowSize, minScore, lenient);
230+
return Objects.hash(inferenceId, inferenceText, field, rankWindowSize, minScore, failuresAllowed);
222231
}
223232
}

x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/rank/textsimilarity/TextSimilarityRankRetrieverBuilderTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public void testParserDefaults() throws IOException {
120120
);
121121
assertThat(parsed.rankWindowSize(), equalTo(DEFAULT_RANK_WINDOW_SIZE));
122122
assertThat(parsed.inferenceId(), equalTo(DEFAULT_RERANK_ID));
123-
assertThat(parsed.isLenient(), equalTo(false));
123+
assertThat(parsed.failuresAllowed(), equalTo(false));
124124

125125
}
126126
}
@@ -152,7 +152,7 @@ public void testTextSimilarityRetrieverParsing() throws IOException {
152152
TextSimilarityRankRetrieverBuilder parsed = (TextSimilarityRankRetrieverBuilder) source.retriever();
153153
assertThat(parsed.minScore(), equalTo(20f));
154154
assertThat(parsed.retrieverName(), equalTo("foo_reranker"));
155-
assertThat(parsed.isLenient(), equalTo(true));
155+
assertThat(parsed.failuresAllowed(), equalTo(true));
156156
try (XContentParser parseSerialized = createParser(JsonXContent.jsonXContent, Strings.toString(source))) {
157157
SearchSourceBuilder deserializedSource = new SearchSourceBuilder().parseXContent(
158158
parseSerialized,

0 commit comments

Comments
 (0)