Skip to content

Commit 81ee8e9

Browse files
committed
Add unit test for serialization of derived fields from query
Signed-off-by: Rishabh Maurya <rishabhmaurya05@gmail.com>
1 parent ef7e859 commit 81ee8e9

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

server/src/main/java/org/opensearch/search/builder/SearchSourceBuilder.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1570,14 +1570,15 @@ public XContentBuilder innerToXContent(XContentBuilder builder, Params params) t
15701570
if (derivedFieldsObject != null || derivedFields != null) {
15711571
builder.startObject(DERIVED_FIELDS_FIELD.getPreferredName());
15721572
if (derivedFieldsObject != null) {
1573-
builder.map(derivedFieldsObject);
1573+
builder.mapContents(derivedFieldsObject);
15741574
}
15751575
if (derivedFields != null) {
15761576
for (DerivedField derivedField : derivedFields) {
15771577
derivedField.toXContent(builder, params);
15781578
}
15791579
}
15801580
builder.endObject();
1581+
15811582
}
15821583

15831584
return builder;

server/src/test/java/org/opensearch/search/builder/SearchSourceBuilderTests.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.opensearch.index.query.QueryRewriteContext;
5454
import org.opensearch.index.query.RandomQueryBuilder;
5555
import org.opensearch.index.query.Rewriteable;
56+
import org.opensearch.script.Script;
5657
import org.opensearch.search.AbstractSearchTestCase;
5758
import org.opensearch.search.rescore.QueryRescorerBuilder;
5859
import org.opensearch.search.sort.FieldSortBuilder;
@@ -311,7 +312,7 @@ public void testParseSort() throws IOException {
311312
}
312313
}
313314

314-
public void testDerivedFieldsParsing() throws IOException {
315+
public void testDerivedFieldsParsingAndSerialization() throws IOException {
315316
{
316317
String restContent = "{\n"
317318
+ " \"derived\": {\n"
@@ -328,10 +329,29 @@ public void testDerivedFieldsParsing() throws IOException {
328329
+ " \"match\": { \"content\": { \"query\": \"foo bar\" }}\n"
329330
+ " }\n"
330331
+ "}";
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+
331338
try (XContentParser parser = createParser(JsonXContent.jsonXContent, restContent)) {
332339
SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.fromXContent(parser);
340+
searchSourceBuilder.derivedField("derived_field", "keyword", new Script("emit(doc['message']"));
333341
searchSourceBuilder = rewrite(searchSourceBuilder);
334342
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+
}
335355
}
336356
}
337357

0 commit comments

Comments
 (0)