3939import java .util .List ;
4040import java .util .Map ;
4141import java .util .Set ;
42+ import java .util .function .BiConsumer ;
4243
4344import static org .elasticsearch .search .rank .RankBuilder .DEFAULT_RANK_WINDOW_SIZE ;
4445import static org .hamcrest .Matchers .instanceOf ;
@@ -86,6 +87,17 @@ public void testRetrieverExtractionErrors() throws IOException {
8687 }
8788
8889 public void testRRFRetrieverParsingSyntax () throws IOException {
90+ BiConsumer <String , float []> testCase = (json , expectedWeights ) -> {
91+ try (XContentParser parser = createParser (JsonXContent .jsonXContent , json )) {
92+ SearchSourceBuilder ssb = new SearchSourceBuilder ().parseXContent (parser , true , nf -> true );
93+ assertThat (ssb .retriever (), instanceOf (RRFRetrieverBuilder .class ));
94+ RRFRetrieverBuilder rrf = (RRFRetrieverBuilder ) ssb .retriever ();
95+ assertArrayEquals (expectedWeights , rrf .weights (), 0.001f );
96+ } catch (IOException e ) {
97+ throw new RuntimeException (e );
98+ }
99+ };
100+
89101 String legacyJson = """
90102 {
91103 "retriever": {
@@ -98,12 +110,7 @@ public void testRRFRetrieverParsingSyntax() throws IOException {
98110 }
99111 }
100112 """ ;
101- try (XContentParser parser = createParser (JsonXContent .jsonXContent , legacyJson )) {
102- SearchSourceBuilder ssb = new SearchSourceBuilder ().parseXContent (parser , true , nf -> true );
103- assertThat (ssb .retriever (), instanceOf (RRFRetrieverBuilder .class ));
104- RRFRetrieverBuilder rrf = (RRFRetrieverBuilder ) ssb .retriever ();
105- assertArrayEquals (new float [] { 1.0f , 1.0f }, rrf .weights (), 0.001f );
106- }
113+ testCase .accept (legacyJson , new float [] { 1.0f , 1.0f });
107114
108115 String weightedJson = """
109116 {
@@ -117,12 +124,7 @@ public void testRRFRetrieverParsingSyntax() throws IOException {
117124 }
118125 }
119126 """ ;
120- try (XContentParser parser = createParser (JsonXContent .jsonXContent , weightedJson )) {
121- SearchSourceBuilder ssb = new SearchSourceBuilder ().parseXContent (parser , true , nf -> true );
122- assertThat (ssb .retriever (), instanceOf (RRFRetrieverBuilder .class ));
123- RRFRetrieverBuilder rrf = (RRFRetrieverBuilder ) ssb .retriever ();
124- assertArrayEquals (new float [] { 2.5f , 0.5f }, rrf .weights (), 0.001f );
125- }
127+ testCase .accept (weightedJson , new float [] { 2.5f , 0.5f });
126128
127129 String mixedJson = """
128130 {
@@ -136,12 +138,7 @@ public void testRRFRetrieverParsingSyntax() throws IOException {
136138 }
137139 }
138140 """ ;
139- try (XContentParser parser = createParser (JsonXContent .jsonXContent , mixedJson )) {
140- SearchSourceBuilder ssb = new SearchSourceBuilder ().parseXContent (parser , true , nf -> true );
141- assertThat (ssb .retriever (), instanceOf (RRFRetrieverBuilder .class ));
142- RRFRetrieverBuilder rrf = (RRFRetrieverBuilder ) ssb .retriever ();
143- assertArrayEquals (new float [] { 1.0f , 0.6f }, rrf .weights (), 0.001f );
144- }
141+ testCase .accept (mixedJson , new float [] { 1.0f , 0.6f });
145142 }
146143
147144 public void testMultiFieldsParamsRewrite () {
0 commit comments