Skip to content

Commit b0d5599

Browse files
committed
Merge branch 'main' into feature/esql-tbucket-function
2 parents be418fc + fc0ea64 commit b0d5599

File tree

9 files changed

+694
-100
lines changed

9 files changed

+694
-100
lines changed

docs/changelog/130658.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 130658
2+
summary: Add support for weighted RRF in retrievers
3+
area: Relevance
4+
type: enhancement
5+
issues: []

server/src/main/java/org/elasticsearch/action/fieldcaps/FieldCapabilitiesResponse.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,20 @@ public class FieldCapabilitiesResponse extends ActionResponse implements Chunked
3636
public static final ParseField FAILURES_FIELD = new ParseField("failures");
3737

3838
private final String[] indices;
39-
private final Map<String, Map<String, FieldCapabilities>> responseMap;
39+
private final Map<String, Map<String, FieldCapabilities>> fields;
4040
private final List<FieldCapabilitiesFailure> failures;
4141
private final List<FieldCapabilitiesIndexResponse> indexResponses;
4242

4343
public FieldCapabilitiesResponse(
4444
String[] indices,
45-
Map<String, Map<String, FieldCapabilities>> responseMap,
45+
Map<String, Map<String, FieldCapabilities>> fields,
4646
List<FieldCapabilitiesFailure> failures
4747
) {
48-
this(indices, responseMap, Collections.emptyList(), failures);
48+
this(indices, fields, Collections.emptyList(), failures);
4949
}
5050

