53
53
import org .opensearch .index .query .QueryRewriteContext ;
54
54
import org .opensearch .index .query .RandomQueryBuilder ;
55
55
import org .opensearch .index .query .Rewriteable ;
56
+ import org .opensearch .script .Script ;
56
57
import org .opensearch .search .AbstractSearchTestCase ;
57
58
import org .opensearch .search .rescore .QueryRescorerBuilder ;
58
59
import org .opensearch .search .sort .FieldSortBuilder ;
@@ -311,7 +312,7 @@ public void testParseSort() throws IOException {
311
312
}
312
313
}
313
314
314
- public void testDerivedFieldsParsing () throws IOException {
315
+ public void testDerivedFieldsParsingAndSerialization () throws IOException {
315
316
{
316
317
String restContent = "{\n "
317
318
+ " \" derived\" : {\n "
@@ -328,10 +329,29 @@ public void testDerivedFieldsParsing() throws IOException {
328
329
+ " \" match\" : { \" content\" : { \" query\" : \" foo bar\" }}\n "
329
330
+ " }\n "
330
331
+ "}" ;
332
+
333
+ String expectedContent =
334
+ "{\" query\" :{\" match\" :{\" content\" :{\" query\" :\" foo bar\" ,\" operator\" :\" OR\" ,\" prefix_length\" :0,\" max_expansions\" :50,\" fuzzy_transpositions\" :true,\" lenient\" :false,\" zero_terms_query\" :\" NONE\" ,\" auto_generate_synonyms_phrase_query\" :true,\" boost\" :1.0}}},"
335
+ + "\" derived\" :{"
336
+ + "\" duration\" :{\" type\" :\" long\" ,\" script\" :\" emit(doc['test'])\" },\" ip_from_message\" :{\" type\" :\" keyword\" ,\" script\" :\" emit(doc['message'])\" },\" derived_field\" :{\" type\" :\" keyword\" ,\" script\" :{\" source\" :\" emit(doc['message']\" ,\" lang\" :\" painless\" }}}}" ;
337
+
331
338
try (XContentParser parser = createParser (JsonXContent .jsonXContent , restContent )) {
332
339
SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder .fromXContent (parser );
340
+ searchSourceBuilder .derivedField ("derived_field" , "keyword" , new Script ("emit(doc['message']" ));
333
341
searchSourceBuilder = rewrite (searchSourceBuilder );
334
342
assertEquals (2 , searchSourceBuilder .getDerivedFieldsObject ().size ());
343
+ assertEquals (1 , searchSourceBuilder .getDerivedFields ().size ());
344
+
345
+ try (BytesStreamOutput output = new BytesStreamOutput ()) {
346
+ searchSourceBuilder .writeTo (output );
347
+ try (StreamInput in = new NamedWriteableAwareStreamInput (output .bytes ().streamInput (), namedWriteableRegistry )) {
348
+ SearchSourceBuilder deserializedBuilder = new SearchSourceBuilder (in );
349
+ String actualContent = deserializedBuilder .toString ();
350
+ assertEquals (expectedContent , actualContent );
351
+ assertEquals (searchSourceBuilder .hashCode (), deserializedBuilder .hashCode ());
352
+ assertNotSame (searchSourceBuilder , deserializedBuilder );
353
+ }
354
+ }
335
355
}
336
356
}
337
357
0 commit comments