Skip to content

Commit 2436b03

Browse files
committed
addressing PR comments - simplifying toXContent for VectorData
1 parent 5cec209 commit 2436b03

File tree

6 files changed

+18
-26
lines changed

6 files changed

+18
-26
lines changed

server/src/main/java/org/elasticsearch/search/vectors/ExactKnnQueryBuilder.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.elasticsearch.xcontent.XContentBuilder;
2323

2424
import java.io.IOException;
25-
import java.util.Map;
2625
import java.util.Objects;
2726

2827
/**
@@ -31,7 +30,6 @@
3130
*/
3231
public class ExactKnnQueryBuilder extends AbstractQueryBuilder<ExactKnnQueryBuilder> {
3332
public static final String NAME = "exact_knn";
34-
private static final MapParams QUERY_VECTOR_PARAMS = new MapParams(Map.of(VectorData.XCONTENT_PARAM_NAME, "query"));
3533
private final String field;
3634
private final VectorData query;
3735

@@ -92,7 +90,7 @@ protected void doWriteTo(StreamOutput out) throws IOException {
9290
@Override
9391
protected void doXContent(XContentBuilder builder, Params params) throws IOException {
9492
builder.startObject(NAME);
95-
query.toXContent(builder, QUERY_VECTOR_PARAMS);
93+
builder.field("query", query);
9694
builder.field("field", field);
9795
boostAndQueryNameToXContent(builder);
9896
builder.endObject();

server/src/main/java/org/elasticsearch/search/vectors/KnnScoreDocQueryBuilder.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import java.io.IOException;
2727
import java.util.Arrays;
28-
import java.util.Map;
2928
import java.util.Objects;
3029

3130
/**
@@ -35,7 +34,6 @@
3534
*/
3635
public class KnnScoreDocQueryBuilder extends AbstractQueryBuilder<KnnScoreDocQueryBuilder> {
3736
public static final String NAME = "knn_score_doc";
38-
private static final MapParams QUERY_VECTOR_PARAMS = new MapParams(Map.of(VectorData.XCONTENT_PARAM_NAME, "query"));
3937
private final ScoreDoc[] scoreDocs;
4038
private final String fieldName;
4139
private final VectorData queryVector;
@@ -129,7 +127,7 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
129127
builder.field("field", fieldName);
130128
}
131129
if (queryVector != null) {
132-
queryVector.toXContent(builder, QUERY_VECTOR_PARAMS);
130+
builder.field("query", queryVector);
133131
}
134132
boostAndQueryNameToXContent(builder);
135133
builder.endObject();

server/src/main/java/org/elasticsearch/search/vectors/KnnSearchBuilder.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import java.io.IOException;
2929
import java.util.ArrayList;
3030
import java.util.List;
31-
import java.util.Map;
3231
import java.util.Objects;
3332
import java.util.function.Supplier;
3433

@@ -55,9 +54,6 @@ public class KnnSearchBuilder implements Writeable, ToXContentFragment, Rewritea
5554
public static final ParseField FILTER_FIELD = new ParseField("filter");
5655
public static final ParseField BOOST_FIELD = AbstractQueryBuilder.BOOST_FIELD;
5756
public static final ParseField INNER_HITS_FIELD = new ParseField("inner_hits");
58-
private static final MapParams QUERY_VECTOR_PARAMS = new MapParams(
59-
Map.of(VectorData.XCONTENT_PARAM_NAME, QUERY_VECTOR_FIELD.getPreferredName())
60-
);
6157

6258
@SuppressWarnings("unchecked")
6359
private static final ConstructingObjectParser<KnnSearchBuilder.Builder, Void> PARSER = new ConstructingObjectParser<>("knn", args -> {
@@ -423,7 +419,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
423419
builder.field(queryVectorBuilder.getWriteableName(), queryVectorBuilder);
424420
builder.endObject();
425421
} else {
426-
queryVector.toXContent(builder, QUERY_VECTOR_PARAMS);
422+
builder.field(QUERY_VECTOR_FIELD.getPreferredName(), queryVector);
427423
}
428424
if (similarity != null) {
429425
builder.field(VECTOR_SIMILARITY.getPreferredName(), similarity);

server/src/main/java/org/elasticsearch/search/vectors/KnnVectorQueryBuilder.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import java.io.IOException;
3838
import java.util.ArrayList;
3939
import java.util.List;
40-
import java.util.Map;
4140
import java.util.Objects;
4241

4342
import static org.elasticsearch.search.SearchService.DEFAULT_SIZE;
@@ -59,9 +58,6 @@ public class KnnVectorQueryBuilder extends AbstractQueryBuilder<KnnVectorQueryBu
5958
public static final ParseField QUERY_VECTOR_FIELD = new ParseField("query_vector");
6059
public static final ParseField VECTOR_SIMILARITY_FIELD = new ParseField("similarity");
6160
public static final ParseField FILTER_FIELD = new ParseField("filter");
62-
private static final MapParams QUERY_VECTOR_PARAMS = new MapParams(
63-
Map.of(VectorData.XCONTENT_PARAM_NAME, QUERY_VECTOR_FIELD.getPreferredName())
64-
);
6561

6662
@SuppressWarnings("unchecked")
6763
public static final ConstructingObjectParser<KnnVectorQueryBuilder, Void> PARSER = new ConstructingObjectParser<>(
@@ -225,7 +221,7 @@ protected void doWriteTo(StreamOutput out) throws IOException {
225221
protected void doXContent(XContentBuilder builder, Params params) throws IOException {
226222
builder.startObject(NAME);
227223
builder.field(FIELD_FIELD.getPreferredName(), fieldName);
228-
queryVector.toXContent(builder, QUERY_VECTOR_PARAMS);
224+
builder.field(QUERY_VECTOR_FIELD.getPreferredName(), queryVector);
229225
if (numCands != null) {
230226
builder.field(NUM_CANDS_FIELD.getPreferredName(), numCands);
231227
}

server/src/main/java/org/elasticsearch/search/vectors/VectorData.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@
2828

2929
public record VectorData(float[] floatVector, byte[] byteVector) implements Writeable, ToXContentFragment {
3030

31-
public static final String XCONTENT_PARAM_NAME = "field";
32-
private static final String DEFAULT_XCONTENT_NAME = "vector";
33-
3431
private VectorData(float[] floatVector) {
3532
this(floatVector, null);
3633
}
@@ -90,11 +87,17 @@ public void writeTo(StreamOutput out) throws IOException {
9087

9188
@Override
9289
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
90+
builder.startArray();
9391
if (floatVector != null) {
94-
builder.array(params.param(XCONTENT_PARAM_NAME, DEFAULT_XCONTENT_NAME), floatVector);
92+
for (float v : floatVector) {
93+
builder.value(v);
94+
}
9595
} else {
96-
builder.array(params.param(XCONTENT_PARAM_NAME, DEFAULT_XCONTENT_NAME), byteVector);
96+
for (byte b : byteVector) {
97+
builder.value(b);
98+
}
9799
}
100+
builder.endArray();
98101
return builder;
99102
}
100103

@@ -157,12 +160,10 @@ private static VectorData parseNumberVector(XContentParser parser) throws IOExce
157160
}
158161

159162
public static VectorData fromFloats(float[] vec) {
160-
if (vec == null) return null;
161-
return new VectorData(vec);
163+
return vec == null ? null : new VectorData(vec);
162164
}
163165

164166
public static VectorData fromBytes(byte[] vec) {
165-
if (vec == null) return null;
166-
return new VectorData(vec);
167+
return vec == null ? null : new VectorData(vec);
167168
}
168169
}

server/src/test/java/org/elasticsearch/search/vectors/VectorDataTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ public void testThrowsIfBothVectorsAreNull() {
2828
}
2929

3030
public void testThrowsIfBothVectorsAreNonNull() {
31-
IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> new VectorData(new float[] {0f}, new byte[] {1}));
31+
IllegalArgumentException ex = expectThrows(
32+
IllegalArgumentException.class,
33+
() -> new VectorData(new float[] { 0f }, new byte[] { 1 })
34+
);
3235
assertThat(ex.getMessage(), containsString("please supply exactly either a float or a byte vector"));
3336
}
3437

0 commit comments

Comments
 (0)