51-
public FieldCapabilitiesResponse(String[] indices, Map<String, Map<String, FieldCapabilities>> responseMap) {
52-
this(indices, responseMap, Collections.emptyList(), Collections.emptyList());
51+
public FieldCapabilitiesResponse(String[] indices, Map<String, Map<String, FieldCapabilities>> fields) {
52+
this(indices, fields, Collections.emptyList(), Collections.emptyList());
5353
}
5454

5555
public FieldCapabilitiesResponse(List<FieldCapabilitiesIndexResponse> indexResponses, List<FieldCapabilitiesFailure> failures) {
@@ -58,19 +58,19 @@ public FieldCapabilitiesResponse(List<FieldCapabilitiesIndexResponse> indexRespo
5858

5959
private FieldCapabilitiesResponse(
6060
String[] indices,
61-
Map<String, Map<String, FieldCapabilities>> responseMap,
61+
Map<String, Map<String, FieldCapabilities>> fields,
6262
List<FieldCapabilitiesIndexResponse> indexResponses,
6363
List<FieldCapabilitiesFailure> failures
6464
) {
65-
this.responseMap = Objects.requireNonNull(responseMap);
65+
this.fields = Objects.requireNonNull(fields);
6666
this.indexResponses = Objects.requireNonNull(indexResponses);
6767
this.indices = indices;
6868
this.failures = failures;
6969
}
7070

7171
public FieldCapabilitiesResponse(StreamInput in) throws IOException {
72-
indices = in.readStringArray();
73-
this.responseMap = in.readMap(FieldCapabilitiesResponse::readField);
72+
this.indices = in.readStringArray();
73+
this.fields = in.readMap(FieldCapabilitiesResponse::readField);
7474
this.indexResponses = FieldCapabilitiesIndexResponse.readList(in);
7575
this.failures = in.readCollectionAsList(FieldCapabilitiesFailure::new);
7676
}
@@ -98,7 +98,7 @@ public int getFailedIndicesCount() {
9898
* Get the field capabilities map.
9999
*/
100100
public Map<String, Map<String, FieldCapabilities>> get() {
101-
return responseMap;
101+
return fields;
102102
}
103103

104104
/**
@@ -120,7 +120,7 @@ public List<FieldCapabilitiesIndexResponse> getIndexResponses() {
120120
* Get the field capabilities per type for the provided {@code field}.
121121
*/
122122
public Map<String, FieldCapabilities> getField(String field) {
123-
return responseMap.get(field);
123+
return fields.get(field);
124124
}
125125

126126
/**
@@ -141,7 +141,7 @@ private static Map<String, FieldCapabilities> readField(StreamInput in) throws I
141141
@Override
142142
public void writeTo(StreamOutput out) throws IOException {
143143
out.writeStringArray(indices);
144-
out.writeMap(responseMap, FieldCapabilitiesResponse::writeField);
144+
out.writeMap(fields, FieldCapabilitiesResponse::writeField);
145145
FieldCapabilitiesIndexResponse.writeList(out, indexResponses);
146146
out.writeCollection(failures);
147147
}
@@ -160,7 +160,7 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
160160
Iterators.single(
161161
(b, p) -> b.startObject().array(INDICES_FIELD.getPreferredName(), indices).startObject(FIELDS_FIELD.getPreferredName())
162162
),
163-
Iterators.map(responseMap.entrySet().iterator(), r -> (b, p) -> b.xContentValuesMap(r.getKey(), r.getValue())),
163+
Iterators.map(fields.entrySet().iterator(), r -> (b, p) -> b.xContentValuesMap(r.getKey(), r.getValue())),
164164
this.failures.size() > 0
165165
? Iterators.concat(
166166
Iterators.single(
@@ -182,14 +182,14 @@ public boolean equals(Object o) {
182182
if (o == null || getClass() != o.getClass()) return false;
183183
FieldCapabilitiesResponse that = (FieldCapabilitiesResponse) o;
184184
return Arrays.equals(indices, that.indices)
185-
&& Objects.equals(responseMap, that.responseMap)
185+
&& Objects.equals(fields, that.fields)
186186
&& Objects.equals(indexResponses, that.indexResponses)
187187
&& Objects.equals(failures, that.failures);
188188
}
189189

190190
@Override
191191
public int hashCode() {
192-
int result = Objects.hash(responseMap, indexResponses, failures);
192+
int result = Objects.hash(fields, indexResponses, failures);
193193
result = 31 * result + Arrays.hashCode(indices);
194194
return result;
195195
}

server/src/main/java/org/elasticsearch/action/fieldcaps/TransportFieldCapabilitiesAction.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ private static FieldCapabilitiesResponse merge(
459459
final FieldCapabilitiesIndexResponse[] indexResponses = indexResponsesMap.values().toArray(new FieldCapabilitiesIndexResponse[0]);
460460
Arrays.sort(indexResponses, Comparator.comparing(FieldCapabilitiesIndexResponse::getIndexName));
461461
final String[] indices = Arrays.stream(indexResponses).map(FieldCapabilitiesIndexResponse::getIndexName).toArray(String[]::new);
462-
final Map<String, Map<String, FieldCapabilities.Builder>> responseMapBuilder = new HashMap<>();
462+
final Map<String, Map<String, FieldCapabilities.Builder>> fieldsBuilder = new HashMap<>();
463463
int lastPendingIndex = 0;
464464
for (int i = 1; i <= indexResponses.length; i++) {
465465
if (i == indexResponses.length || hasSameMappingHash(indexResponses[lastPendingIndex], indexResponses[i]) == false) {
@@ -469,17 +469,17 @@ private static FieldCapabilitiesResponse merge(
469469
} else {
470470
subIndices = ArrayUtil.copyOfSubArray(indices, lastPendingIndex, i);
471471
}
472-
innerMerge(subIndices, responseMapBuilder, request, indexResponses[lastPendingIndex]);
472+
innerMerge(subIndices, fieldsBuilder, request, indexResponses[lastPendingIndex]);
473473
lastPendingIndex = i;
474474
}
475475
}
476476

477477
task.ensureNotCancelled();
478-
Map<String, Map<String, FieldCapabilities>> responseMap = Maps.newMapWithExpectedSize(responseMapBuilder.size());
478+
Map<String, Map<String, FieldCapabilities>> fields = Maps.newMapWithExpectedSize(fieldsBuilder.size());
479479
if (request.includeUnmapped()) {
480-
collectResponseMapIncludingUnmapped(indices, responseMapBuilder, responseMap);
480+
collectFieldsIncludingUnmapped(indices, fieldsBuilder, fields);
481481
} else {
482-
collectResponseMap(responseMapBuilder, responseMap);
482+
collectFields(fieldsBuilder, fields);
483483
}
484484

485485
// The merge method is only called on the primary coordinator for cross-cluster field caps, so we
@@ -493,7 +493,7 @@ private static FieldCapabilitiesResponse merge(
493493
);
494494
}
495495
}
496-
return new FieldCapabilitiesResponse(indices, Collections.unmodifiableMap(responseMap), failures);
496+
return new FieldCapabilitiesResponse(indices, Collections.unmodifiableMap(fields), failures);
497497
}
498498

499499
private static boolean shouldLogException(Exception e) {
@@ -506,13 +506,13 @@ private static boolean shouldLogException(Exception e) {
506506
&& ExceptionsHelper.isNodeOrShardUnavailableTypeException(e) == false;
507507
}
508508

509-
private static void collectResponseMapIncludingUnmapped(
509+
private static void collectFieldsIncludingUnmapped(
510510
String[] indices,
511-
Map<String, Map<String, FieldCapabilities.Builder>> responseMapBuilder,
512-
Map<String, Map<String, FieldCapabilities>> responseMap
511+
Map<String, Map<String, FieldCapabilities.Builder>> fieldsBuilder,
512+
Map<String, Map<String, FieldCapabilities>> fieldsMap
513513
) {
514514
final Set<String> mappedScratch = new HashSet<>();
515-
for (Map.Entry<String, Map<String, FieldCapabilities.Builder>> entry : responseMapBuilder.entrySet()) {
515+
for (Map.Entry<String, Map<String, FieldCapabilities.Builder>> entry : fieldsBuilder.entrySet()) {
516516
var typeMapBuilder = entry.getValue().entrySet();
517517

518518
// do this directly, rather than using the builder, to save creating a whole lot of objects we don't need
@@ -527,17 +527,17 @@ private static void collectResponseMapIncludingUnmapped(
527527
if (unmapped != null) {
528528
res.put("unmapped", unmapped.apply(resSize > 1));
529529
}
530-
responseMap.put(entry.getKey(), Collections.unmodifiableMap(res));
530+
fieldsMap.put(entry.getKey(), Collections.unmodifiableMap(res));
531531
}
532532
}
533533

534-
private static void collectResponseMap(
535-
Map<String, Map<String, FieldCapabilities.Builder>> responseMapBuilder,
536-
Map<String, Map<String, FieldCapabilities>> responseMap
534+
private static void collectFields(
535+
Map<String, Map<String, FieldCapabilities.Builder>> fieldsBuilder,
536+
Map<String, Map<String, FieldCapabilities>> fields
537537
) {
538-
for (Map.Entry<String, Map<String, FieldCapabilities.Builder>> entry : responseMapBuilder.entrySet()) {
538+
for (Map.Entry<String, Map<String, FieldCapabilities.Builder>> entry : fieldsBuilder.entrySet()) {
539539
var typeMapBuilder = entry.getValue().entrySet();
540-
responseMap.put(entry.getKey(), Collections.unmodifiableMap(capabilities(typeMapBuilder.size(), typeMapBuilder)));
540+
fields.put(entry.getKey(), Collections.unmodifiableMap(capabilities(typeMapBuilder.size(), typeMapBuilder)));
541541
}
542542
}
543543

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public Set<NodeFeature> getTestFeatures() {
3636
LINEAR_RETRIEVER_L2_NORM,
3737
LINEAR_RETRIEVER_MINSCORE_FIX,
3838
LinearRetrieverBuilder.MULTI_FIELDS_QUERY_FORMAT_SUPPORT,
39-
RRFRetrieverBuilder.MULTI_FIELDS_QUERY_FORMAT_SUPPORT
39+
RRFRetrieverBuilder.MULTI_FIELDS_QUERY_FORMAT_SUPPORT,
40+
RRFRetrieverBuilder.WEIGHTED_SUPPORT
4041
);
4142
}
4243
}

0 commit comments

Comments
 (0)