Skip to content

Commit 9f72e10

Browse files
committed
Resolved merge conflict
1 parent 1696bae commit 9f72e10

File tree

4 files changed

+19
-146
lines changed

4 files changed

+19
-146
lines changed

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -332,10 +332,11 @@ public int doHashCode() {
332332
return Objects.hash(super.doHashCode(), fields, query, rankConstant, Arrays.hashCode(weights));
333333
}
334334

335-
/**
336-
* Creates an RRFRetrieverBuilder from a list of weighted retrievers for simplified syntax.
337-
*/
338-
private RRFRetrieverBuilder createRRFFromWeightedRetrievers(List<WeightedRetrieverSource> r, int rankWindowSize, int rankConstant) {
335+
private static RRFRetrieverBuilder createRRFFromWeightedRetrievers(
336+
List<WeightedRetrieverSource> r,
337+
int rankWindowSize,
338+
int rankConstant
339+
) {
339340
int size = r.size();
340341
List<RetrieverSource> retrievers = new ArrayList<>(size);
341342
float[] weights = new float[size];
@@ -347,10 +348,7 @@ private RRFRetrieverBuilder createRRFFromWeightedRetrievers(List<WeightedRetriev
347348
return new RRFRetrieverBuilder(retrievers, null, null, rankWindowSize, rankConstant, weights);
348349
}
349350

350-
/**
351-
* Validates that field weights are non-negative for simplified syntax.
352-
*/
353-
private void validateNonNegativeWeight(float w) {
351+
private static void validateNonNegativeWeight(float w) {
354352
if (w < 0) {
355353
throw new IllegalArgumentException("[" + NAME + "] per-field weights must be non-negative");
356354
}

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

Lines changed: 9 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public static RRFRetrieverBuilder createRandomRRFRetrieverBuilder() {
5454
fields = randomList(1, 10, () -> {
5555
String field = randomAlphaOfLengthBetween(1, 10);
5656
if (randomBoolean()) {
57-
float weight = randomFloat() * 10 + 0.1f;
58-
return field + "^" + weight;
57+
float weight = randomFloatBetween(0.1f, 10.0f, true);
58+
field = field + "^" + weight;
5959
}
6060
return field;
6161
});
@@ -367,111 +367,20 @@ public void testRRFRetrieverComponentErrorCases() throws IOException {
367367
}
368368

369369
public void testSimplifiedWeightedFieldsParsing() throws IOException {
370-
SearchUsageHolder searchUsageHolder = new UsageService().getSearchUsageHolder();
371-
372-
// Test basic weighted field syntax parsing
373-
String basicWeightedContent = """
374-
{
375-
"retriever": {
376-
"rrf": {
377-
"fields": ["name^2.0", "description^0.5"],
378-
"query": "test"
379-
}
380-
}
381-
}
382-
""";
383-
384-
try (XContentParser jsonParser = createParser(JsonXContent.jsonXContent, basicWeightedContent)) {
385-
SearchSourceBuilder source = new SearchSourceBuilder().parseXContent(jsonParser, true, searchUsageHolder, nf -> true);
386-
assertThat(source.retriever(), instanceOf(RRFRetrieverBuilder.class));
387-
RRFRetrieverBuilder parsed = (RRFRetrieverBuilder) source.retriever();
388-
assertNotNull(parsed);
389-
assertEquals("rrf", parsed.getName());
390-
}
391-
}
392-
393-
public void testMixedWeightedAndUnweightedFields() throws IOException {
394-
SearchUsageHolder searchUsageHolder = new UsageService().getSearchUsageHolder();
395-
396-
// Test mixing weighted and unweighted fields
397-
String mixedContent = """
398-
{
399-
"retriever": {
400-
"rrf": {
401-
"fields": ["title^3.0", "content", "tags^1.5", "summary"],
402-
"query": "search term"
403-
}
404-
}
405-
}
406-
""";
407-
408-
try (XContentParser jsonParser = createParser(JsonXContent.jsonXContent, mixedContent)) {
409-
SearchSourceBuilder source = new SearchSourceBuilder().parseXContent(jsonParser, true, searchUsageHolder, nf -> true);
410-
assertThat(source.retriever(), instanceOf(RRFRetrieverBuilder.class));
411-
}
412-
}
413-
414-
public void testDecimalWeights() throws IOException {
415-
SearchUsageHolder searchUsageHolder = new UsageService().getSearchUsageHolder();
416-
417-
// Test various decimal weight values
418-
String decimalWeightsContent = """
419-
{
420-
"retriever": {
421-
"rrf": {
422-
"fields": ["field1^0.1", "field2^2.75", "field3^10.5"],
423-
"query": "test"
424-
}
425-
}
426-
}
427-
""";
428-
429-
try (XContentParser jsonParser = createParser(JsonXContent.jsonXContent, decimalWeightsContent)) {
430-
SearchSourceBuilder source = new SearchSourceBuilder().parseXContent(jsonParser, true, searchUsageHolder, nf -> true);
431-
assertThat(source.retriever(), instanceOf(RRFRetrieverBuilder.class));
432-
}
433-
}
434-
435-
public void testZeroWeight() throws IOException {
436-
SearchUsageHolder searchUsageHolder = new UsageService().getSearchUsageHolder();
437-
438-
// Test zero weight (should be valid)
439-
String zeroWeightContent = """
440-
{
441-
"retriever": {
442-
"rrf": {
443-
"fields": ["field1^0.0", "field2^1.0"],
444-
"query": "test"
445-
}
446-
}
447-
}
448-
""";
449-
450-
try (XContentParser jsonParser = createParser(JsonXContent.jsonXContent, zeroWeightContent)) {
451-
SearchSourceBuilder source = new SearchSourceBuilder().parseXContent(jsonParser, true, searchUsageHolder, nf -> true);
452-
assertThat(source.retriever(), instanceOf(RRFRetrieverBuilder.class));
453-
}
454-
}
455-
456-
public void testLargeWeightValues() throws IOException {
457-
SearchUsageHolder searchUsageHolder = new UsageService().getSearchUsageHolder();
458-
459-
// Test very large weight values
460-
String largeWeightContent = """
370+
// Test that weighted fields are parsed correctly
371+
String restContent = """
461372
{
462373
"retriever": {
463374
"rrf": {
464-
"fields": ["field1^1000.0", "field2^999999.99"],
465-
"query": "test"
375+
"fields": ["name^2.0", "description^0.5", "content"],
376+
"query": "test query",
377+
"min_score": 20.0,
378+
"_name": "foo_rrf"
466379
}
467380
}
468381
}
469382
""";
470-
471-
try (XContentParser jsonParser = createParser(JsonXContent.jsonXContent, largeWeightContent)) {
472-
SearchSourceBuilder source = new SearchSourceBuilder().parseXContent(jsonParser, true, searchUsageHolder, nf -> true);
473-
assertThat(source.retriever(), instanceOf(RRFRetrieverBuilder.class));
474-
}
383+
checkRRFRetrieverParsing(restContent);
475384
}
476385

477386
private void expectParsingException(String restContent, String expectedMessageFragment) throws IOException {

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

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -348,13 +348,17 @@ public void testMultiFieldsParamsRewriteWithWeights() {
348348
RRFRetrieverBuilder.DEFAULT_RANK_CONSTANT,
349349
new float[0]
350350
);
351+
<<<<<<< HEAD
351352
assertMultiFieldsParamsRewriteWithWeights(
352353
rrfRetrieverBuilder,
353354
queryRewriteContext,
354355
Map.of("field", 0.0f),
355356
Map.of(),
356357
"test query"
357358
);
359+
=======
360+
assertMultiFieldsParamsRewrite(rrfRetrieverBuilder, queryRewriteContext, Map.of("field", 0.0f), Map.of(), "test query");
361+
>>>>>>> 9c3b02a0421 (Addressed all comments and cleaned up)
358362

359363
// Large weight values are handled correctly
360364
rrfRetrieverBuilder = new RRFRetrieverBuilder(
@@ -527,9 +531,6 @@ public void testSearchRemoteIndex() {
527531
assertEquals("[rrf] cannot specify [query] when querying remote indices", iae.getMessage());
528532
}
529533

530-
531-
532-
533534
public void testNegativeWeightsRejected() {
534535
final String indexName = "test-index";
535536
final ResolvedIndices resolvedIndices = createMockResolvedIndices(indexName, List.of(), null);
@@ -562,12 +563,6 @@ public void testNegativeWeightsRejected() {
562563
assertEquals("[rrf] per-field weights must be non-negative", iae.getMessage());
563564
}
564565

565-
566-
567-
568-
569-
570-
571566
@Override
572567
protected NamedXContentRegistry xContentRegistry() {
573568
List<NamedXContentRegistry.Entry> entries = new SearchModule(Settings.EMPTY, List.of()).getNamedXContents();

x-pack/plugin/rank-rrf/src/yamlRestTest/resources/rest-api-spec/test/rrf/310_rrf_retriever_simplified.yml

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -567,19 +567,6 @@ setup:
567567
- match: { hits.hits.1._id: "1" }
568568
- match: { hits.hits.2._id: "3" }
569569

570-
---
571-
"Negative per-field weights are rejected":
572-
- do:
573-
catch: bad_request
574-
search:
575-
index: test-index
576-
body:
577-
retriever:
578-
rrf:
579-
fields: [ "text_1^-1" ]
580-
query: "foo"
581-
- contains: { error.root_cause.0.reason: "[rrf] per-field weights must be non-negative" }
582-
583570
---
584571
"Zero per-field weights are accepted":
585572
- do:
@@ -611,19 +598,3 @@ setup:
611598
- match: { hits.total.value: 3 }
612599
- length: { hits.hits: 3 }
613600

614-
---
615-
"Large weight values":
616-
- requires:
617-
cluster_features: ["rrf_retriever.simplified_weighted_support"]
618-
reason: "Simplified weighted fields syntax support"
619-
620-
- do:
621-
search:
622-
index: test-index
623-
body:
624-
retriever:
625-
rrf:
626-
fields: ["text_1^1000000", "text_2^1"]
627-
query: "foo"
628-
629-
- gte: { hits.total.value: 1 }

0 commit comments

Comments
 (0)