From f25acda199023dd8d5f8722fb471d47c15549926 Mon Sep 17 00:00:00 2001 From: Rick de Leeuw <6640331+leeuwr@users.noreply.github.com> Date: Thu, 24 Feb 2022 11:12:28 +0100 Subject: [PATCH] Add support for highlight-field options (#168) --- .../core/search/HighlightField.java | 51 ++++++++++++++++++- .../spec_issues/SpecIssuesTest.java | 14 +++++ 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/HighlightField.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/HighlightField.java index b1dfd35b6..dedf54989 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/HighlightField.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/HighlightField.java @@ -24,6 +24,7 @@ package co.elastic.clients.elasticsearch.core.search; import co.elastic.clients.elasticsearch._types.query_dsl.Query; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; import co.elastic.clients.json.JsonpMapper; @@ -38,7 +39,7 @@ import java.lang.Integer; import java.lang.String; import java.util.List; -import java.util.Objects; +import java.util.Map; import java.util.function.Function; import javax.annotation.Nullable; @@ -112,6 +113,10 @@ public class HighlightField implements JsonpSerializable { @Nullable private final String type; + @Nullable + private final Map options; + + // --------------------------------------------------------------------------------------------- private HighlightField(Builder builder) { @@ -137,7 +142,7 @@ private HighlightField(Builder builder) { this.requireFieldMatch = builder.requireFieldMatch; this.tagsSchema = builder.tagsSchema; this.type = builder.type; - + this.options = ApiTypeHelper.unmodifiable(builder.options); } public static HighlightField of(Function> fn) { @@ -309,6 +314,14 @@ public final String type() { return this.type; } + /** + * API name: {@code options} + */ + @Nullable + public final Map options() { + return this.options; + } + /** * Serialize this object to JSON. */ @@ -436,6 +449,16 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) { generator.write(this.type); } + if (ApiTypeHelper.isDefined(this.options)) { + generator.writeKey("options"); + generator.writeStartObject(); + for (Map.Entry item0 : this.options.entrySet()) { + generator.writeKey(item0.getKey()); + item0.getValue().serialize(generator, mapper); + + } + generator.writeEnd(); + } } @@ -509,6 +532,9 @@ public static class Builder extends ObjectBuilderBase implements ObjectBuilder options; + /** * API name: {@code boundary_chars} */ @@ -728,6 +754,26 @@ public final Builder type(@Nullable HighlighterType value) { return this; } + /** + * API name: {@code options} + *

+ * Adds all entries of map to options. + */ + public final Builder options(@Nullable Map map) { + this.options = _mapPutAll(this.options, map); + return this; + } + + /** + * API name: {@code options} + *

+ * Adds an entry to options. + */ + public final Builder params(String key, JsonData value) { + this.options = _mapPut(this.options, key, value); + return this; + } + /** * Builds a {@link HighlightField}. * @@ -775,6 +821,7 @@ protected static void setupHighlightFieldDeserializer(ObjectDeserializer thb.enabled(false)), JsonData.class); } + @Test + public void i0168_highlightFieldOptions() { + // https://github.com/elastic/elasticsearch-java/issues/168 + Map options = new HashMap<>(); + options.put("foo", JsonData.of("bar")); + + HighlightField field = HighlightField.of(_0 -> _0.field("tst").options(options)); + + assertEquals("{\"field\":\"tst\",\"options\":{\"foo\":\"bar\"}}", toJson(field)); + } + private T loadRsrc(String res, JsonpDeserializer deser) { InputStream is = this.getClass().getResourceAsStream(res); assertNotNull("Resource not found: " + res, is);