@@ -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 {
0 commit comments