Skip to content

Commit 9edea36

Browse files
authored
Update API spec, fix some spec-related java client issues (#348) (#349)
1 parent 57729da commit 9edea36

File tree

5 files changed

+123
-51
lines changed

5 files changed

+123
-51
lines changed

java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/MappingCharFilter.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public class MappingCharFilter extends CharFilterBase implements CharFilterDefin
5757
private MappingCharFilter(Builder builder) {
5858
super(builder);
5959

60-
this.mappings = ApiTypeHelper.unmodifiableRequired(builder.mappings, this, "mappings");
60+
this.mappings = ApiTypeHelper.unmodifiable(builder.mappings);
6161
this.mappingsPath = builder.mappingsPath;
6262

6363
}
@@ -75,7 +75,7 @@ public CharFilterDefinition.Kind _charFilterDefinitionKind() {
7575
}
7676

7777
/**
78-
* Required - API name: {@code mappings}
78+
* API name: {@code mappings}
7979
*/
8080
public final List<String> mappings() {
8181
return this.mappings;
@@ -120,13 +120,14 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
120120
public static class Builder extends CharFilterBase.AbstractBuilder<Builder>
121121
implements
122122
ObjectBuilder<MappingCharFilter> {
123+
@Nullable
123124
private List<String> mappings;
124125

125126
@Nullable
126127
private String mappingsPath;
127128

128129
/**
129-
* Required - API name: {@code mappings}
130+
* API name: {@code mappings}
130131
* <p>
131132
* Adds all elements of <code>list</code> to <code>mappings</code>.
132133
*/
@@ -136,7 +137,7 @@ public final Builder mappings(List<String> list) {
136137
}
137138

138139
/**
139-
* Required - API name: {@code mappings}
140+
* API name: {@code mappings}
140141
* <p>
141142
* Adds one or more values to <code>mappings</code>.
142143
*/

java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/PhraseSuggest.java

+33-10
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import co.elastic.clients.util.ApiTypeHelper;
3232
import co.elastic.clients.util.ObjectBuilder;
3333
import jakarta.json.stream.JsonGenerator;
34+
import java.util.List;
3435
import java.util.Objects;
3536
import java.util.function.Function;
3637
import javax.annotation.Nullable;
@@ -45,14 +46,14 @@
4546
*/
4647
@JsonpDeserializable
4748
public class PhraseSuggest extends SuggestBase implements SuggestionVariant {
48-
private final PhraseSuggestOption options;
49+
private final List<PhraseSuggestOption> options;
4950

5051
// ---------------------------------------------------------------------------------------------
5152

5253
private PhraseSuggest(Builder builder) {
5354
super(builder);
5455

55-
this.options = ApiTypeHelper.requireNonNull(builder.options, this, "options");
56+
this.options = ApiTypeHelper.unmodifiableRequired(builder.options, this, "options");
5657

5758
}
5859

@@ -71,15 +72,23 @@ public Suggestion.Kind _suggestionKind() {
7172
/**
7273
* Required - API name: {@code options}
7374
*/
74-
public final PhraseSuggestOption options() {
75+
public final List<PhraseSuggestOption> options() {
7576
return this.options;
7677
}
7778

7879
protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
7980

8081
super.serializeInternal(generator, mapper);
81-
generator.writeKey("options");
82-
this.options.serialize(generator, mapper);
82+
if (ApiTypeHelper.isDefined(this.options)) {
83+
generator.writeKey("options");
84+
generator.writeStartArray();
85+
for (PhraseSuggestOption item0 : this.options) {
86+
item0.serialize(generator, mapper);
87+
88+
}
89+
generator.writeEnd();
90+
91+
}
8392

8493
}
8594

@@ -90,21 +99,35 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
9099
*/
91100

92101
public static class Builder extends SuggestBase.AbstractBuilder<Builder> implements ObjectBuilder<PhraseSuggest> {
93-
private PhraseSuggestOption options;
102+
private List<PhraseSuggestOption> options;
103+
104+
/**
105+
* Required - API name: {@code options}
106+
* <p>
107+
* Adds all elements of <code>list</code> to <code>options</code>.
108+
*/
109+
public final Builder options(List<PhraseSuggestOption> list) {
110+
this.options = _listAddAll(this.options, list);
111+
return this;
112+
}
94113

95114
/**
96115
* Required - API name: {@code options}
116+
* <p>
117+
* Adds one or more values to <code>options</code>.
97118
*/
98-
public final Builder options(PhraseSuggestOption value) {
99-
this.options = value;
119+
public final Builder options(PhraseSuggestOption value, PhraseSuggestOption... values) {
120+
this.options = _listAdd(this.options, value, values);
100121
return this;
101122
}
102123

103124
/**
104125
* Required - API name: {@code options}
126+
* <p>
127+
* Adds a value to <code>options</code> using a builder lambda.
105128
*/
106129
public final Builder options(Function<PhraseSuggestOption.Builder, ObjectBuilder<PhraseSuggestOption>> fn) {
107-
return this.options(fn.apply(new PhraseSuggestOption.Builder()).build());
130+
return options(fn.apply(new PhraseSuggestOption.Builder()).build());
108131
}
109132

110133
@Override
@@ -135,7 +158,7 @@ public PhraseSuggest build() {
135158

136159
protected static void setupPhraseSuggestDeserializer(ObjectDeserializer<PhraseSuggest.Builder> op) {
137160
SuggestBase.setupSuggestBaseDeserializer(op);
138-
op.add(Builder::options, PhraseSuggestOption._DESERIALIZER, "options");
161+
op.add(Builder::options, JsonpDeserializer.arrayDeserializer(PhraseSuggestOption._DESERIALIZER), "options");
139162

140163
}
141164

java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/TermSuggest.java

+33-10
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import co.elastic.clients.util.ApiTypeHelper;
3232
import co.elastic.clients.util.ObjectBuilder;
3333
import jakarta.json.stream.JsonGenerator;
34+
import java.util.List;
3435
import java.util.Objects;
3536
import java.util.function.Function;
3637
import javax.annotation.Nullable;
@@ -45,14 +46,14 @@
4546
*/
4647
@JsonpDeserializable
4748
public class TermSuggest extends SuggestBase implements SuggestionVariant {
48-
private final TermSuggestOption options;
49+
private final List<TermSuggestOption> options;
4950

5051
// ---------------------------------------------------------------------------------------------
5152

5253
private TermSuggest(Builder builder) {
5354
super(builder);
5455

55-
this.options = ApiTypeHelper.requireNonNull(builder.options, this, "options");
56+
this.options = ApiTypeHelper.unmodifiableRequired(builder.options, this, "options");
5657

5758
}
5859

@@ -71,15 +72,23 @@ public Suggestion.Kind _suggestionKind() {
7172
/**
7273
* Required - API name: {@code options}
7374
*/
74-
public final TermSuggestOption options() {
75+
public final List<TermSuggestOption> options() {
7576
return this.options;
7677
}
7778

7879
protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
7980

8081
super.serializeInternal(generator, mapper);
81-
generator.writeKey("options");
82-
this.options.serialize(generator, mapper);
82+
if (ApiTypeHelper.isDefined(this.options)) {
83+
generator.writeKey("options");
84+
generator.writeStartArray();
85+
for (TermSuggestOption item0 : this.options) {
86+
item0.serialize(generator, mapper);
87+
88+
}
89+
generator.writeEnd();
90+
91+
}
8392

8493
}
8594

@@ -90,21 +99,35 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
9099
*/
91100

92101
public static class Builder extends SuggestBase.AbstractBuilder<Builder> implements ObjectBuilder<TermSuggest> {
93-
private TermSuggestOption options;
102+
private List<TermSuggestOption> options;
103+
104+
/**
105+
* Required - API name: {@code options}
106+
* <p>
107+
* Adds all elements of <code>list</code> to <code>options</code>.
108+
*/
109+
public final Builder options(List<TermSuggestOption> list) {
110+
this.options = _listAddAll(this.options, list);
111+
return this;
112+
}
94113

95114
/**
96115
* Required - API name: {@code options}
116+
* <p>
117+
* Adds one or more values to <code>options</code>.
97118
*/
98-
public final Builder options(TermSuggestOption value) {
99-
this.options = value;
119+
public final Builder options(TermSuggestOption value, TermSuggestOption... values) {
120+
this.options = _listAdd(this.options, value, values);
100121
return this;
101122
}
102123

103124
/**
104125
* Required - API name: {@code options}
126+
* <p>
127+
* Adds a value to <code>options</code> using a builder lambda.
105128
*/
106129
public final Builder options(Function<TermSuggestOption.Builder, ObjectBuilder<TermSuggestOption>> fn) {
107-
return this.options(fn.apply(new TermSuggestOption.Builder()).build());
130+
return options(fn.apply(new TermSuggestOption.Builder()).build());
108131
}
109132

110133
@Override
@@ -135,7 +158,7 @@ public TermSuggest build() {
135158

136159
protected static void setupTermSuggestDeserializer(ObjectDeserializer<TermSuggest.Builder> op) {
137160
SuggestBase.setupSuggestBaseDeserializer(op);
138-
op.add(Builder::options, TermSuggestOption._DESERIALIZER, "options");
161+
op.add(Builder::options, JsonpDeserializer.arrayDeserializer(TermSuggestOption._DESERIALIZER), "options");
139162

140163
}
141164

java-client/src/main/java/co/elastic/clients/elasticsearch/doc-files/api-spec.html

+27-27
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,17 @@
133133
'_global.search._types.AggregationProfileDelegateDebugFilter': '_global/search/_types/profile.ts#L68-L72',
134134
'_global.search._types.BoundaryScanner': '_global/search/_types/highlighting.ts#L26-L30',
135135
'_global.search._types.Collector': '_global/search/_types/profile.ts#L83-L88',
136-
'_global.search._types.CompletionContext': '_global/search/_types/suggester.ts#L150-L157',
137-
'_global.search._types.CompletionSuggest': '_global/search/_types/suggester.ts#L48-L53',
138-
'_global.search._types.CompletionSuggestOption': '_global/search/_types/suggester.ts#L71-L82',
139-
'_global.search._types.CompletionSuggester': '_global/search/_types/suggester.ts#L125-L131',
140-
'_global.search._types.Context': '_global/search/_types/suggester.ts#L143-L148',
141-
'_global.search._types.DirectGenerator': '_global/search/_types/suggester.ts#L161-L173',
136+
'_global.search._types.CompletionContext': '_global/search/_types/suggester.ts#L152-L159',
137+
'_global.search._types.CompletionSuggest': '_global/search/_types/suggester.ts#L48-L55',
138+
'_global.search._types.CompletionSuggestOption': '_global/search/_types/suggester.ts#L73-L84',
139+
'_global.search._types.CompletionSuggester': '_global/search/_types/suggester.ts#L127-L133',
140+
'_global.search._types.Context': '_global/search/_types/suggester.ts#L145-L150',
141+
'_global.search._types.DirectGenerator': '_global/search/_types/suggester.ts#L163-L175',
142142
'_global.search._types.FetchProfile': '_global/search/_types/profile.ts#L136-L143',
143143
'_global.search._types.FetchProfileBreakdown': '_global/search/_types/profile.ts#L145-L152',
144144
'_global.search._types.FetchProfileDebug': '_global/search/_types/profile.ts#L154-L157',
145145
'_global.search._types.FieldCollapse': '_global/search/_types/FieldCollapse.ts#L24-L29',
146-
'_global.search._types.FieldSuggester': '_global/search/_types/suggester.ts#L101-L115',
146+
'_global.search._types.FieldSuggester': '_global/search/_types/suggester.ts#L103-L117',
147147
'_global.search._types.Highlight': '_global/search/_types/highlighting.ts#L56-L59',
148148
'_global.search._types.HighlightBase': '_global/search/_types/highlighting.ts#L32-L54',
149149
'_global.search._types.HighlightField': '_global/search/_types/highlighting.ts#L87-L90',
@@ -156,15 +156,15 @@
156156
'_global.search._types.HitsMetadata': '_global/search/_types/hits.ts#L62-L68',
157157
'_global.search._types.InnerHits': '_global/search/_types/hits.ts#L102-L120',
158158
'_global.search._types.InnerHitsResult': '_global/search/_types/hits.ts#L80-L82',
159-
'_global.search._types.LaplaceSmoothingModel': '_global/search/_types/suggester.ts#L207-L209',
160-
'_global.search._types.LinearInterpolationSmoothingModel': '_global/search/_types/suggester.ts#L211-L215',
159+
'_global.search._types.LaplaceSmoothingModel': '_global/search/_types/suggester.ts#L209-L211',
160+
'_global.search._types.LinearInterpolationSmoothingModel': '_global/search/_types/suggester.ts#L213-L217',
161161
'_global.search._types.NestedIdentity': '_global/search/_types/hits.ts#L84-L88',
162-
'_global.search._types.PhraseSuggest': '_global/search/_types/suggester.ts#L55-L60',
163-
'_global.search._types.PhraseSuggestCollate': '_global/search/_types/suggester.ts#L175-L179',
164-
'_global.search._types.PhraseSuggestCollateQuery': '_global/search/_types/suggester.ts#L181-L184',
165-
'_global.search._types.PhraseSuggestHighlight': '_global/search/_types/suggester.ts#L202-L205',
166-
'_global.search._types.PhraseSuggestOption': '_global/search/_types/suggester.ts#L84-L88',
167-
'_global.search._types.PhraseSuggester': '_global/search/_types/suggester.ts#L186-L200',
162+
'_global.search._types.PhraseSuggest': '_global/search/_types/suggester.ts#L57-L62',
163+
'_global.search._types.PhraseSuggestCollate': '_global/search/_types/suggester.ts#L177-L181',
164+
'_global.search._types.PhraseSuggestCollateQuery': '_global/search/_types/suggester.ts#L183-L186',
165+
'_global.search._types.PhraseSuggestHighlight': '_global/search/_types/suggester.ts#L204-L207',
166+
'_global.search._types.PhraseSuggestOption': '_global/search/_types/suggester.ts#L86-L90',
167+
'_global.search._types.PhraseSuggester': '_global/search/_types/suggester.ts#L188-L202',
168168
'_global.search._types.PointInTimeReference': '_global/search/_types/PointInTimeReference.ts#L23-L26',
169169
'_global.search._types.Profile': '_global/search/_types/profile.ts#L90-L92',
170170
'_global.search._types.QueryBreakdown': '_global/search/_types/profile.ts#L94-L113',
@@ -174,21 +174,21 @@
174174
'_global.search._types.ScoreMode': '_global/search/_types/rescoring.ts#L36-L42',
175175
'_global.search._types.SearchProfile': '_global/search/_types/profile.ts#L123-L127',
176176
'_global.search._types.ShardProfile': '_global/search/_types/profile.ts#L129-L134',
177-
'_global.search._types.SmoothingModelContainer': '_global/search/_types/suggester.ts#L219-L226',
177+
'_global.search._types.SmoothingModelContainer': '_global/search/_types/suggester.ts#L221-L228',
178178
'_global.search._types.SourceConfig': '_global/search/_types/SourceFilter.ts#L33-L37',
179179
'_global.search._types.SourceConfigParam': '_global/search/_types/SourceFilter.ts#L39-L45',
180180
'_global.search._types.SourceFilter': '_global/search/_types/SourceFilter.ts#L23-L31',
181-
'_global.search._types.StringDistance': '_global/search/_types/suggester.ts#L234-L240',
182-
'_global.search._types.StupidBackoffSmoothingModel': '_global/search/_types/suggester.ts#L228-L230',
181+
'_global.search._types.StringDistance': '_global/search/_types/suggester.ts#L236-L242',
182+
'_global.search._types.StupidBackoffSmoothingModel': '_global/search/_types/suggester.ts#L230-L232',
183183
'_global.search._types.Suggest': '_global/search/_types/suggester.ts#L34-L40',
184184
'_global.search._types.SuggestBase': '_global/search/_types/suggester.ts#L42-L46',
185-
'_global.search._types.SuggestFuzziness': '_global/search/_types/suggester.ts#L133-L139',
186-
'_global.search._types.SuggestSort': '_global/search/_types/suggester.ts#L242-L245',
187-
'_global.search._types.Suggester': '_global/search/_types/suggester.ts#L96-L99',
188-
'_global.search._types.SuggesterBase': '_global/search/_types/suggester.ts#L117-L121',
189-
'_global.search._types.TermSuggest': '_global/search/_types/suggester.ts#L62-L67',
190-
'_global.search._types.TermSuggestOption': '_global/search/_types/suggester.ts#L90-L94',
191-
'_global.search._types.TermSuggester': '_global/search/_types/suggester.ts#L247-L260',
185+
'_global.search._types.SuggestFuzziness': '_global/search/_types/suggester.ts#L135-L141',
186+
'_global.search._types.SuggestSort': '_global/search/_types/suggester.ts#L244-L247',
187+
'_global.search._types.Suggester': '_global/search/_types/suggester.ts#L98-L101',
188+
'_global.search._types.SuggesterBase': '_global/search/_types/suggester.ts#L119-L123',
189+
'_global.search._types.TermSuggest': '_global/search/_types/suggester.ts#L64-L69',
190+
'_global.search._types.TermSuggestOption': '_global/search/_types/suggester.ts#L92-L96',
191+
'_global.search._types.TermSuggester': '_global/search/_types/suggester.ts#L249-L262',
192192
'_global.search._types.TotalHits': '_global/search/_types/hits.ts#L90-L93',
193193
'_global.search._types.TotalHitsRelation': '_global/search/_types/hits.ts#L95-L100',
194194
'_global.search._types.TrackHits': '_global/search/_types/hits.ts#L122-L130',
@@ -2509,10 +2509,10 @@
25092509
if (hash.length > 1) {
25102510
hash = hash.substring(1);
25112511
}
2512-
window.location = "https://github.com/elastic/elasticsearch-specification/tree/135ae054e304239743b5777ad8d41cb2c9091d35/specification/" + (paths[hash] || "");
2512+
window.location = "https://github.com/elastic/elasticsearch-specification/tree/1ac08ee3f920b0193b0983146af077cbd4cadc1e/specification/" + (paths[hash] || "");
25132513
</script>
25142514
</head>
25152515
<body>
2516-
Please see the <a href="https://github.com/elastic/elasticsearch-specification/tree/135ae054e304239743b5777ad8d41cb2c9091d35/specification/">Elasticsearch API specification</a>.
2516+
Please see the <a href="https://github.com/elastic/elasticsearch-specification/tree/1ac08ee3f920b0193b0983146af077cbd4cadc1e/specification/">Elasticsearch API specification</a>.
25172517
</body>
25182518
</html>

java-client/src/test/java/co/elastic/clients/elasticsearch/spec_issues/SpecIssuesTest.java

+25
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,16 @@
2727
import co.elastic.clients.elasticsearch.core.SearchResponse;
2828
import co.elastic.clients.elasticsearch.indices.GetFieldMappingRequest;
2929
import co.elastic.clients.elasticsearch.indices.GetFieldMappingResponse;
30+
import co.elastic.clients.elasticsearch.indices.IndexSettings;
3031
import co.elastic.clients.elasticsearch.model.ModelTestCase;
3132
import co.elastic.clients.json.JsonData;
3233
import co.elastic.clients.json.JsonpDeserializer;
3334
import jakarta.json.stream.JsonParser;
35+
import org.junit.jupiter.api.Disabled;
3436
import org.junit.jupiter.api.Test;
3537

3638
import java.io.InputStream;
39+
import java.io.StringReader;
3740

3841
/**
3942
* Test issues related to the API specifications.
@@ -42,6 +45,28 @@
4245
*/
4346
public class SpecIssuesTest extends ModelTestCase {
4447

48+
@Test
49+
public void i0328_charFilter() throws Exception {
50+
// Both mappings and mappings_path are optional
51+
String json =
52+
"{\n" +
53+
" \"analysis\": { \n" +
54+
" \"char_filter\": {\n" +
55+
" \"multi_char_filter\": {\n" +
56+
" \"type\": \"mapping\",\n" +
57+
// " \"mappings\": [\n" +
58+
// " \"xyz => xyz\"\n" +
59+
// " ],\n" +
60+
" \"mappings_path\": \"analysis/multi-char-replacement.txt\"\n" +
61+
" }\n" +
62+
" }\n" +
63+
" }\n" +
64+
"}";
65+
66+
IndexSettings.of(b -> b.withJson(new StringReader(json)));
67+
}
68+
69+
@Disabled("Not fixed yet")
4570
@Test
4671
public void i066_multiFieldMapping() throws Exception {
4772
ElasticsearchClient client = ElasticsearchTestServer.global().client();

0 commit comments

Comments
 (0)