@@ -107,6 +107,28 @@ protected NamedXContentRegistry xContentRegistry() {
107107 return new NamedXContentRegistry (entries );
108108 }
109109
110+ private void checkRRFRetrieverParsing (String restContent ) throws IOException {
111+ SearchUsageHolder searchUsageHolder = new UsageService ().getSearchUsageHolder ();
112+ try (XContentParser jsonParser = createParser (JsonXContent .jsonXContent , restContent )) {
113+ SearchSourceBuilder source = new SearchSourceBuilder ().parseXContent (jsonParser , true , searchUsageHolder , nf -> true );
114+ assertThat (source .retriever (), instanceOf (RRFRetrieverBuilder .class ));
115+ RRFRetrieverBuilder parsed = (RRFRetrieverBuilder ) source .retriever ();
116+ assertThat (parsed .minScore (), equalTo (20f ));
117+ assertThat (parsed .retrieverName (), equalTo ("foo_rrf" ));
118+ try (XContentParser parseSerialized = createParser (JsonXContent .jsonXContent , Strings .toString (source ))) {
119+ SearchSourceBuilder deserializedSource = new SearchSourceBuilder ().parseXContent (
120+ parseSerialized ,
121+ true ,
122+ searchUsageHolder ,
123+ nf -> true
124+ );
125+ assertThat (deserializedSource .retriever (), instanceOf (RRFRetrieverBuilder .class ));
126+ RRFRetrieverBuilder deserialized = (RRFRetrieverBuilder ) source .retriever ();
127+ assertThat (parsed , equalTo (deserialized ));
128+ }
129+ }
130+ }
131+
110132 public void testRRFRetrieverParsing () throws IOException {
111133 String restContent = """
112134 {
@@ -134,24 +156,99 @@ public void testRRFRetrieverParsing() throws IOException {
134156 }
135157 }
136158 """ ;
137- SearchUsageHolder searchUsageHolder = new UsageService ().getSearchUsageHolder ();
138- try (XContentParser jsonParser = createParser (JsonXContent .jsonXContent , restContent )) {
139- SearchSourceBuilder source = new SearchSourceBuilder ().parseXContent (jsonParser , true , searchUsageHolder , nf -> true );
140- assertThat (source .retriever (), instanceOf (RRFRetrieverBuilder .class ));
141- RRFRetrieverBuilder parsed = (RRFRetrieverBuilder ) source .retriever ();
142- assertThat (parsed .minScore (), equalTo (20f ));
143- assertThat (parsed .retrieverName (), equalTo ("foo_rrf" ));
144- try (XContentParser parseSerialized = createParser (JsonXContent .jsonXContent , Strings .toString (source ))) {
145- SearchSourceBuilder deserializedSource = new SearchSourceBuilder ().parseXContent (
146- parseSerialized ,
147- true ,
148- searchUsageHolder ,
149- nf -> true
150- );
151- assertThat (deserializedSource .retriever (), instanceOf (RRFRetrieverBuilder .class ));
152- RRFRetrieverBuilder deserialized = (RRFRetrieverBuilder ) source .retriever ();
153- assertThat (parsed , equalTo (deserialized ));
159+ checkRRFRetrieverParsing (restContent );
160+ }
161+
162+ public void testRRFRetrieverParsingWithWeights () throws IOException {
163+ String restContent = """
164+ {
165+ "retriever": {
166+ "rrf": {
167+ "retrievers": [
168+ {
169+ "retriever": {
170+ "test": {
171+ "value": "first"
172+ }
173+ },
174+ "weight": 2.0
175+ },
176+ {
177+ "retriever": {
178+ "test": {
179+ "value": "second"
180+ }
181+ },
182+ "weight": 0.5
183+ }
184+ ],
185+ "rank_window_size": 100,
186+ "rank_constant": 10,
187+ "min_score": 20.0,
188+ "_name": "foo_rrf"
189+ }
190+ }
154191 }
155- }
192+ """ ;
193+ checkRRFRetrieverParsing (restContent );
194+ }
195+
196+ public void testRRFRetrieverParsingWithMixedWeights () throws IOException {
197+ String restContent = """
198+ {
199+ "retriever": {
200+ "rrf": {
201+ "retrievers": [
202+ {
203+ "test": {
204+ "value": "no_weight"
205+ }
206+ },
207+ {
208+ "retriever": {
209+ "test": {
210+ "value": "with_weight"
211+ }
212+ },
213+ "weight": 1.5
214+ }
215+ ],
216+ "rank_window_size": 100,
217+ "rank_constant": 10,
218+ "min_score": 20.0,
219+ "_name": "foo_rrf"
220+ }
221+ }
222+ }
223+ """ ;
224+ checkRRFRetrieverParsing (restContent );
225+ }
226+
227+ public void testRRFRetrieverParsingWithDefaultWeights () throws IOException {
228+ String restContent = """
229+ {
230+ "retriever": {
231+ "rrf": {
232+ "retrievers": [
233+ {
234+ "test": {
235+ "value": "first"
236+ }
237+ },
238+ {
239+ "test": {
240+ "value": "second"
241+ }
242+ }
243+ ],
244+ "rank_window_size": 100,
245+ "rank_constant": 10,
246+ "min_score": 20.0,
247+ "_name": "foo_rrf"
248+ }
249+ }
250+ }
251+ """ ;
252+ checkRRFRetrieverParsing (restContent );
156253 }
157254}
0 commit comments