20
20
package co .elastic .clients .elasticsearch ._types ;
21
21
22
22
import co .elastic .clients .elasticsearch ._types .query_dsl .Query ;
23
- import co .elastic .clients .elasticsearch ._types .query_dsl .QueryBase ;
24
23
import co .elastic .clients .elasticsearch ._types .query_dsl .QueryVariant ;
24
+ import co .elastic .clients .elasticsearch .core .search .InnerHits ;
25
25
import co .elastic .clients .json .JsonpDeserializable ;
26
26
import co .elastic .clients .json .JsonpDeserializer ;
27
27
import co .elastic .clients .json .JsonpMapper ;
28
+ import co .elastic .clients .json .JsonpSerializable ;
29
+ import co .elastic .clients .json .JsonpUtils ;
28
30
import co .elastic .clients .json .ObjectBuilderDeserializer ;
29
31
import co .elastic .clients .json .ObjectDeserializer ;
30
32
import co .elastic .clients .util .ApiTypeHelper ;
31
33
import co .elastic .clients .util .ObjectBuilder ;
34
+ import co .elastic .clients .util .WithJsonObjectBuilderBase ;
32
35
import jakarta .json .stream .JsonGenerator ;
33
36
import java .lang .Float ;
34
37
import java .lang .Long ;
61
64
* specification</a>
62
65
*/
63
66
@ JsonpDeserializable
64
- public class KnnQuery extends QueryBase implements QueryVariant {
67
+ public class KnnQuery implements QueryVariant , JsonpSerializable {
65
68
private final String field ;
66
69
67
70
private final List <Float > queryVector ;
68
71
69
72
@ Nullable
70
73
private final QueryVectorBuilder queryVectorBuilder ;
71
74
75
+ private final long k ;
76
+
77
+ private final long numCandidates ;
78
+
72
79
@ Nullable
73
- private final Long numCandidates ;
80
+ private final Float boost ;
74
81
75
82
private final List <Query > filter ;
76
83
77
84
@ Nullable
78
85
private final Float similarity ;
79
86
87
+ @ Nullable
88
+ private final InnerHits innerHits ;
89
+
80
90
// ---------------------------------------------------------------------------------------------
81
91
82
92
private KnnQuery (Builder builder ) {
83
- super (builder );
84
93
85
94
this .field = ApiTypeHelper .requireNonNull (builder .field , this , "field" );
86
95
this .queryVector = ApiTypeHelper .unmodifiable (builder .queryVector );
87
96
this .queryVectorBuilder = builder .queryVectorBuilder ;
88
- this .numCandidates = builder .numCandidates ;
97
+ this .k = ApiTypeHelper .requireNonNull (builder .k , this , "k" );
98
+ this .numCandidates = ApiTypeHelper .requireNonNull (builder .numCandidates , this , "numCandidates" );
99
+ this .boost = builder .boost ;
89
100
this .filter = ApiTypeHelper .unmodifiable (builder .filter );
90
101
this .similarity = builder .similarity ;
102
+ this .innerHits = builder .innerHits ;
91
103
92
104
}
93
105
@@ -133,15 +145,33 @@ public final QueryVectorBuilder queryVectorBuilder() {
133
145
}
134
146
135
147
/**
136
- * The number of nearest neighbor candidates to consider per shard
148
+ * Required - The final number of nearest neighbors to return as top hits
149
+ * <p>
150
+ * API name: {@code k}
151
+ */
152
+ public final long k () {
153
+ return this .k ;
154
+ }
155
+
156
+ /**
157
+ * Required - The number of nearest neighbor candidates to consider per shard
137
158
* <p>
138
159
* API name: {@code num_candidates}
139
160
*/
140
- @ Nullable
141
- public final Long numCandidates () {
161
+ public final long numCandidates () {
142
162
return this .numCandidates ;
143
163
}
144
164
165
+ /**
166
+ * Boost value to apply to kNN scores
167
+ * <p>
168
+ * API name: {@code boost}
169
+ */
170
+ @ Nullable
171
+ public final Float boost () {
172
+ return this .boost ;
173
+ }
174
+
145
175
/**
146
176
* Filters for the kNN search query
147
177
* <p>
@@ -161,9 +191,27 @@ public final Float similarity() {
161
191
return this .similarity ;
162
192
}
163
193
194
+ /**
195
+ * If defined, each search hit will contain inner hits.
196
+ * <p>
197
+ * API name: {@code inner_hits}
198
+ */
199
+ @ Nullable
200
+ public final InnerHits innerHits () {
201
+ return this .innerHits ;
202
+ }
203
+
204
+ /**
205
+ * Serialize this object to JSON.
206
+ */
207
+ public void serialize (JsonGenerator generator , JsonpMapper mapper ) {
208
+ generator .writeStartObject ();
209
+ serializeInternal (generator , mapper );
210
+ generator .writeEnd ();
211
+ }
212
+
164
213
protected void serializeInternal (JsonGenerator generator , JsonpMapper mapper ) {
165
214
166
- super .serializeInternal (generator , mapper );
167
215
generator .writeKey ("field" );
168
216
generator .write (this .field );
169
217
@@ -182,9 +230,15 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
182
230
this .queryVectorBuilder .serialize (generator , mapper );
183
231
184
232
}
185
- if (this .numCandidates != null ) {
186
- generator .writeKey ("num_candidates" );
187
- generator .write (this .numCandidates );
233
+ generator .writeKey ("k" );
234
+ generator .write (this .k );
235
+
236
+ generator .writeKey ("num_candidates" );
237
+ generator .write (this .numCandidates );
238
+
239
+ if (this .boost != null ) {
240
+ generator .writeKey ("boost" );
241
+ generator .write (this .boost );
188
242
189
243
}
190
244
if (ApiTypeHelper .isDefined (this .filter )) {
@@ -202,16 +256,26 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
202
256
generator .write (this .similarity );
203
257
204
258
}
259
+ if (this .innerHits != null ) {
260
+ generator .writeKey ("inner_hits" );
261
+ this .innerHits .serialize (generator , mapper );
262
+
263
+ }
205
264
206
265
}
207
266
267
+ @ Override
268
+ public String toString () {
269
+ return JsonpUtils .toString (this );
270
+ }
271
+
208
272
// ---------------------------------------------------------------------------------------------
209
273
210
274
/**
211
275
* Builder for {@link KnnQuery}.
212
276
*/
213
277
214
- public static class Builder extends QueryBase . AbstractBuilder <Builder > implements ObjectBuilder <KnnQuery > {
278
+ public static class Builder extends WithJsonObjectBuilderBase <Builder > implements ObjectBuilder <KnnQuery > {
215
279
private String field ;
216
280
217
281
@ Nullable
@@ -220,15 +284,22 @@ public static class Builder extends QueryBase.AbstractBuilder<Builder> implement
220
284
@ Nullable
221
285
private QueryVectorBuilder queryVectorBuilder ;
222
286
223
- @ Nullable
287
+ private Long k ;
288
+
224
289
private Long numCandidates ;
225
290
291
+ @ Nullable
292
+ private Float boost ;
293
+
226
294
@ Nullable
227
295
private List <Query > filter ;
228
296
229
297
@ Nullable
230
298
private Float similarity ;
231
299
300
+ @ Nullable
301
+ private InnerHits innerHits ;
302
+
232
303
/**
233
304
* Required - The name of the vector field to search against
234
305
* <p>
@@ -286,15 +357,35 @@ public final Builder queryVectorBuilder(
286
357
}
287
358
288
359
/**
289
- * The number of nearest neighbor candidates to consider per shard
360
+ * Required - The final number of nearest neighbors to return as top hits
361
+ * <p>
362
+ * API name: {@code k}
363
+ */
364
+ public final Builder k (long value ) {
365
+ this .k = value ;
366
+ return this ;
367
+ }
368
+
369
+ /**
370
+ * Required - The number of nearest neighbor candidates to consider per shard
290
371
* <p>
291
372
* API name: {@code num_candidates}
292
373
*/
293
- public final Builder numCandidates (@ Nullable Long value ) {
374
+ public final Builder numCandidates (long value ) {
294
375
this .numCandidates = value ;
295
376
return this ;
296
377
}
297
378
379
+ /**
380
+ * Boost value to apply to kNN scores
381
+ * <p>
382
+ * API name: {@code boost}
383
+ */
384
+ public final Builder boost (@ Nullable Float value ) {
385
+ this .boost = value ;
386
+ return this ;
387
+ }
388
+
298
389
/**
299
390
* Filters for the kNN search query
300
391
* <p>
@@ -340,6 +431,25 @@ public final Builder similarity(@Nullable Float value) {
340
431
return this ;
341
432
}
342
433
434
+ /**
435
+ * If defined, each search hit will contain inner hits.
436
+ * <p>
437
+ * API name: {@code inner_hits}
438
+ */
439
+ public final Builder innerHits (@ Nullable InnerHits value ) {
440
+ this .innerHits = value ;
441
+ return this ;
442
+ }
443
+
444
+ /**
445
+ * If defined, each search hit will contain inner hits.
446
+ * <p>
447
+ * API name: {@code inner_hits}
448
+ */
449
+ public final Builder innerHits (Function <InnerHits .Builder , ObjectBuilder <InnerHits >> fn ) {
450
+ return this .innerHits (fn .apply (new InnerHits .Builder ()).build ());
451
+ }
452
+
343
453
@ Override
344
454
protected Builder self () {
345
455
return this ;
@@ -367,14 +477,17 @@ public KnnQuery build() {
367
477
KnnQuery ::setupKnnQueryDeserializer );
368
478
369
479
protected static void setupKnnQueryDeserializer (ObjectDeserializer <KnnQuery .Builder > op ) {
370
- QueryBase . setupQueryBaseDeserializer ( op );
480
+
371
481
op .add (Builder ::field , JsonpDeserializer .stringDeserializer (), "field" );
372
482
op .add (Builder ::queryVector , JsonpDeserializer .arrayDeserializer (JsonpDeserializer .floatDeserializer ()),
373
483
"query_vector" );
374
484
op .add (Builder ::queryVectorBuilder , QueryVectorBuilder ._DESERIALIZER , "query_vector_builder" );
485
+ op .add (Builder ::k , JsonpDeserializer .longDeserializer (), "k" );
375
486
op .add (Builder ::numCandidates , JsonpDeserializer .longDeserializer (), "num_candidates" );
487
+ op .add (Builder ::boost , JsonpDeserializer .floatDeserializer (), "boost" );
376
488
op .add (Builder ::filter , JsonpDeserializer .arrayDeserializer (Query ._DESERIALIZER ), "filter" );
377
489
op .add (Builder ::similarity , JsonpDeserializer .floatDeserializer (), "similarity" );
490
+ op .add (Builder ::innerHits , InnerHits ._DESERIALIZER , "inner_hits" );
378
491
379
492
}
380
493
0 commit comments