From 89fbe882da44ced66690f88ba877f08f062e2332 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Mon, 13 Oct 2025 16:22:12 +0200 Subject: [PATCH 01/10] refactor: use Target-Vector API for nearVector requests --- .../aggregate/AbstractAggregateClient.java | 9 +-- .../collections/data/InsertManyRequest.java | 3 - .../query/AbstractQueryClient.java | 67 +++++++++++++++++-- .../v1/api/collections/query/NearVector.java | 29 ++++---- 4 files changed, 83 insertions(+), 25 deletions(-) diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/aggregate/AbstractAggregateClient.java b/src/main/java/io/weaviate/client6/v1/api/collections/aggregate/AbstractAggregateClient.java index c082ff70a..9c22618c9 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/aggregate/AbstractAggregateClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/aggregate/AbstractAggregateClient.java @@ -15,6 +15,7 @@ import io.weaviate.client6.v1.api.collections.query.NearThermal; import io.weaviate.client6.v1.api.collections.query.NearVector; import io.weaviate.client6.v1.api.collections.query.NearVideo; +import io.weaviate.client6.v1.api.collections.query.Target; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.GrpcTransport; import io.weaviate.client6.v1.internal.orm.CollectionDescriptor; @@ -197,7 +198,7 @@ public GroupedResponseT hybrid(Hybrid filter, Function> fn) { - return nearVector(NearVector.of(vector), fn); + return nearVector(NearVector.of(Target.vector(vector)), fn); } /** @@ -214,7 +215,7 @@ public ResponseT nearVector(float[] vector, Function> nv, Function> fn) { - return nearVector(NearVector.of(vector, nv), fn); + return nearVector(NearVector.of(Target.vector(vector), nv), fn); } /** @@ -248,7 +249,7 @@ public ResponseT nearVector(NearVector filter, Function> fn, GroupBy groupBy) { - return nearVector(NearVector.of(vector), fn, groupBy); + return nearVector(NearVector.of(Target.vector(vector)), fn, groupBy); } /** @@ -268,7 +269,7 @@ public GroupedResponseT nearVector(float[] vector, Function> nv, Function> fn, GroupBy groupBy) { - return nearVector(NearVector.of(vector, nv), fn, groupBy); + return nearVector(NearVector.of(Target.vector(vector), nv), fn, groupBy); } /** diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java b/src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java index 4475f178d..1d63554f7 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java @@ -10,7 +10,6 @@ import io.weaviate.client6.v1.api.collections.CollectionHandleDefaults; import io.weaviate.client6.v1.api.collections.ObjectMetadata; import io.weaviate.client6.v1.api.collections.WeaviateObject; -import io.weaviate.client6.v1.internal.Debug; import io.weaviate.client6.v1.internal.MapUtil; import io.weaviate.client6.v1.internal.grpc.ByteStringUtil; import io.weaviate.client6.v1.internal.grpc.Rpc; @@ -162,8 +161,6 @@ public static void buildObject(WeaviateProtoBatch.BatchObject.Builder object .setNonRefProperties(nonRef) .addAllSingleTargetRefProps(singleRef) .addAllMultiTargetRefProps(multiRef)); - - Debug.printProto(object); } @SuppressWarnings("unchecked") diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java index cc6492b38..11c9df3fa 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java @@ -317,7 +317,7 @@ public GroupedResponseT hybrid(Hybrid query, GroupBy groupBy) { * error status code. */ public ResponseT nearVector(float[] vector) { - return nearVector(NearVector.of(vector)); + return nearVector(Target.vector(vector)); } /** @@ -329,7 +329,31 @@ public ResponseT nearVector(float[] vector) { * error status code. */ public ResponseT nearVector(float[] vector, Function> fn) { - return nearVector(NearVector.of(vector, fn)); + return nearVector(Target.vector(vector), fn); + } + + /** + * Query collection objects using near vector search. + * + * @param searchTarget Target query vectors. + * @throws WeaviateApiException in case the server returned with an + * error status code. + */ + public ResponseT nearVector(NearVectorTarget searchTarget) { + return performRequest(NearVector.of(searchTarget)); + } + + /** + * Query collection objects using near vector search. + * + * @param searchTarget Target query vectors. + * @param fn Lambda expression for optional parameters. + * @throws WeaviateApiException in case the server returned with an + * error status code. + */ + public ResponseT nearVector(NearVectorTarget searchTarget, + Function> fn) { + return performRequest(NearVector.of(searchTarget, fn)); } /** @@ -356,7 +380,7 @@ public ResponseT nearVector(NearVector query) { * @see QueryResponseGrouped */ public GroupedResponseT nearVector(float[] vector, GroupBy groupBy) { - return nearVector(NearVector.of(vector), groupBy); + return nearVector(Target.vector(vector), groupBy); } /** @@ -374,7 +398,42 @@ public GroupedResponseT nearVector(float[] vector, GroupBy groupBy) { */ public GroupedResponseT nearVector(float[] vector, Function> fn, GroupBy groupBy) { - return nearVector(NearVector.of(vector, fn), groupBy); + return nearVector(Target.vector(vector), fn, groupBy); + } + + /** + * Query collection objects using near vector search. + * + * @param searchTarget Target query vectors. + * @param groupBy Group-by clause. + * @return Grouped query result. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * + * @see GroupBy + * @see QueryResponseGrouped + */ + public GroupedResponseT nearVector(NearVectorTarget searchTarget, + GroupBy groupBy) { + return performRequest(NearVector.of(searchTarget), groupBy); + } + + /** + * Query collection objects using near vector search. + * + * @param searchTarget Target query vectors. + * @param fn Lambda expression for optional parameters. + * @return Grouped query result. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * + * @see GroupBy + * @see QueryResponseGrouped + */ + public GroupedResponseT nearVector(NearVectorTarget searchTarget, + Function> fn, + GroupBy groupBy) { + return performRequest(NearVector.of(searchTarget, fn), groupBy); } /** diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVector.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVector.java index 303729879..e869c40cd 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVector.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVector.java @@ -4,33 +4,31 @@ import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; import io.weaviate.client6.v1.internal.ObjectBuilder; -import io.weaviate.client6.v1.internal.grpc.ByteStringUtil; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; -import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBase; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; -public record NearVector(float[] vector, Float distance, Float certainty, BaseQueryOptions common) +public record NearVector(NearVectorTarget searchTarget, Float distance, Float certainty, BaseQueryOptions common) implements QueryOperator, AggregateObjectFilter { - public static final NearVector of(float[] vector) { - return of(vector, ObjectBuilder.identity()); + public static final NearVector of(NearVectorTarget searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); } - public static final NearVector of(float[] vector, Function> fn) { - return fn.apply(new Builder(vector)).build(); + public static final NearVector of(NearVectorTarget searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public NearVector(Builder builder) { - this(builder.vector, builder.distance, builder.certainty, builder.baseOptions()); + this(builder.searchTarget, builder.distance, builder.certainty, builder.baseOptions()); } public static class Builder extends BaseVectorSearchBuilder { // Required query parameters. - private final float[] vector; + private final NearVectorTarget searchTarget; - public Builder(float[] vector) { - this.vector = vector; + public Builder(NearVectorTarget searchTarget) { + this.searchTarget = searchTarget; } @Override @@ -56,9 +54,12 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { // This is made package-private for Hybrid to see. Should we refactor? WeaviateProtoBaseSearch.NearVector.Builder protoBuilder() { var nearVector = WeaviateProtoBaseSearch.NearVector.newBuilder(); - nearVector.addVectors(WeaviateProtoBase.Vectors.newBuilder() - .setType(WeaviateProtoBase.Vectors.VectorType.VECTOR_TYPE_SINGLE_FP32) - .setVectorBytes(ByteStringUtil.encodeVectorSingle(vector))); + + searchTarget.appendVectors(nearVector); + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + nearVector.setTargets(targets); + } if (certainty != null) { nearVector.setCertainty(certainty); From 355ac561d0543827f45ded3c3d084e94ac25b4fe Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Mon, 13 Oct 2025 17:07:10 +0200 Subject: [PATCH 02/10] refactor: pass nearText query as TextTarget --- .../aggregate/AbstractAggregateClient.java | 10 +- .../query/AbstractQueryClient.java | 79 +++- .../v1/api/collections/query/NearText.java | 38 +- .../collections/query/NearVectorTarget.java | 7 + .../v1/api/collections/query/Target.java | 235 ++++++++++ .../protocol/WeaviateProtoBaseSearch.java | 412 +++++++++--------- src/main/proto/v1/base_search.proto | 58 ++- 7 files changed, 585 insertions(+), 254 deletions(-) create mode 100644 src/main/java/io/weaviate/client6/v1/api/collections/query/NearVectorTarget.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/aggregate/AbstractAggregateClient.java b/src/main/java/io/weaviate/client6/v1/api/collections/aggregate/AbstractAggregateClient.java index 9c22618c9..da41349a8 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/aggregate/AbstractAggregateClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/aggregate/AbstractAggregateClient.java @@ -427,7 +427,7 @@ public ResponseT nearText(String text, Function concepts, Function> fn) { - return nearText(NearText.of(concepts), fn); + return nearText(NearText.of(Target.text(concepts)), fn); } /** @@ -444,7 +444,7 @@ public ResponseT nearText(List concepts, Function> nt, Function> fn) { - return nearText(NearText.of(text, nt), fn); + return nearText(NearText.of(Target.text(List.of(text)), nt), fn); } /** @@ -461,7 +461,7 @@ public ResponseT nearText(String text, Function concepts, Function> nt, Function> fn) { - return nearText(NearText.of(concepts, nt), fn); + return nearText(NearText.of(Target.text(concepts), nt), fn); } /** @@ -513,7 +513,7 @@ public GroupedResponseT nearText(String text, Function concepts, Function> fn, GroupBy groupBy) { - return nearText(NearText.of(concepts), fn, groupBy); + return nearText(NearText.of(Target.text(concepts)), fn, groupBy); } /** @@ -553,7 +553,7 @@ public GroupedResponseT nearText(String text, Function concepts, Function> nt, Function> fn, GroupBy groupBy) { - return nearText(NearText.of(concepts, nt), fn, groupBy); + return nearText(NearText.of(Target.text(concepts), nt), fn, groupBy); } /** diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java index 11c9df3fa..898c6f968 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java @@ -1,5 +1,6 @@ package io.weaviate.client6.v1.api.collections.query; +import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.function.Function; @@ -548,7 +549,7 @@ public GroupedResponseT nearObject(NearObject query, GroupBy groupBy) { * error status code. */ public ResponseT nearText(String... text) { - return nearText(NearText.of(text)); + return nearText(Target.text(Arrays.asList(text))); } /** @@ -560,7 +561,7 @@ public ResponseT nearText(String... text) { * error status code. */ public ResponseT nearText(String text, Function> fn) { - return nearText(NearText.of(text, fn)); + return nearText(Target.text(List.of(text)), fn); } /** @@ -572,7 +573,30 @@ public ResponseT nearText(String text, Function text, Function> fn) { - return nearText(NearText.of(text, fn)); + return nearText(Target.text(text), fn); + } + + /** + * Query collection objects using near text search. + * + * @param searchTarget Target query concepts. + * @throws WeaviateApiException in case the server returned with an + * error status code. + */ + public ResponseT nearText(Target searchTarget) { + return nearText(NearText.of(searchTarget)); + } + + /** + * Query collection objects using near text search. + * + * @param searchTarget Target query concepts. + * @param fn Lambda expression for optional parameters. + * @throws WeaviateApiException in case the server returned with an + * error status code. + */ + public ResponseT nearText(Target searchTarget, Function> fn) { + return nearText(NearText.of(searchTarget, fn)); } /** @@ -599,7 +623,7 @@ public ResponseT nearText(NearText query) { * @see QueryResponseGrouped */ public GroupedResponseT nearText(String text, GroupBy groupBy) { - return nearText(NearText.of(text), groupBy); + return nearText(Target.text(List.of(text)), groupBy); } /** @@ -615,7 +639,7 @@ public GroupedResponseT nearText(String text, GroupBy groupBy) { * @see QueryResponseGrouped */ public GroupedResponseT nearText(List text, GroupBy groupBy) { - return nearText(NearText.of(text), groupBy); + return nearText(Target.text(text), groupBy); } /** @@ -631,9 +655,10 @@ public GroupedResponseT nearText(List text, GroupBy groupBy) { * @see GroupBy * @see QueryResponseGrouped */ - public GroupedResponseT nearText(String text, Function> fn, + public GroupedResponseT nearText(String text, + Function> fn, GroupBy groupBy) { - return nearText(NearText.of(text), groupBy); + return nearText(Target.text(List.of(text)), fn, groupBy); } /** @@ -649,9 +674,45 @@ public GroupedResponseT nearText(String text, Function text, Function> fn, + public GroupedResponseT nearText(List text, + Function> fn, + GroupBy groupBy) { + return nearText(Target.text(text), groupBy); + } + + /** + * Query collection objects using near text search. + * + * @param searchTarget Target query concepts. + * @param groupBy Group-by clause. + * @return Grouped query result. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * + * @see GroupBy + * @see QueryResponseGrouped + */ + public GroupedResponseT nearText(Target searchTarget, GroupBy groupBy) { + return nearText(NearText.of(searchTarget), groupBy); + } + + /** + * Query collection objects using near text search. + * + * @param searchTarget Target query concepts. + * @param fn Lambda expression for optional parameters. + * @param groupBy Group-by clause. + * @return Grouped query result. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * + * @see GroupBy + * @see QueryResponseGrouped + */ + public GroupedResponseT nearText(Target searchTarget, + Function> fn, GroupBy groupBy) { - return nearText(NearText.of(text), groupBy); + return nearText(NearText.of(searchTarget, fn), groupBy); } /** diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearText.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearText.java index bd3131b28..051558f96 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearText.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearText.java @@ -6,33 +6,36 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; +import io.weaviate.client6.v1.api.collections.query.Target.CombinedTextTarget; +import io.weaviate.client6.v1.api.collections.query.Target.TextTarget; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; -public record NearText(List concepts, Float distance, Float certainty, Move moveTo, Move moveAway, +public record NearText(Target searchTarget, Float distance, Float certainty, Move moveTo, + Move moveAway, BaseQueryOptions common) implements QueryOperator, AggregateObjectFilter { public static NearText of(String... concepts) { - return of(Arrays.asList(concepts), ObjectBuilder.identity()); + return of(Target.text(Arrays.asList(concepts)), ObjectBuilder.identity()); } - public static NearText of(List concepts) { - return of(concepts, ObjectBuilder.identity()); + public static NearText of(Target searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); } public static NearText of(String text, Function> fn) { - return of(List.of(text), fn); + return of(Target.text(List.of(text)), fn); } - public static NearText of(List concepts, Function> fn) { - return fn.apply(new Builder(concepts)).build(); + public static NearText of(Target searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public NearText(Builder builder) { this( - builder.concepts, + builder.searchTarget, builder.distance, builder.certainty, builder.moveTo, @@ -42,14 +45,14 @@ public NearText(Builder builder) { public static class Builder extends BaseVectorSearchBuilder { // Required query parameters. - private final List concepts; + private final Target searchTarget; // Optional query parameter. private Move moveTo; private Move moveAway; - public Builder(List concepts) { - this.concepts = concepts; + public Builder(Target searchTarget) { + this.searchTarget = searchTarget; } public final Builder moveTo(float force, Function> fn) { @@ -128,7 +131,17 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { // Package-private for Hybrid to see. WeaviateProtoBaseSearch.NearTextSearch.Builder protoBuilder() { var nearText = WeaviateProtoBaseSearch.NearTextSearch.newBuilder(); - nearText.addAllQuery(concepts); + + if (searchTarget instanceof TextTarget text) { + nearText.addAllQuery(text.query()); + } else if (searchTarget instanceof CombinedTextTarget combined) { + nearText.addAllQuery(combined.query()); + } + + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + nearText.setTargets(targets); + } if (certainty != null) { nearText.setCertainty(certainty); @@ -136,7 +149,6 @@ WeaviateProtoBaseSearch.NearTextSearch.Builder protoBuilder() { nearText.setDistance(distance); } - // TODO: add targets if (moveTo != null) { var to = WeaviateProtoBaseSearch.NearTextSearch.Move.newBuilder(); moveTo.appendTo(to); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVectorTarget.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVectorTarget.java new file mode 100644 index 000000000..92e2cfa7b --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVectorTarget.java @@ -0,0 +1,7 @@ +package io.weaviate.client6.v1.api.collections.query; + +import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; + +public interface NearVectorTarget extends Target { + void appendVectors(WeaviateProtoBaseSearch.NearVector.Builder req); +} diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java new file mode 100644 index 000000000..a3eff2d1b --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java @@ -0,0 +1,235 @@ +package io.weaviate.client6.v1.api.collections.query; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import com.google.protobuf.ByteString; + +import io.weaviate.client6.v1.internal.grpc.ByteStringUtil; +import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBase; +import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; +import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch.Targets.Builder; + +public interface Target { + + boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req); + + record VectorTarget( + /** Name of the vector index to search compare the input vector to. */ + String vectorName, + /** + * Weight assigned to this vector distance. Only required with + * RELATIVE_SCORE and MANUAL combination methods. + */ + Float weight, + /** Query vector. Must be either {@code float[]} or {@code float[][]}. */ + Object vector) implements NearVectorTarget { + + /** + * Append target vector name and, if provided, the weight it should be assigned. + */ + @Override + public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { + if (vectorName == null) { + return false; + } + req.addTargetVectors(vectorName); + + var weightsForTarget = WeaviateProtoBaseSearch.WeightsForTarget.newBuilder() + .setTarget(vectorName); + if (weight != null) { + weightsForTarget.setWeight(weight); + } + req.addWeightsForTargets(weightsForTarget); + return true; + } + + /** + * Append vectors if this is a single target vector. + * Must not be called from {@link CombinedVectorTarget}. + */ + @Override + public void appendVectors(WeaviateProtoBaseSearch.NearVector.Builder req) { + if (vectorName == null) { + req.addVectors(encodeVectors()); + } else { + req.addVectorForTargets(WeaviateProtoBaseSearch.VectorForTarget.newBuilder() + .setName(vectorName) + .addVectors(encodeVectors())); + } + } + + /** + * Encode search vector as a {@link ByteString} + * with the corresponding type (single/multi). + */ + private WeaviateProtoBase.Vectors.Builder encodeVectors() { + assert vector instanceof float[] || vector instanceof float[][]; + + return vector instanceof float[] single + ? WeaviateProtoBase.Vectors.newBuilder() + .setType(WeaviateProtoBase.Vectors.VectorType.VECTOR_TYPE_SINGLE_FP32) + .setVectorBytes(ByteStringUtil.encodeVectorSingle(single)) + : WeaviateProtoBase.Vectors.newBuilder() + .setType(WeaviateProtoBase.Vectors.VectorType.VECTOR_TYPE_MULTI_FP32) + .setVectorBytes(ByteStringUtil.encodeVectorMulti((float[][]) vector)); + } + } + + static VectorTarget vector(float[] vector) { + return new VectorTarget(null, null, vector); + } + + static VectorTarget vector(String vectorName, float[] vector) { + return new VectorTarget(vectorName, null, vector); + } + + static VectorTarget vector(String vectorName, float weight, float[] vector) { + return new VectorTarget(vectorName, weight, vector); + } + + static Target combine(CombinationMethod combinationMethod, VectorTarget... vectorTargets) { + return new CombinedVectorTarget(combinationMethod, Arrays.asList(vectorTargets)); + } + + static Target sum(VectorTarget... vectorTargets) { + return combine(CombinationMethod.SUM, vectorTargets); + } + + static Target min(VectorTarget... vectorTargets) { + return combine(CombinationMethod.MIN, vectorTargets); + } + + static Target average(VectorTarget... vectorTargets) { + return combine(CombinationMethod.AVERAGE, vectorTargets); + } + + static Target relativeScore(VectorTarget... vectorTargets) { + return combine(CombinationMethod.RELATIVE_SCORE, vectorTargets); + } + + static Target manualWeights(VectorTarget... vectorTargets) { + return combine(CombinationMethod.MANUAL_WEIGHTS, vectorTargets); + } + + enum CombinationMethod { + SUM, + MIN, + AVERAGE, + RELATIVE_SCORE, + MANUAL_WEIGHTS; + } + + record CombinedVectorTarget(CombinationMethod combinationMethod, List targets) + implements NearVectorTarget { + + @Override + public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { + if (targets.isEmpty()) { + return false; + } + switch (combinationMethod) { + case SUM: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_SUM); + break; + case MIN: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_MIN); + break; + case AVERAGE: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_AVERAGE); + break; + case RELATIVE_SCORE: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_RELATIVE_SCORE); + break; + case MANUAL_WEIGHTS: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_MANUAL); + break; + } + targets.forEach(t -> t.appendTargets(req)); + return true; + } + + @Override + /** Append combined vector targets. */ + public void appendVectors(WeaviateProtoBaseSearch.NearVector.Builder req) { + if (targets.isEmpty()) { + return; + } + + targets + .stream() + .collect(Collectors.groupingBy(VectorTarget::vectorName, Collectors.toList())) + .entrySet() + .forEach(target -> { + var vectorForTarget = WeaviateProtoBaseSearch.VectorForTarget.newBuilder() + .setName(target.getKey()); + target.getValue().forEach(vt -> { + vectorForTarget.addVectors(vt.encodeVectors()); + }); + }); + } + } + + record TextTarget(String vectorName, Float weight, List query) implements Target { + + @Override + public boolean appendTargets(Builder req) { + if (vectorName == null) { + return false; + } + req.addTargetVectors(vectorName); + + var weightsForTarget = WeaviateProtoBaseSearch.WeightsForTarget.newBuilder() + .setTarget(vectorName); + if (weight != null) { + weightsForTarget.setWeight(weight); + } + req.addWeightsForTargets(weightsForTarget); + return true; + + } + } + + static TextTarget text(List text) { + return new TextTarget(null, null, text); + } + + static TextTarget text(String vectorName, String... text) { + return new TextTarget(vectorName, null, Arrays.asList(text)); + } + + static TextTarget text(String vectorName, float weight, String... text) { + return new TextTarget(vectorName, weight, Arrays.asList(text)); + } + + record CombinedTextTarget(List query, CombinationMethod combinationMethod, List targets) + implements Target { + + @Override + public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { + if (targets.isEmpty()) { + return false; + } + switch (combinationMethod) { + case SUM: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_SUM); + break; + case MIN: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_MIN); + break; + case AVERAGE: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_AVERAGE); + break; + case RELATIVE_SCORE: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_RELATIVE_SCORE); + break; + case MANUAL_WEIGHTS: + req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_MANUAL); + break; + } + targets.forEach(t -> t.appendTargets(req)); + return true; + } + } +} diff --git a/src/main/java/io/weaviate/client6/v1/internal/grpc/protocol/WeaviateProtoBaseSearch.java b/src/main/java/io/weaviate/client6/v1/internal/grpc/protocol/WeaviateProtoBaseSearch.java index ceefa3660..18fd8c2cf 100644 --- a/src/main/java/io/weaviate/client6/v1/internal/grpc/protocol/WeaviateProtoBaseSearch.java +++ b/src/main/java/io/weaviate/client6/v1/internal/grpc/protocol/WeaviateProtoBaseSearch.java @@ -3694,7 +3694,7 @@ public interface HybridOrBuilder extends * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @return A list containing the vector. */ @java.lang.Deprecated java.util.List getVectorList(); @@ -3705,7 +3705,7 @@ public interface HybridOrBuilder extends * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @return The count of vector. */ @java.lang.Deprecated int getVectorCount(); @@ -3716,7 +3716,7 @@ public interface HybridOrBuilder extends * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @param index The index of the element to return. * @return The vector at the given index. */ @@ -3746,7 +3746,7 @@ public interface HybridOrBuilder extends * * bytes vector_bytes = 6 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector_bytes is deprecated. - * See v1/base_search.proto;l=58 + * See v1/base_search.proto;l=60 * @return The vectorBytes. */ @java.lang.Deprecated com.google.protobuf.ByteString getVectorBytes(); @@ -3758,7 +3758,7 @@ public interface HybridOrBuilder extends * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -3770,7 +3770,7 @@ public interface HybridOrBuilder extends * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -3781,7 +3781,7 @@ public interface HybridOrBuilder extends * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -3793,7 +3793,7 @@ public interface HybridOrBuilder extends * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -4210,7 +4210,7 @@ public java.lang.String getProperties(int index) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @return A list containing the vector. */ @java.lang.Override @@ -4225,7 +4225,7 @@ public java.lang.String getProperties(int index) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @return The count of vector. */ @java.lang.Deprecated public int getVectorCount() { @@ -4238,7 +4238,7 @@ public java.lang.String getProperties(int index) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @param index The index of the element to return. * @return The vector at the given index. */ @@ -4285,7 +4285,7 @@ public float getAlpha() { * * bytes vector_bytes = 6 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector_bytes is deprecated. - * See v1/base_search.proto;l=58 + * See v1/base_search.proto;l=60 * @return The vectorBytes. */ @java.lang.Override @@ -4304,7 +4304,7 @@ public float getAlpha() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -4318,7 +4318,7 @@ public float getAlpha() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -4331,7 +4331,7 @@ public float getAlpha() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -4345,7 +4345,7 @@ public float getAlpha() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -5576,7 +5576,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @return A list containing the vector. */ @java.lang.Deprecated public java.util.List @@ -5591,7 +5591,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @return The count of vector. */ @java.lang.Deprecated public int getVectorCount() { @@ -5604,7 +5604,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @param index The index of the element to return. * @return The vector at the given index. */ @@ -5618,7 +5618,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @param index The index to set the value at. * @param value The vector to set. * @return This builder for chaining. @@ -5639,7 +5639,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @param value The vector to add. * @return This builder for chaining. */ @@ -5658,7 +5658,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @param values The vector to add. * @return This builder for chaining. */ @@ -5678,7 +5678,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 3 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector is deprecated. - * See v1/base_search.proto;l=50 + * See v1/base_search.proto;l=51 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearVector() { @@ -5781,7 +5781,7 @@ public Builder clearFusionType() { * * bytes vector_bytes = 6 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector_bytes is deprecated. - * See v1/base_search.proto;l=58 + * See v1/base_search.proto;l=60 * @return The vectorBytes. */ @java.lang.Override @@ -5795,7 +5795,7 @@ public Builder clearFusionType() { * * bytes vector_bytes = 6 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector_bytes is deprecated. - * See v1/base_search.proto;l=58 + * See v1/base_search.proto;l=60 * @param value The vectorBytes to set. * @return This builder for chaining. */ @@ -5813,7 +5813,7 @@ public Builder clearFusionType() { * * bytes vector_bytes = 6 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.vector_bytes is deprecated. - * See v1/base_search.proto;l=58 + * See v1/base_search.proto;l=60 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearVectorBytes() { @@ -5838,7 +5838,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -5853,7 +5853,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -5866,7 +5866,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -5880,7 +5880,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -5895,7 +5895,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -5916,7 +5916,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -5936,7 +5936,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -5956,7 +5956,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -5973,7 +5973,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 7 [deprecated = true]; * @deprecated weaviate.v1.Hybrid.target_vectors is deprecated. - * See v1/base_search.proto;l=59 + * See v1/base_search.proto;l=62 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -6900,7 +6900,7 @@ public interface NearVectorOrBuilder extends * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @return A list containing the vector. */ @java.lang.Deprecated java.util.List getVectorList(); @@ -6911,7 +6911,7 @@ public interface NearVectorOrBuilder extends * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @return The count of vector. */ @java.lang.Deprecated int getVectorCount(); @@ -6922,7 +6922,7 @@ public interface NearVectorOrBuilder extends * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @param index The index of the element to return. * @return The vector at the given index. */ @@ -6957,7 +6957,7 @@ public interface NearVectorOrBuilder extends * * bytes vector_bytes = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector_bytes is deprecated. - * See v1/base_search.proto;l=78 + * See v1/base_search.proto;l=83 * @return The vectorBytes. */ @java.lang.Deprecated com.google.protobuf.ByteString getVectorBytes(); @@ -6969,7 +6969,7 @@ public interface NearVectorOrBuilder extends * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -6981,7 +6981,7 @@ public interface NearVectorOrBuilder extends * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -6992,7 +6992,7 @@ public interface NearVectorOrBuilder extends * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -7004,7 +7004,7 @@ public interface NearVectorOrBuilder extends * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -7193,7 +7193,7 @@ protected com.google.protobuf.MapField internalGetMapField( * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @return A list containing the vector. */ @java.lang.Override @@ -7208,7 +7208,7 @@ protected com.google.protobuf.MapField internalGetMapField( * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @return The count of vector. */ @java.lang.Deprecated public int getVectorCount() { @@ -7221,7 +7221,7 @@ protected com.google.protobuf.MapField internalGetMapField( * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @param index The index of the element to return. * @return The vector at the given index. */ @@ -7277,7 +7277,7 @@ public double getDistance() { * * bytes vector_bytes = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector_bytes is deprecated. - * See v1/base_search.proto;l=78 + * See v1/base_search.proto;l=83 * @return The vectorBytes. */ @java.lang.Override @@ -7296,7 +7296,7 @@ public double getDistance() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -7310,7 +7310,7 @@ public double getDistance() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -7323,7 +7323,7 @@ public double getDistance() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -7337,7 +7337,7 @@ public double getDistance() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -8301,7 +8301,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @return A list containing the vector. */ @java.lang.Deprecated public java.util.List @@ -8316,7 +8316,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @return The count of vector. */ @java.lang.Deprecated public int getVectorCount() { @@ -8329,7 +8329,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @param index The index of the element to return. * @return The vector at the given index. */ @@ -8343,7 +8343,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @param index The index to set the value at. * @param value The vector to set. * @return This builder for chaining. @@ -8364,7 +8364,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @param value The vector to add. * @return This builder for chaining. */ @@ -8383,7 +8383,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @param values The vector to add. * @return This builder for chaining. */ @@ -8403,7 +8403,7 @@ private void ensureVectorIsMutable(int capacity) { * * repeated float vector = 1 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector is deprecated. - * See v1/base_search.proto;l=75 + * See v1/base_search.proto;l=79 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearVector() { @@ -8501,7 +8501,7 @@ public Builder clearDistance() { * * bytes vector_bytes = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector_bytes is deprecated. - * See v1/base_search.proto;l=78 + * See v1/base_search.proto;l=83 * @return The vectorBytes. */ @java.lang.Override @@ -8515,7 +8515,7 @@ public Builder clearDistance() { * * bytes vector_bytes = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector_bytes is deprecated. - * See v1/base_search.proto;l=78 + * See v1/base_search.proto;l=83 * @param value The vectorBytes to set. * @return This builder for chaining. */ @@ -8533,7 +8533,7 @@ public Builder clearDistance() { * * bytes vector_bytes = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVector.vector_bytes is deprecated. - * See v1/base_search.proto;l=78 + * See v1/base_search.proto;l=83 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearVectorBytes() { @@ -8558,7 +8558,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -8573,7 +8573,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -8586,7 +8586,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -8600,7 +8600,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -8615,7 +8615,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -8636,7 +8636,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -8656,7 +8656,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -8676,7 +8676,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -8693,7 +8693,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 5 [deprecated = true]; * @deprecated weaviate.v1.NearVector.target_vectors is deprecated. - * See v1/base_search.proto;l=79 + * See v1/base_search.proto;l=85 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -9572,7 +9572,7 @@ public interface NearObjectOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -9584,7 +9584,7 @@ public interface NearObjectOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -9595,7 +9595,7 @@ public interface NearObjectOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -9607,7 +9607,7 @@ public interface NearObjectOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -9756,7 +9756,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -9770,7 +9770,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -9783,7 +9783,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -9797,7 +9797,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -10471,7 +10471,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -10486,7 +10486,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -10499,7 +10499,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -10513,7 +10513,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -10528,7 +10528,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -10549,7 +10549,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -10569,7 +10569,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -10589,7 +10589,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -10606,7 +10606,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearObject.target_vectors is deprecated. - * See v1/base_search.proto;l=90 + * See v1/base_search.proto;l=98 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -10909,7 +10909,7 @@ public interface NearTextSearchOrBuilder extends * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -10921,7 +10921,7 @@ public interface NearTextSearchOrBuilder extends * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -10932,7 +10932,7 @@ public interface NearTextSearchOrBuilder extends * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -10944,7 +10944,7 @@ public interface NearTextSearchOrBuilder extends * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -12066,7 +12066,7 @@ public io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch.Nea * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -12080,7 +12080,7 @@ public io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch.Nea * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -12093,7 +12093,7 @@ public io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch.Nea * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -12107,7 +12107,7 @@ public io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch.Nea * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -13189,7 +13189,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -13204,7 +13204,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -13217,7 +13217,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -13231,7 +13231,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -13246,7 +13246,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -13267,7 +13267,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -13287,7 +13287,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -13307,7 +13307,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -13324,7 +13324,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 6 [deprecated = true]; * @deprecated weaviate.v1.NearTextSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=107 + * See v1/base_search.proto;l=116 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -13568,7 +13568,7 @@ public interface NearImageSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -13580,7 +13580,7 @@ public interface NearImageSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -13591,7 +13591,7 @@ public interface NearImageSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -13603,7 +13603,7 @@ public interface NearImageSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -13752,7 +13752,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -13766,7 +13766,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -13779,7 +13779,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -13793,7 +13793,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -14467,7 +14467,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -14482,7 +14482,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -14495,7 +14495,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -14509,7 +14509,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -14524,7 +14524,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -14545,7 +14545,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -14565,7 +14565,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -14585,7 +14585,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -14602,7 +14602,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearImageSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=115 + * See v1/base_search.proto;l=125 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -14846,7 +14846,7 @@ public interface NearAudioSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -14858,7 +14858,7 @@ public interface NearAudioSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -14869,7 +14869,7 @@ public interface NearAudioSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -14881,7 +14881,7 @@ public interface NearAudioSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -15030,7 +15030,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -15044,7 +15044,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -15057,7 +15057,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -15071,7 +15071,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -15745,7 +15745,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -15760,7 +15760,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -15773,7 +15773,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -15787,7 +15787,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -15802,7 +15802,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -15823,7 +15823,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -15843,7 +15843,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -15863,7 +15863,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -15880,7 +15880,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearAudioSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=123 + * See v1/base_search.proto;l=134 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -16124,7 +16124,7 @@ public interface NearVideoSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -16136,7 +16136,7 @@ public interface NearVideoSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -16147,7 +16147,7 @@ public interface NearVideoSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -16159,7 +16159,7 @@ public interface NearVideoSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -16308,7 +16308,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -16322,7 +16322,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -16335,7 +16335,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -16349,7 +16349,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -17023,7 +17023,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -17038,7 +17038,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -17051,7 +17051,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -17065,7 +17065,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -17080,7 +17080,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -17101,7 +17101,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -17121,7 +17121,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -17141,7 +17141,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -17158,7 +17158,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearVideoSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=131 + * See v1/base_search.proto;l=143 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -17402,7 +17402,7 @@ public interface NearDepthSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -17414,7 +17414,7 @@ public interface NearDepthSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -17425,7 +17425,7 @@ public interface NearDepthSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -17437,7 +17437,7 @@ public interface NearDepthSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -17586,7 +17586,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -17600,7 +17600,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -17613,7 +17613,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -17627,7 +17627,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -18301,7 +18301,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -18316,7 +18316,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -18329,7 +18329,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -18343,7 +18343,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -18358,7 +18358,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -18379,7 +18379,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -18399,7 +18399,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -18419,7 +18419,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -18436,7 +18436,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearDepthSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=139 + * See v1/base_search.proto;l=152 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -18680,7 +18680,7 @@ public interface NearThermalSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -18692,7 +18692,7 @@ public interface NearThermalSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -18703,7 +18703,7 @@ public interface NearThermalSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -18715,7 +18715,7 @@ public interface NearThermalSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -18864,7 +18864,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -18878,7 +18878,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -18891,7 +18891,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -18905,7 +18905,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -19579,7 +19579,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -19594,7 +19594,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -19607,7 +19607,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -19621,7 +19621,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -19636,7 +19636,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -19657,7 +19657,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -19677,7 +19677,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -19697,7 +19697,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -19714,7 +19714,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearThermalSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=147 + * See v1/base_search.proto;l=161 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ @@ -19958,7 +19958,7 @@ public interface NearIMUSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @return A list containing the targetVectors. */ @java.lang.Deprecated java.util.List @@ -19970,7 +19970,7 @@ public interface NearIMUSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @return The count of targetVectors. */ @java.lang.Deprecated int getTargetVectorsCount(); @@ -19981,7 +19981,7 @@ public interface NearIMUSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -19993,7 +19993,7 @@ public interface NearIMUSearchOrBuilder extends * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -20142,7 +20142,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -20156,7 +20156,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -20169,7 +20169,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -20183,7 +20183,7 @@ public double getDistance() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -20857,7 +20857,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @return A list containing the targetVectors. */ @java.lang.Deprecated public com.google.protobuf.ProtocolStringList @@ -20872,7 +20872,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @return The count of targetVectors. */ @java.lang.Deprecated public int getTargetVectorsCount() { @@ -20885,7 +20885,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param index The index of the element to return. * @return The targetVectors at the given index. */ @@ -20899,7 +20899,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param index The index of the value to return. * @return The bytes of the targetVectors at the given index. */ @@ -20914,7 +20914,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param index The index to set the value at. * @param value The targetVectors to set. * @return This builder for chaining. @@ -20935,7 +20935,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param value The targetVectors to add. * @return This builder for chaining. */ @@ -20955,7 +20955,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param values The targetVectors to add. * @return This builder for chaining. */ @@ -20975,7 +20975,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearTargetVectors() { @@ -20992,7 +20992,7 @@ private void ensureTargetVectorsIsMutable() { * * repeated string target_vectors = 4 [deprecated = true]; * @deprecated weaviate.v1.NearIMUSearch.target_vectors is deprecated. - * See v1/base_search.proto;l=155 + * See v1/base_search.proto;l=170 * @param value The bytes of the targetVectors to add. * @return This builder for chaining. */ diff --git a/src/main/proto/v1/base_search.proto b/src/main/proto/v1/base_search.proto index ec1cf1ce3..f1b241b91 100644 --- a/src/main/proto/v1/base_search.proto +++ b/src/main/proto/v1/base_search.proto @@ -30,7 +30,8 @@ message Targets { message VectorForTarget { string name = 1; - bytes vector_bytes = 2 [deprecated = true]; // deprecated in 1.29.0 - use vectors + bytes vector_bytes = 2 + [ deprecated = true ]; // deprecated in 1.29.0 - use vectors repeated Vectors vectors = 3; } @@ -48,7 +49,8 @@ message Hybrid { string query = 1; repeated string properties = 2; // protolint:disable:next REPEATED_FIELD_NAMES_PLURALIZED - repeated float vector = 3 [deprecated = true]; // will be removed in the future, use vectors + repeated float vector = 3 + [ deprecated = true ]; // will be removed in the future, use vectors float alpha = 4; enum FusionType { FUSION_TYPE_UNSPECIFIED = 0; @@ -56,30 +58,36 @@ message Hybrid { FUSION_TYPE_RELATIVE_SCORE = 2; } FusionType fusion_type = 5; - bytes vector_bytes = 6 [deprecated = true]; // deprecated in 1.29.0 - use vectors - repeated string target_vectors = 7 [deprecated = true]; // deprecated in 1.26 - use targets - NearTextSearch near_text = 8; // targets in msg is ignored and should not be set for hybrid - NearVector near_vector = 9; // same as above. Use the target vector in the hybrid message + bytes vector_bytes = 6 + [ deprecated = true ]; // deprecated in 1.29.0 - use vectors + repeated string target_vectors = 7 + [ deprecated = true ]; // deprecated in 1.26 - use targets + NearTextSearch near_text = + 8; // targets in msg is ignored and should not be set for hybrid + NearVector near_vector = + 9; // same as above. Use the target vector in the hybrid message Targets targets = 10; optional SearchOperatorOptions bm25_search_operator = 11; // only vector distance, but keep it extendable - oneof threshold { - float vector_distance = 20; - }; + oneof threshold { float vector_distance = 20; }; repeated Vectors vectors = 21; } message NearVector { // protolint:disable:next REPEATED_FIELD_NAMES_PLURALIZED - repeated float vector = 1 [deprecated = true]; // will be removed in the future, use vectors + repeated float vector = 1 + [ deprecated = true ]; // will be removed in the future, use vectors optional double certainty = 2; optional double distance = 3; - bytes vector_bytes = 4 [deprecated = true]; // deprecated in 1.29.0 - use vectors - repeated string target_vectors = 5 [deprecated = true]; // deprecated in 1.26 - use targets + bytes vector_bytes = 4 + [ deprecated = true ]; // deprecated in 1.29.0 - use vectors + repeated string target_vectors = 5 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 6; - map vector_per_target = 7 [deprecated = true]; // deprecated in 1.26.2 - use vector_for_targets + map vector_per_target = 7 + [ deprecated = true ]; // deprecated in 1.26.2 - use vector_for_targets repeated VectorForTarget vector_for_targets = 8; repeated Vectors vectors = 9; } @@ -88,7 +96,8 @@ message NearObject { string id = 1; optional double certainty = 2; optional double distance = 3; - repeated string target_vectors = 4 [deprecated = true]; // deprecated in 1.26 - use targets + repeated string target_vectors = 4 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 5; } @@ -105,7 +114,8 @@ message NearTextSearch { optional double distance = 3; optional Move move_to = 4; optional Move move_away = 5; - repeated string target_vectors = 6 [deprecated = true]; // deprecated in 1.26 - use targets + repeated string target_vectors = 6 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 7; }; @@ -113,7 +123,8 @@ message NearImageSearch { string image = 1; optional double certainty = 2; optional double distance = 3; - repeated string target_vectors = 4 [deprecated = true]; // deprecated in 1.26 - use targets + repeated string target_vectors = 4 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 5; }; @@ -121,7 +132,8 @@ message NearAudioSearch { string audio = 1; optional double certainty = 2; optional double distance = 3; - repeated string target_vectors = 4 [deprecated = true]; // deprecated in 1.26 - use targets + repeated string target_vectors = 4 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 5; }; @@ -129,7 +141,8 @@ message NearVideoSearch { string video = 1; optional double certainty = 2; optional double distance = 3; - repeated string target_vectors = 4 [deprecated = true]; // deprecated in 1.26 - use targets + repeated string target_vectors = 4 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 5; }; @@ -137,7 +150,8 @@ message NearDepthSearch { string depth = 1; optional double certainty = 2; optional double distance = 3; - repeated string target_vectors = 4 [deprecated = true]; // deprecated in 1.26 - use targets + repeated string target_vectors = 4 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 5; } @@ -145,7 +159,8 @@ message NearThermalSearch { string thermal = 1; optional double certainty = 2; optional double distance = 3; - repeated string target_vectors = 4 [deprecated = true]; // deprecated in 1.26 - use targets + repeated string target_vectors = 4 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 5; } @@ -153,7 +168,8 @@ message NearIMUSearch { string imu = 1; optional double certainty = 2; optional double distance = 3; - repeated string target_vectors = 4 [deprecated = true]; // deprecated in 1.26 - use targets + repeated string target_vectors = 4 + [ deprecated = true ]; // deprecated in 1.26 - use targets Targets targets = 5; } From 8f5738607920d3c8534c8d2fb2fa732ca3b6a82a Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Mon, 13 Oct 2025 17:54:56 +0200 Subject: [PATCH 03/10] feat: enable multiple targets for nearText query --- .../v1/api/collections/query/Target.java | 86 +++++++++--- .../v1/api/collections/query/TargetTest.java | 129 ++++++++++++++++++ 2 files changed, 196 insertions(+), 19 deletions(-) create mode 100644 src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java index a3eff2d1b..6daf8bc9c 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java @@ -9,7 +9,6 @@ import io.weaviate.client6.v1.internal.grpc.ByteStringUtil; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBase; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; -import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch.Targets.Builder; public interface Target { @@ -171,23 +170,15 @@ public void appendVectors(WeaviateProtoBaseSearch.NearVector.Builder req) { } } - record TextTarget(String vectorName, Float weight, List query) implements Target { + record TextTarget(VectorWeight weight, List query) implements Target { - @Override - public boolean appendTargets(Builder req) { - if (vectorName == null) { - return false; - } - req.addTargetVectors(vectorName); - - var weightsForTarget = WeaviateProtoBaseSearch.WeightsForTarget.newBuilder() - .setTarget(vectorName); - if (weight != null) { - weightsForTarget.setWeight(weight); - } - req.addWeightsForTargets(weightsForTarget); - return true; + private TextTarget(String vectorName, Float weight, List query) { + this(new VectorWeight(vectorName, weight), query); + } + @Override + public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { + return weight.appendTargets(req); } } @@ -203,12 +194,34 @@ static TextTarget text(String vectorName, float weight, String... text) { return new TextTarget(vectorName, weight, Arrays.asList(text)); } - record CombinedTextTarget(List query, CombinationMethod combinationMethod, List targets) + /** + * Weight to be applied to the vector distance. Used for text-based + * queries where only a single input is allowed. + */ + record VectorWeight(String vectorName, Float weight) implements Target { + @Override + public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { + if (vectorName == null) { + return false; + } + req.addTargetVectors(vectorName); + + var weightsForTarget = WeaviateProtoBaseSearch.WeightsForTarget.newBuilder() + .setTarget(vectorName); + if (weight != null) { + weightsForTarget.setWeight(weight); + } + req.addWeightsForTargets(weightsForTarget); + return true; + } + } + + record CombinedTextTarget(List query, CombinationMethod combinationMethod, List vectorWeights) implements Target { @Override public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { - if (targets.isEmpty()) { + if (vectorWeights.isEmpty()) { return false; } switch (combinationMethod) { @@ -228,8 +241,43 @@ public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { req.setCombination(WeaviateProtoBaseSearch.CombinationMethod.COMBINATION_METHOD_TYPE_MANUAL); break; } - targets.forEach(t -> t.appendTargets(req)); + vectorWeights.forEach(t -> t.appendTargets(req)); return true; } } + + static VectorWeight weight(String vectorName, float weight) { + return new VectorWeight(vectorName, weight); + } + + static Target combine(List query, CombinationMethod combinationMethod, VectorWeight... vectorWeights) { + return new CombinedTextTarget(query, combinationMethod, Arrays.asList(vectorWeights)); + } + + static Target combine(List query, CombinationMethod combinationMethod, String... targetVectors) { + var vectorWeights = Arrays.stream(targetVectors) + .map(vw -> new VectorWeight(vw, null)) + .toArray(VectorWeight[]::new); + return combine(query, combinationMethod, vectorWeights); + } + + static Target sum(List query, String... targetVectors) { + return combine(query, CombinationMethod.SUM, targetVectors); + } + + static Target min(List query, String... targetVectors) { + return combine(query, CombinationMethod.MIN, targetVectors); + } + + static Target average(List query, String... targetVectors) { + return combine(query, CombinationMethod.AVERAGE, targetVectors); + } + + static Target relativeScore(List query, VectorWeight... weights) { + return combine(query, CombinationMethod.RELATIVE_SCORE, weights); + } + + static Target manualWeights(List query, VectorWeight... weights) { + return combine(query, CombinationMethod.MANUAL_WEIGHTS, weights); + } } diff --git a/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java b/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java new file mode 100644 index 000000000..a27ed1380 --- /dev/null +++ b/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java @@ -0,0 +1,129 @@ +package io.weaviate.client6.v1.api.collections.query; + +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.google.gson.JsonParser; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.MessageOrBuilder; +import com.google.protobuf.util.JsonFormat; +import com.jparams.junit4.JParamsTestRunner; +import com.jparams.junit4.data.DataMethod; + +import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; + +@RunWith(JParamsTestRunner.class) +public class TargetTest { + + public static Object[][] appendTargetsTestCases() { + return new Object[][] { + { + Target.vector(new float[] { 1, 2, 3 }), + null, + }, + { + Target.average( + Target.vector("title_vec", new float[] { 1, 2, 3 }), + Target.vector("body_vec", new float[] { 4, 5, 6 })), + """ + { + "combination": "COMBINATION_METHOD_TYPE_AVERAGE", + "targetVectors": ["title_vec", "body_vec"], + "weightsForTargets": [ + {"target": "title_vec"}, + {"target": "body_vec"} + ] + } + """, + + }, + { + Target.manualWeights( + Target.vector("title_vec", .2f, new float[] { 1, 2, 3 }), + Target.vector("title_vec", .3f, new float[] { 1, 2, 3 }), + Target.vector("body_vec", .5f, new float[] { 4, 5, 6 })), + """ + { + "combination": "COMBINATION_METHOD_TYPE_MANUAL", + "targetVectors": ["title_vec", "title_vec", "body_vec"], + "weightsForTargets": [ + {"target": "title_vec", "weight": 0.2}, + {"target": "title_vec", "weight": 0.3}, + {"target": "body_vec", "weight": 0.5} + ] + } + """, + + }, + { + Target.min( + List.of("day", "night"), + "title_vec", "body_vec"), + """ + { + "combination": "COMBINATION_METHOD_TYPE_MIN", + "targetVectors": ["title_vec", "body_vec"], + "weightsForTargets": [ + {"target": "title_vec"}, + {"target": "body_vec"} + ] + } + """, + + }, + { + Target.relativeScore( + List.of("one", "two", "three"), + Target.weight("title_vec", 1), + Target.weight("title_vec", 2), + Target.weight("body_vec", 3)), + """ + { + "combination": "COMBINATION_METHOD_TYPE_RELATIVE_SCORE", + "targetVectors": ["title_vec", "title_vec", "body_vec"], + "weightsForTargets": [ + {"target": "title_vec", "weight": 1.0}, + {"target": "title_vec", "weight": 2.0}, + {"target": "body_vec", "weight": 3.0} + ] + } + """, + + }, + }; + } + + @Test + @DataMethod(source = TargetTest.class, method = "appendTargetsTestCases") + public void test_appendTargets(Target target, String want) { + var req = WeaviateProtoBaseSearch.Targets.newBuilder(); + var appended = target.appendTargets(req); + if (want == null) { + Assertions.assertThat(appended).as("should not append targets").isFalse(); + return; + } + + var got = proto2json(req); + assertEqualJson(want, got); + } + + private static final String proto2json(MessageOrBuilder proto) { + String out; + try { + out = JsonFormat.printer().print(proto); + } catch (InvalidProtocolBufferException e) { + out = e.getMessage(); + } + + return out; + } + + private static void assertEqualJson(String want, String got) { + var wantJson = JsonParser.parseString(want); + var gotJson = JsonParser.parseString(got); + Assertions.assertThat(gotJson).isEqualTo(wantJson); + } +} From a2d8bfb1beb0ae0281070c7b2f80fc0ac8f314bc Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Tue, 14 Oct 2025 11:50:20 +0200 Subject: [PATCH 04/10] test: write unit tests for marshalling targets / vectors --- .../v1/api/collections/query/Target.java | 26 +++- .../v1/api/collections/query/TargetTest.java | 116 ++++++++++++++++++ 2 files changed, 139 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java index 6daf8bc9c..ae2e6b4cc 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java @@ -1,6 +1,7 @@ package io.weaviate.client6.v1.api.collections.query; import java.util.Arrays; +import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; @@ -80,14 +81,26 @@ static VectorTarget vector(float[] vector) { return new VectorTarget(null, null, vector); } + static VectorTarget vector(float[][] vector) { + return new VectorTarget(null, null, vector); + } + static VectorTarget vector(String vectorName, float[] vector) { return new VectorTarget(vectorName, null, vector); } + static VectorTarget vector(String vectorName, float[][] vector) { + return new VectorTarget(vectorName, null, vector); + } + static VectorTarget vector(String vectorName, float weight, float[] vector) { return new VectorTarget(vectorName, weight, vector); } + static VectorTarget vector(String vectorName, float weight, float[][] vector) { + return new VectorTarget(vectorName, weight, vector); + } + static Target combine(CombinationMethod combinationMethod, VectorTarget... vectorTargets) { return new CombinedVectorTarget(combinationMethod, Arrays.asList(vectorTargets)); } @@ -156,16 +169,23 @@ public void appendVectors(WeaviateProtoBaseSearch.NearVector.Builder req) { return; } + // We use LinkedHashMap to preserve insertion order. + // This has negligble performance penalty, if any, + // but allows for a predictable output in tests. targets .stream() - .collect(Collectors.groupingBy(VectorTarget::vectorName, Collectors.toList())) + .collect(Collectors.groupingBy( + VectorTarget::vectorName, + LinkedHashMap::new, + Collectors.toList())) .entrySet() .forEach(target -> { - var vectorForTarget = WeaviateProtoBaseSearch.VectorForTarget.newBuilder() + var vectorForTargets = WeaviateProtoBaseSearch.VectorForTarget.newBuilder() .setName(target.getKey()); target.getValue().forEach(vt -> { - vectorForTarget.addVectors(vt.encodeVectors()); + vectorForTargets.addVectors(vt.encodeVectors()); }); + req.addVectorForTargets(vectorForTargets); }); } } diff --git a/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java b/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java index a27ed1380..19fc5024b 100644 --- a/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java +++ b/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java @@ -110,6 +110,122 @@ public void test_appendTargets(Target target, String want) { assertEqualJson(want, got); } + public static Object[][] appendVectorsTestCases() { + return new Object[][] { + { + Target.vector(new float[] { 1, 2, 3 }), + """ + { + "vectors": [{ + "vectorBytes": "AACAPwAAAEAAAEBA", + "type": "VECTOR_TYPE_SINGLE_FP32" + }] + } + """, + }, + { + Target.vector(new float[][] { { 1, 2, 3 }, { 4, 5, 6 } }), + """ + { + "vectors": [{ + "vectorBytes": "AwAAAIA/AAAAQAAAQEAAAIBAAACgQAAAwEA=", + "type": "VECTOR_TYPE_MULTI_FP32" + }] + } + """, + }, + { + Target.vector("title_vec", new float[] { 1, 2, 3 }), + """ + { + "vectorForTargets": [{ + "name": "title_vec", + "vectors": [{ + "vectorBytes": "AACAPwAAAEAAAEBA", + "type": "VECTOR_TYPE_SINGLE_FP32" + }] + }] + } + """, + }, + { + Target.vector("title_vec", new float[][] { { 1, 2, 3 }, { 4, 5, 6 } }), + """ + { + "vectorForTargets": [{ + "name": "title_vec", + "vectors": [{ + "vectorBytes": "AwAAAIA/AAAAQAAAQEAAAIBAAACgQAAAwEA=", + "type": "VECTOR_TYPE_MULTI_FP32" + }] + }] + } + """, + }, + { + Target.average( + Target.vector("title_vec", new float[] { 1, 2, 3 }), + Target.vector("title_vec", new float[] { 4, 5, 6 }), + Target.vector("lyrics_vec", new float[] { 7, 8, 9 })), + """ + { + "vectorForTargets": [ + { + "name": "title_vec", + "vectors": [ + {"vectorBytes": "AACAPwAAAEAAAEBA", "type": "VECTOR_TYPE_SINGLE_FP32" }, + {"vectorBytes": "AACAQAAAoEAAAMBA", "type": "VECTOR_TYPE_SINGLE_FP32" } + ] + }, + { + "name": "lyrics_vec", + "vectors": [ + {"vectorBytes": "AADgQAAAAEEAABBB", "type": "VECTOR_TYPE_SINGLE_FP32" } + ] + } + ] + } + """, + }, + { + Target.average( + Target.vector("title_vec", new float[][] { { 1, 2, 3 }, { 4, 5, 6 } }), + Target.vector("title_vec", new float[][] { { 4, 5, 6 }, { 7, 8, 9 } }), + Target.vector("lyrics_vec", new float[][] { { 7, 8, 9 }, { 1, 2, 3 } })), + """ + { + "vectorForTargets": [ + { + "name": "title_vec", + "vectors": [ + {"vectorBytes": "AwAAAIA/AAAAQAAAQEAAAIBAAACgQAAAwEA=", "type": "VECTOR_TYPE_MULTI_FP32" }, + {"vectorBytes": "AwAAAIBAAACgQAAAwEAAAOBAAAAAQQAAEEE=", "type": "VECTOR_TYPE_MULTI_FP32" } + ] + }, + { + "name": "lyrics_vec", + "vectors": [ + {"vectorBytes": "AwAAAOBAAAAAQQAAEEEAAIA/AAAAQAAAQEA=", "type": "VECTOR_TYPE_MULTI_FP32" } + ] + } + ] + } + """, + }, + }; + } + + @Test + @DataMethod(source = TargetTest.class, method = "appendVectorsTestCases") + public void test_appendVectors(NearVectorTarget target, String want) { + var req = WeaviateProtoBaseSearch.NearVector.newBuilder(); + + target.appendVectors(req); + + var got = proto2json(req); + assertEqualJson(want, got); + } + private static final String proto2json(MessageOrBuilder proto) { String out; try { From a5ed69dd5f590ad0b70caf7fdb23d7ae3ab64ac7 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Wed, 15 Oct 2025 13:45:05 +0200 Subject: [PATCH 05/10] feat: add multi-vector config to HNSW --- .../io/weaviate/integration/SearchITest.java | 50 +++++++ .../client6/v1/api/collections/Encoding.java | 108 +++++++++++++++ .../v1/api/collections/ObjectMetadata.java | 6 +- .../v1/api/collections/Quantization.java | 1 - .../collections/data/InsertManyRequest.java | 20 +-- .../collections/encoding/MuveraEncoding.java | 73 ++++++++++ .../v1/api/collections/query/Target.java | 14 +- .../v1/api/collections/vectorindex/Hnsw.java | 8 ++ .../collections/vectorindex/MultiVector.java | 125 ++++++++++++++++++ .../client6/v1/internal/json/JSON.java | 4 + .../v1/api/collections/query/TargetTest.java | 28 ++-- .../client6/v1/internal/json/JSONTest.java | 26 ++++ 12 files changed, 430 insertions(+), 33 deletions(-) create mode 100644 src/main/java/io/weaviate/client6/v1/api/collections/Encoding.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/collections/encoding/MuveraEncoding.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/collections/vectorindex/MultiVector.java diff --git a/src/it/java/io/weaviate/integration/SearchITest.java b/src/it/java/io/weaviate/integration/SearchITest.java index f757b72ad..c08c92a6d 100644 --- a/src/it/java/io/weaviate/integration/SearchITest.java +++ b/src/it/java/io/weaviate/integration/SearchITest.java @@ -19,6 +19,7 @@ import io.weaviate.ConcurrentTest; import io.weaviate.client6.v1.api.WeaviateApiException; import io.weaviate.client6.v1.api.WeaviateClient; +import io.weaviate.client6.v1.api.collections.ObjectMetadata; import io.weaviate.client6.v1.api.collections.Property; import io.weaviate.client6.v1.api.collections.ReferenceProperty; import io.weaviate.client6.v1.api.collections.VectorConfig; @@ -31,7 +32,10 @@ import io.weaviate.client6.v1.api.collections.query.QueryMetadata; import io.weaviate.client6.v1.api.collections.query.QueryResponseGroup; import io.weaviate.client6.v1.api.collections.query.SortBy; +import io.weaviate.client6.v1.api.collections.query.Target; import io.weaviate.client6.v1.api.collections.query.Where; +import io.weaviate.client6.v1.api.collections.vectorindex.Hnsw; +import io.weaviate.client6.v1.api.collections.vectorindex.MultiVector; import io.weaviate.containers.Container; import io.weaviate.containers.Container.ContainerGroup; import io.weaviate.containers.Contextionary; @@ -499,4 +503,50 @@ public void testMetadataAll() throws IOException { Assertions.assertThat(metadataNearText.distance()).as("distance").isNotNull(); Assertions.assertThat(metadataNearText.certainty()).as("certainty").isNotNull(); } + + @Test + public void testNearVector_targetVectors() throws IOException { + // Arrange + var nsThings = ns("Things"); + + client.collections.create(nsThings, + c -> c.vectorConfig( + VectorConfig.selfProvided("v1d"), + VectorConfig.selfProvided("v2d", + none -> none + .vectorIndex(Hnsw.of( + hnsw -> hnsw.multiVector(MultiVector.of())))))); + + var things = client.collections.use(nsThings); + + var thing123 = things.data.insert(Map.of(), thing -> thing.vectors( + Vectors.of("v1d", new float[] { 1, 2, 3 }), + Vectors.of("v2d", new float[][] { { 1, 2, 3 }, { 1, 2, 3 } }))); + + var thing456 = things.data.insertMany(List.of( + WeaviateObject.of(thing -> thing + .metadata(ObjectMetadata.of( + meta -> meta + .vectors( + Vectors.of("v1d", new float[] { 4, 5, 6 }), + Vectors.of("v2d", new float[][] { { 4, 5, 6 }, { 4, 5, 6 } }))))))); + Assertions.assertThat(thing456.errors()).as("insert many").isEmpty(); + + // Act + var got123 = things.query.nearVector( + Target.vector("v1d", new float[] { 1, 2, 3 }), + q -> q.limit(1)); + Assertions.assertThat(got123.objects()) + .as("search v1d") + .hasSize(1).extracting(WeaviateObject::uuid) + .containsExactly(thing123.uuid()); + + var got456 = things.query.nearVector( + Target.vector("v2d", new float[][] { { 4, 5, 6 }, { 4, 5, 6 } }), + q -> q.limit(1)); + Assertions.assertThat(got456.objects()) + .as("search v2d") + .hasSize(1).extracting(WeaviateObject::uuid) + .containsExactly(thing456.uuids().get(0)); + } } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/Encoding.java b/src/main/java/io/weaviate/client6/v1/api/collections/Encoding.java new file mode 100644 index 000000000..a52d20657 --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/collections/Encoding.java @@ -0,0 +1,108 @@ +package io.weaviate.client6.v1.api.collections; + +import java.io.IOException; +import java.util.EnumMap; +import java.util.Map; +import java.util.function.Function; + +import com.google.gson.Gson; +import com.google.gson.JsonParser; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +import io.weaviate.client6.v1.api.collections.encoding.MuveraEncoding; +import io.weaviate.client6.v1.internal.ObjectBuilder; +import io.weaviate.client6.v1.internal.json.JsonEnum; + +public interface Encoding { + + enum Kind implements JsonEnum { + MUVERA("muvera"); + + private static final Map jsonValueMap = JsonEnum.collectNames(Kind.values()); + private final String jsonValue; + + private Kind(String jsonValue) { + this.jsonValue = jsonValue; + } + + @Override + public String jsonValue() { + return this.jsonValue; + } + + public static Kind valueOfJson(String jsonValue) { + return JsonEnum.valueOfJson(jsonValue, jsonValueMap, Kind.class); + } + } + + Kind _kind(); + + Object _self(); + + public static Encoding muvera() { + return MuveraEncoding.of(); + } + + public static Encoding muvera(Function> fn) { + return MuveraEncoding.of(fn); + } + + public enum CustomTypeAdapterFactory implements TypeAdapterFactory { + INSTANCE; + + private static final EnumMap> delegateAdapters = new EnumMap<>( + Encoding.Kind.class); + + private final void addAdapter(Gson gson, Encoding.Kind kind, Class cls) { + delegateAdapters.put(kind, + (TypeAdapter) gson.getDelegateAdapter(this, TypeToken.get(cls))); + } + + private final void init(Gson gson) { + addAdapter(gson, Encoding.Kind.MUVERA, MuveraEncoding.class); + } + + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + final var rawType = type.getRawType(); + if (!Encoding.class.isAssignableFrom(rawType)) { + return null; + } + + if (delegateAdapters.isEmpty()) { + init(gson); + } + + return (TypeAdapter) new TypeAdapter() { + + @Override + public void write(JsonWriter out, Encoding value) throws IOException { + TypeAdapter adapter = (TypeAdapter) delegateAdapters.get(value._kind()); + adapter.write(out, (T) value._self()); + } + + @Override + public Encoding read(JsonReader in) throws IOException { + var encodingObject = JsonParser.parseReader(in).getAsJsonObject(); + var encodingName = encodingObject.keySet().iterator().next(); + + Encoding.Kind kind; + try { + kind = Encoding.Kind.valueOfJson(encodingName); + } catch (IllegalArgumentException e) { + return null; + } + + var adapter = delegateAdapters.get(kind); + var concreteEncoding = encodingObject.get(encodingName).getAsJsonObject(); + return adapter.fromJsonTree(concreteEncoding); + } + }.nullSafe(); + } + } +} diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/ObjectMetadata.java b/src/main/java/io/weaviate/client6/v1/api/collections/ObjectMetadata.java index db21e34a5..4dcaed6a5 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/ObjectMetadata.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/ObjectMetadata.java @@ -17,12 +17,16 @@ public ObjectMetadata(Builder builder) { this(builder.uuid, builder.vectors, null, null); } + public static ObjectMetadata of() { + return of(ObjectBuilder.identity()); + } + public static ObjectMetadata of(Function> fn) { return fn.apply(new Builder()).build(); } public static class Builder implements ObjectBuilder { - private String uuid; + private String uuid = UUID.randomUUID().toString(); private Vectors vectors; /** Assign a custom UUID for the object. */ diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/Quantization.java b/src/main/java/io/weaviate/client6/v1/api/collections/Quantization.java index b17b11441..cd5fba0c6 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/Quantization.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/Quantization.java @@ -148,7 +148,6 @@ public TypeAdapter create(Gson gson, TypeToken type) { @Override public void write(JsonWriter out, Quantization value) throws IOException { if (value._kind() == Quantization.Kind.UNCOMPRESSED) { - // out.name(value._kind().jsonValue()); out.value(true); return; } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java b/src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java index 1d63554f7..7513665ed 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/data/InsertManyRequest.java @@ -31,9 +31,7 @@ public InsertManyRequest(WeaviateObject... objects public static final InsertManyRequest of(T... properties) { var objects = Arrays.stream(properties) .map(p -> WeaviateObject.of( - obj -> obj - .properties(p) - .metadata(ObjectMetadata.of(m -> m.uuid(UUID.randomUUID()))))) + obj -> obj.properties(p).metadata(ObjectMetadata.of()))) .toList(); return new InsertManyRequest(objects); } @@ -101,9 +99,7 @@ public static void buildObject(WeaviateProtoBatch.BatchObject.Builder object var metadata = insert.metadata(); if (metadata != null) { - if (metadata.uuid() != null) { - object.setUuid(metadata.uuid()); - } + object.setUuid(metadata.uuid()); if (metadata.vectors() != null) { var vectors = metadata.vectors().asMap() @@ -156,11 +152,15 @@ public static void buildObject(WeaviateProtoBatch.BatchObject.Builder object } }); - var nonRef = marshalStruct(collection.propertiesReader(insert.properties()).readProperties()); - object.setProperties(WeaviateProtoBatch.BatchObject.Properties.newBuilder() - .setNonRefProperties(nonRef) + var properties = WeaviateProtoBatch.BatchObject.Properties.newBuilder() .addAllSingleTargetRefProps(singleRef) - .addAllMultiTargetRefProps(multiRef)); + .addAllMultiTargetRefProps(multiRef); + + if (insert.properties() != null) { + var nonRef = marshalStruct(collection.propertiesReader(insert.properties()).readProperties()); + properties.setNonRefProperties(nonRef); + } + object.setProperties(properties); } @SuppressWarnings("unchecked") diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/encoding/MuveraEncoding.java b/src/main/java/io/weaviate/client6/v1/api/collections/encoding/MuveraEncoding.java new file mode 100644 index 000000000..9db2a9be8 --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/collections/encoding/MuveraEncoding.java @@ -0,0 +1,73 @@ +package io.weaviate.client6.v1.api.collections.encoding; + +import java.util.function.Function; + +import com.google.gson.annotations.SerializedName; + +import io.weaviate.client6.v1.api.collections.Encoding; +import io.weaviate.client6.v1.internal.ObjectBuilder; + +public record MuveraEncoding( + @SerializedName("enabled") boolean enabled, + @SerializedName("ksim") Integer ksim, + @SerializedName("dprojections") Integer dprojections, + @SerializedName("repetitions") Integer repetitions) implements Encoding { + + public static MuveraEncoding of() { + return of(ObjectBuilder.identity()); + } + + public static MuveraEncoding of(Function> fn) { + return fn.apply(new Builder()).build(); + } + + public MuveraEncoding(Builder builder) { + this( + builder.enabled, + builder.ksim, + builder.dprojections, + builder.repetitions); + } + + public static class Builder implements ObjectBuilder { + private boolean enabled = true; + private Integer ksim; + private Integer dprojections; + private Integer repetitions; + + public Builder enabled(boolean enabled) { + this.enabled = enabled; + return this; + } + + public Builder ksim(int ksim) { + this.ksim = ksim; + return this; + } + + public Builder dprojections(int dprojections) { + this.dprojections = dprojections; + return this; + } + + public Builder repetitions(int repetitions) { + this.repetitions = repetitions; + return this; + } + + @Override + public MuveraEncoding build() { + return new MuveraEncoding(this); + } + } + + @Override + public Encoding.Kind _kind() { + return Encoding.Kind.MUVERA; + } + + @Override + public Object _self() { + return this; + } +} diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java index ae2e6b4cc..a43043a51 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java @@ -36,12 +36,11 @@ public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { } req.addTargetVectors(vectorName); - var weightsForTarget = WeaviateProtoBaseSearch.WeightsForTarget.newBuilder() - .setTarget(vectorName); if (weight != null) { - weightsForTarget.setWeight(weight); + req.addWeightsForTargets(WeaviateProtoBaseSearch.WeightsForTarget.newBuilder() + .setTarget(vectorName) + .setWeight(weight)); } - req.addWeightsForTargets(weightsForTarget); return true; } @@ -226,12 +225,11 @@ public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { } req.addTargetVectors(vectorName); - var weightsForTarget = WeaviateProtoBaseSearch.WeightsForTarget.newBuilder() - .setTarget(vectorName); if (weight != null) { - weightsForTarget.setWeight(weight); + req.addWeightsForTargets(WeaviateProtoBaseSearch.WeightsForTarget.newBuilder() + .setTarget(vectorName) + .setWeight(weight)); } - req.addWeightsForTargets(weightsForTarget); return true; } } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/vectorindex/Hnsw.java b/src/main/java/io/weaviate/client6/v1/api/collections/vectorindex/Hnsw.java index a06f1e652..92e684241 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/vectorindex/Hnsw.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/vectorindex/Hnsw.java @@ -15,6 +15,7 @@ public record Hnsw( @SerializedName("vectorCacheMaxObjects") Long vectorCacheMaxObjects, @SerializedName("cleanupIntervalSeconds") Integer cleanupIntervalSeconds, @SerializedName("filterStrategy") FilterStrategy filterStrategy, + @SerializedName("multivector") MultiVector multiVector, @SerializedName("dynamicEfMin") Integer dynamicEfMin, @SerializedName("dynamicEfMax") Integer dynamicEfMax, @@ -49,6 +50,7 @@ public Hnsw(Builder builder) { builder.vectorCacheMaxObjects, builder.cleanupIntervalSeconds, builder.filterStrategy, + builder.multiVector, builder.dynamicEfMin, builder.dynamicEfMax, builder.dynamicEfFactor, @@ -64,6 +66,7 @@ public static class Builder implements ObjectBuilder { private Long vectorCacheMaxObjects; private Integer cleanupIntervalSeconds; private FilterStrategy filterStrategy; + private MultiVector multiVector; private Integer dynamicEfMin; private Integer dynamicEfMax; @@ -106,6 +109,11 @@ public final Builder filterStrategy(FilterStrategy filterStrategy) { return this; } + public final Builder multiVector(MultiVector multiVector) { + this.multiVector = multiVector; + return this; + } + public final Builder dynamicEfMin(int dynamicEfMin) { this.dynamicEfMin = dynamicEfMin; return this; diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/vectorindex/MultiVector.java b/src/main/java/io/weaviate/client6/v1/api/collections/vectorindex/MultiVector.java new file mode 100644 index 000000000..2574bffd8 --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/collections/vectorindex/MultiVector.java @@ -0,0 +1,125 @@ +package io.weaviate.client6.v1.api.collections.vectorindex; + +import java.io.IOException; +import java.util.function.Function; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.annotations.SerializedName; +import com.google.gson.internal.Streams; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +import io.weaviate.client6.v1.api.collections.Encoding; +import io.weaviate.client6.v1.internal.ObjectBuilder; + +public record MultiVector( + @SerializedName("enabled") boolean enabled, + @SerializedName("aggregation") Aggregation aggregation, + Encoding encoding) { + + public enum Aggregation { + @SerializedName("MAX_SIM") + MAX_SIM; + } + + public static MultiVector of() { + return of(ObjectBuilder.identity()); + } + + public static MultiVector of(Function> fn) { + return fn.apply(new Builder()).build(); + } + + public MultiVector(Builder builder) { + this( + builder.enabled, + builder.aggregation, + builder.encoding); + } + + public static class Builder implements ObjectBuilder { + private boolean enabled = true; + private Aggregation aggregation; + private Encoding encoding; + + public Builder enabled(boolean enabled) { + this.enabled = enabled; + return this; + } + + public Builder aggregation(Aggregation aggregation) { + this.aggregation = aggregation; + return this; + } + + public Builder encoding(Encoding encoding) { + this.encoding = encoding; + return this; + } + + @Override + public MultiVector build() { + return new MultiVector(this); + } + } + + public enum CustomTypeAdapterFactory implements TypeAdapterFactory { + INSTANCE; + + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + final var rawType = type.getRawType(); + if (!MultiVector.class.isAssignableFrom(rawType)) { + return null; + } + + final TypeAdapter adapter = (TypeAdapter) gson.getDelegateAdapter(this, type); + + return (TypeAdapter) new TypeAdapter() { + + @Override + public void write(JsonWriter out, MultiVector value) throws IOException { + var config = adapter.toJsonTree(value); + + if (value.encoding() != null) { + // Replace { "encoding": {...}} with { "muvera": {...}} + // where "muvera" is the kind of encoding configured. + config.getAsJsonObject() + .add(value.encoding()._kind().jsonValue(), + config.getAsJsonObject().remove("encoding")); + } + + Streams.write(config, out); + } + + @Override + public MultiVector read(JsonReader in) throws IOException { + var jsonObject = JsonParser.parseReader(in).getAsJsonObject(); + + String encodingKind = null; + for (var kind : Encoding.Kind.values()) { + if (jsonObject.has(kind.jsonValue())) { + encodingKind = kind.jsonValue(); + break; + } + } + + if (encodingKind != null) { + JsonObject encoding = new JsonObject(); + encoding.add(encodingKind, jsonObject.remove(encodingKind)); + jsonObject.add("encoding", encoding); + } + + return adapter.fromJsonTree(jsonObject); + } + }.nullSafe(); + } + } + +} diff --git a/src/main/java/io/weaviate/client6/v1/internal/json/JSON.java b/src/main/java/io/weaviate/client6/v1/internal/json/JSON.java index 14d9deaed..4bee47c63 100644 --- a/src/main/java/io/weaviate/client6/v1/internal/json/JSON.java +++ b/src/main/java/io/weaviate/client6/v1/internal/json/JSON.java @@ -36,6 +36,10 @@ public final class JSON { io.weaviate.client6.v1.api.collections.Generative.CustomTypeAdapterFactory.INSTANCE); gsonBuilder.registerTypeAdapterFactory( io.weaviate.client6.v1.api.collections.Quantization.CustomTypeAdapterFactory.INSTANCE); + gsonBuilder.registerTypeAdapterFactory( + io.weaviate.client6.v1.api.collections.vectorindex.MultiVector.CustomTypeAdapterFactory.INSTANCE); + gsonBuilder.registerTypeAdapterFactory( + io.weaviate.client6.v1.api.collections.Encoding.CustomTypeAdapterFactory.INSTANCE); gsonBuilder.registerTypeAdapterFactory( io.weaviate.client6.v1.internal.DateUtil.CustomTypeAdapterFactory.INSTANCE); diff --git a/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java b/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java index 19fc5024b..9bb5cb89e 100644 --- a/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java +++ b/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java @@ -24,6 +24,18 @@ public static Object[][] appendTargetsTestCases() { Target.vector(new float[] { 1, 2, 3 }), null, }, + { + Target.vector("title_vec", new float[] { 1, 2, 3 }), + """ + { "targetVectors": ["title_vec"] } + """, + }, + { + Target.text("title_vec", "one", "two"), + """ + { "targetVectors": ["title_vec"] } + """, + }, { Target.average( Target.vector("title_vec", new float[] { 1, 2, 3 }), @@ -31,11 +43,7 @@ public static Object[][] appendTargetsTestCases() { """ { "combination": "COMBINATION_METHOD_TYPE_AVERAGE", - "targetVectors": ["title_vec", "body_vec"], - "weightsForTargets": [ - {"target": "title_vec"}, - {"target": "body_vec"} - ] + "targetVectors": ["title_vec", "body_vec"] } """, @@ -65,11 +73,7 @@ public static Object[][] appendTargetsTestCases() { """ { "combination": "COMBINATION_METHOD_TYPE_MIN", - "targetVectors": ["title_vec", "body_vec"], - "weightsForTargets": [ - {"target": "title_vec"}, - {"target": "body_vec"} - ] + "targetVectors": ["title_vec", "body_vec"] } """, @@ -77,15 +81,13 @@ public static Object[][] appendTargetsTestCases() { { Target.relativeScore( List.of("one", "two", "three"), - Target.weight("title_vec", 1), Target.weight("title_vec", 2), Target.weight("body_vec", 3)), """ { "combination": "COMBINATION_METHOD_TYPE_RELATIVE_SCORE", - "targetVectors": ["title_vec", "title_vec", "body_vec"], + "targetVectors": ["title_vec", "body_vec"], "weightsForTargets": [ - {"target": "title_vec", "weight": 1.0}, {"target": "title_vec", "weight": 2.0}, {"target": "body_vec", "weight": 3.0} ] diff --git a/src/test/java/io/weaviate/client6/v1/internal/json/JSONTest.java b/src/test/java/io/weaviate/client6/v1/internal/json/JSONTest.java index 1fdf6f2cf..24b79dc15 100644 --- a/src/test/java/io/weaviate/client6/v1/internal/json/JSONTest.java +++ b/src/test/java/io/weaviate/client6/v1/internal/json/JSONTest.java @@ -15,6 +15,7 @@ import com.jparams.junit4.data.DataMethod; import io.weaviate.client6.v1.api.collections.CollectionConfig; +import io.weaviate.client6.v1.api.collections.Encoding; import io.weaviate.client6.v1.api.collections.Generative; import io.weaviate.client6.v1.api.collections.ObjectMetadata; import io.weaviate.client6.v1.api.collections.Property; @@ -33,6 +34,8 @@ import io.weaviate.client6.v1.api.collections.vectorindex.Distance; import io.weaviate.client6.v1.api.collections.vectorindex.Flat; import io.weaviate.client6.v1.api.collections.vectorindex.Hnsw; +import io.weaviate.client6.v1.api.collections.vectorindex.MultiVector; +import io.weaviate.client6.v1.api.collections.vectorindex.MultiVector.Aggregation; import io.weaviate.client6.v1.api.collections.vectorizers.Img2VecNeuralVectorizer; import io.weaviate.client6.v1.api.collections.vectorizers.Multi2VecClipVectorizer; import io.weaviate.client6.v1.api.collections.vectorizers.SelfProvidedVectorizer; @@ -891,6 +894,29 @@ public static Object[][] testCases() { } """ }, + { + MultiVector.class, + MultiVector.of( + mv -> mv + .aggregation(Aggregation.MAX_SIM) + .encoding(Encoding.muvera( + enc -> enc + .dprojections(1) + .repetitions(2) + .ksim(3)))), + """ + { + "enabled": true, + "aggregation": "MAX_SIM", + "muvera": { + "enabled": true, + "dprojections": 1, + "repetitions": 2, + "ksim": 3 + } + } + """ + }, }; } From 0dea546cf0642e428c69138192f6cce969f344b6 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Wed, 15 Oct 2025 14:20:50 +0200 Subject: [PATCH 06/10] refactor: remove redundant override --- .../io/weaviate/client6/v1/api/collections/query/Target.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java index a43043a51..810e0d83e 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java @@ -217,8 +217,7 @@ static TextTarget text(String vectorName, float weight, String... text) { * Weight to be applied to the vector distance. Used for text-based * queries where only a single input is allowed. */ - record VectorWeight(String vectorName, Float weight) implements Target { - @Override + record VectorWeight(String vectorName, Float weight) { public boolean appendTargets(WeaviateProtoBaseSearch.Targets.Builder req) { if (vectorName == null) { return false; From 899db5b034d9e18b0503857230ef10d1116c4102 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Wed, 15 Oct 2025 14:27:17 +0200 Subject: [PATCH 07/10] feat: add overloaded methods for single-value input --- .../v1/api/collections/query/Target.java | 20 +++++++++++++++++++ .../v1/api/collections/query/TargetTest.java | 6 ++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java index 810e0d83e..b9c010079 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java @@ -278,22 +278,42 @@ static Target combine(List query, CombinationMethod combinationMethod, S return combine(query, combinationMethod, vectorWeights); } + static Target sum(String query, String... targetVectors) { + return sum(List.of(query), targetVectors); + } + static Target sum(List query, String... targetVectors) { return combine(query, CombinationMethod.SUM, targetVectors); } + static Target min(String query, String... targetVectors) { + return min(List.of(query), targetVectors); + } + static Target min(List query, String... targetVectors) { return combine(query, CombinationMethod.MIN, targetVectors); } + static Target average(String query, String... targetVectors) { + return average(List.of(query), targetVectors); + } + static Target average(List query, String... targetVectors) { return combine(query, CombinationMethod.AVERAGE, targetVectors); } + static Target relativeScore(String query, VectorWeight... weights) { + return relativeScore(List.of(query), weights); + } + static Target relativeScore(List query, VectorWeight... weights) { return combine(query, CombinationMethod.RELATIVE_SCORE, weights); } + static Target manualWeights(String query, VectorWeight... weights) { + return manualWeights(List.of(query), weights); + } + static Target manualWeights(List query, VectorWeight... weights) { return combine(query, CombinationMethod.MANUAL_WEIGHTS, weights); } diff --git a/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java b/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java index 9bb5cb89e..92ed061e3 100644 --- a/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java +++ b/src/test/java/io/weaviate/client6/v1/api/collections/query/TargetTest.java @@ -1,7 +1,5 @@ package io.weaviate.client6.v1.api.collections.query; -import java.util.List; - import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; @@ -68,7 +66,7 @@ public static Object[][] appendTargetsTestCases() { }, { Target.min( - List.of("day", "night"), + "in the summertime", "title_vec", "body_vec"), """ { @@ -80,7 +78,7 @@ public static Object[][] appendTargetsTestCases() { }, { Target.relativeScore( - List.of("one", "two", "three"), + "one and two and three and four", Target.weight("title_vec", 2), Target.weight("body_vec", 3)), """ From b3d882b74f1ceb3e71e8e1071089328987be1094 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Thu, 16 Oct 2025 12:35:28 +0200 Subject: [PATCH 08/10] test: skip test on empty env variable --- src/it/java/io/weaviate/integration/OIDCSupportITest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/it/java/io/weaviate/integration/OIDCSupportITest.java b/src/it/java/io/weaviate/integration/OIDCSupportITest.java index eb3b86be5..3ad23187e 100644 --- a/src/it/java/io/weaviate/integration/OIDCSupportITest.java +++ b/src/it/java/io/weaviate/integration/OIDCSupportITest.java @@ -55,7 +55,7 @@ public class OIDCSupportITest extends ConcurrentTest { */ @Test public void test_bearerToken() throws Exception { - Assume.assumeTrue("WCS_DUMMY_CI_PW is not set", WCS_DUMMY_CI_PW != null); + Assume.assumeTrue("WCS_DUMMY_CI_PW is not set", WCS_DUMMY_CI_PW != null && !WCS_DUMMY_CI_PW.isBlank()); Assume.assumeTrue("no internet connection", hasInternetConnection()); var passwordAuth = Authentication.resourceOwnerPassword(WCS_DUMMY_CI_USERNAME, WCS_DUMMY_CI_PW, List.of()); @@ -78,7 +78,7 @@ public void test_bearerToken() throws Exception { @Test public void test_resourceOwnerPassword() throws Exception { - Assume.assumeTrue("WCS_DUMMY_CI_PW is not set", WCS_DUMMY_CI_PW != null); + Assume.assumeTrue("WCS_DUMMY_CI_PW is not set", WCS_DUMMY_CI_PW != null && !WCS_DUMMY_CI_PW.isBlank()); Assume.assumeTrue("no internet connection", hasInternetConnection()); // Check norwal resource owner password flow works. @@ -103,7 +103,7 @@ public void test_resourceOwnerPassword() throws Exception { @Test public void test_clientCredentials() throws Exception { - Assume.assumeTrue("OKTA_CLIENT_SECRET is not set", OKTA_CLIENT_SECRET != null); + Assume.assumeTrue("OKTA_CLIENT_SECRET is not set", OKTA_CLIENT_SECRET != null && !OKTA_CLIENT_SECRET.isBlank()); Assume.assumeTrue("no internet connection", hasInternetConnection()); // Check norwal client credentials flow works. From b7320a90f0149aa8bc83686ad803a3b5b3ef5da7 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Thu, 16 Oct 2025 13:50:00 +0200 Subject: [PATCH 09/10] feat: introduce query target to near-media queries --- .../query/AbstractQueryClient.java | 343 ++++++++++++++++++ .../v1/api/collections/query/NearAudio.java | 29 +- .../v1/api/collections/query/NearDepth.java | 31 +- .../v1/api/collections/query/NearImage.java | 31 +- .../v1/api/collections/query/NearImu.java | 31 +- .../collections/query/NearMediaBuilder.java | 4 +- .../v1/api/collections/query/NearThermal.java | 31 +- .../v1/api/collections/query/NearVideo.java | 31 +- .../v1/api/collections/query/Target.java | 25 ++ 9 files changed, 519 insertions(+), 37 deletions(-) diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java index 898c6f968..b8ca66f97 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java @@ -756,6 +756,29 @@ public ResponseT nearImage(String image, Function> fn) { + return nearImage(NearImage.of(searchTarget, fn)); + } + /** * Query collection objects using near image search. * @@ -783,6 +806,40 @@ public GroupedResponseT nearImage(String image, GroupBy groupBy) { return nearImage(NearImage.of(image), groupBy); } + /** + * Query collection objects using near image search. + * + * @param searchTarget Query target (base64-encoded image). + * @param fn Lambda expression for optional parameters. + * @param groupBy Group-by clause. + * @return Grouped query result. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * + * @see GroupBy + * @see QueryResponseGrouped + */ + public GroupedResponseT nearImage(Target searchTarget, Function> fn, + GroupBy groupBy) { + return nearImage(NearImage.of(searchTarget, fn), groupBy); + } + + /** + * Query collection objects using near image search. + * + * @param searchTarget Query target (base64-encoded image). + * @param groupBy Group-by clause. + * @return Grouped query result. + * + * @see GroupBy + * @see QueryResponseGrouped + * @throws WeaviateApiException in case the server returned with an + * error status code. + */ + public GroupedResponseT nearImage(Target searchTarget, GroupBy groupBy) { + return nearImage(NearImage.of(searchTarget), groupBy); + } + /** * Query collection objects using near image search. * @@ -842,6 +899,29 @@ public ResponseT nearAudio(String audio, Function> fn) { + return nearAudio(NearAudio.of(searchTarget, fn)); + } + /** * Query collection objects using near audio search. * @@ -888,6 +968,41 @@ public GroupedResponseT nearAudio(String audio, Function> fn, + GroupBy groupBy) { + return nearAudio(NearAudio.of(searchTarget, fn), groupBy); + } + /** * Query collection objects using near audio search. * @@ -929,6 +1044,29 @@ public ResponseT nearVideo(String video, Function> fn) { + return nearVideo(NearVideo.of(searchTarget, fn)); + } + /** * Query collection objects using near video search. * @@ -974,6 +1112,40 @@ public GroupedResponseT nearVideo(String video, Function> fn, + GroupBy groupBy) { + return nearVideo(NearVideo.of(searchTarget, fn), groupBy); + } + /** * Query collection objects using near video search. * @@ -1015,6 +1187,29 @@ public ResponseT nearThermal(String thermal, Function> fn) { + return nearThermal(NearThermal.of(searchTarget, fn)); + } + /** * Query collection objects using near thermal search. * @@ -1060,6 +1255,40 @@ public GroupedResponseT nearThermal(String thermal, Function> fn, + GroupBy groupBy) { + return nearThermal(NearThermal.of(searchTarget, fn), groupBy); + } + /** * Query collection objects using near thermal search. * @@ -1101,6 +1330,29 @@ public ResponseT nearDepth(String depth, Function> fn) { + return nearDepth(NearDepth.of(searchTarget, fn)); + } + /** * Query collection objects using near depth search. * @@ -1146,6 +1398,40 @@ public GroupedResponseT nearDepth(String depth, Function> fn, + GroupBy groupBy) { + return nearDepth(NearDepth.of(searchTarget, fn), groupBy); + } + /** * Query collection objects using near depth search. * @@ -1187,6 +1473,29 @@ public ResponseT nearImu(String imu, Function> fn) { + return nearImu(NearImu.of(searchTarget, fn)); + } + /** * Query collection objects using near IMU search. * @@ -1232,6 +1541,40 @@ public GroupedResponseT nearImu(String imu, Function> fn, + GroupBy groupBy) { + return nearImu(NearImu.of(searchTarget, fn), groupBy); + } + /** * Query collection objects using near IMU search. * diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearAudio.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearAudio.java index 491ac3d30..b5ee9c22c 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearAudio.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearAudio.java @@ -3,20 +3,30 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; +import io.weaviate.client6.v1.api.collections.query.Target.CombinedTextTarget; +import io.weaviate.client6.v1.api.collections.query.Target.TextTarget; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; -public record NearAudio(String audio, Float distance, Float certainty, BaseQueryOptions common) +public record NearAudio(Target searchTarget, Float distance, Float certainty, BaseQueryOptions common) implements QueryOperator, AggregateObjectFilter { public static NearAudio of(String audio) { - return of(audio, ObjectBuilder.identity()); + return of(Target.blob(audio)); } public static NearAudio of(String audio, Function> fn) { - return fn.apply(new Builder(audio)).build(); + return of(Target.blob(audio), fn); + } + + public static NearAudio of(Target searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); + } + + public static NearAudio of(Target searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public NearAudio(Builder builder) { @@ -28,7 +38,7 @@ public NearAudio(Builder builder) { } public static class Builder extends NearMediaBuilder { - public Builder(String audio) { + public Builder(Target audio) { super(audio); } @@ -54,7 +64,16 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { private WeaviateProtoBaseSearch.NearAudioSearch.Builder protoBuilder() { var nearAudio = WeaviateProtoBaseSearch.NearAudioSearch.newBuilder(); - nearAudio.setAudio(audio); + if (searchTarget instanceof TextTarget text) { + nearAudio.setAudio(text.query().get(0)); + } else if (searchTarget instanceof CombinedTextTarget combined) { + nearAudio.setAudio(combined.query().get(0)); + } + + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + nearAudio.setTargets(targets); + } if (certainty != null) { nearAudio.setCertainty(certainty); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearDepth.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearDepth.java index ded98f530..6eed37a32 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearDepth.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearDepth.java @@ -3,20 +3,30 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; +import io.weaviate.client6.v1.api.collections.query.Target.CombinedTextTarget; +import io.weaviate.client6.v1.api.collections.query.Target.TextTarget; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; -public record NearDepth(String depth, Float distance, Float certainty, BaseQueryOptions common) +public record NearDepth(Target searchTarget, Float distance, Float certainty, BaseQueryOptions common) implements QueryOperator, AggregateObjectFilter { public static NearDepth of(String depth) { - return of(depth, ObjectBuilder.identity()); + return of(Target.blob(depth)); } public static NearDepth of(String depth, Function> fn) { - return fn.apply(new Builder(depth)).build(); + return of(Target.blob(depth), fn); + } + + public static NearDepth of(Target searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); + } + + public static NearDepth of(Target searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public NearDepth(Builder builder) { @@ -28,8 +38,8 @@ public NearDepth(Builder builder) { } public static class Builder extends NearMediaBuilder { - public Builder(String depth) { - super(depth); + public Builder(Target searchTarget) { + super(searchTarget); } @Override @@ -54,7 +64,16 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { private WeaviateProtoBaseSearch.NearDepthSearch.Builder protoBuilder() { var nearDepth = WeaviateProtoBaseSearch.NearDepthSearch.newBuilder(); - nearDepth.setDepth(depth); + if (searchTarget instanceof TextTarget depth) { + nearDepth.setDepth(depth.query().get(0)); + } else if (searchTarget instanceof CombinedTextTarget combined) { + nearDepth.setDepth(combined.query().get(0)); + } + + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + nearDepth.setTargets(targets); + } if (certainty != null) { nearDepth.setCertainty(certainty); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearImage.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearImage.java index ab6c62813..6beb6bb44 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearImage.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearImage.java @@ -3,20 +3,30 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; +import io.weaviate.client6.v1.api.collections.query.Target.CombinedTextTarget; +import io.weaviate.client6.v1.api.collections.query.Target.TextTarget; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; -public record NearImage(String image, Float distance, Float certainty, BaseQueryOptions common) +public record NearImage(Target searchTarget, Float distance, Float certainty, BaseQueryOptions common) implements QueryOperator, AggregateObjectFilter { public static NearImage of(String image) { - return of(image, ObjectBuilder.identity()); + return of(Target.blob(image)); } public static NearImage of(String image, Function> fn) { - return fn.apply(new Builder(image)).build(); + return of(Target.blob(image), fn); + } + + public static NearImage of(Target searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); + } + + public static NearImage of(Target searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public NearImage(Builder builder) { @@ -28,8 +38,8 @@ public NearImage(Builder builder) { } public static class Builder extends NearMediaBuilder { - public Builder(String image) { - super(image); + public Builder(Target searchTarget) { + super(searchTarget); } @Override @@ -54,7 +64,16 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { private WeaviateProtoBaseSearch.NearImageSearch.Builder protoBuilder() { var nearImage = WeaviateProtoBaseSearch.NearImageSearch.newBuilder(); - nearImage.setImage(image); + if (searchTarget instanceof TextTarget image) { + nearImage.setImage(image.query().get(0)); + } else if (searchTarget instanceof CombinedTextTarget combined) { + nearImage.setImage(combined.query().get(0)); + } + + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + nearImage.setTargets(targets); + } if (certainty != null) { nearImage.setCertainty(certainty); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearImu.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearImu.java index 7246ba7de..6b93fed8c 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearImu.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearImu.java @@ -3,20 +3,30 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; +import io.weaviate.client6.v1.api.collections.query.Target.CombinedTextTarget; +import io.weaviate.client6.v1.api.collections.query.Target.TextTarget; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; -public record NearImu(String imu, Float distance, Float certainty, BaseQueryOptions common) +public record NearImu(Target searchTarget, Float distance, Float certainty, BaseQueryOptions common) implements QueryOperator, AggregateObjectFilter { public static NearImu of(String imu) { - return of(imu, ObjectBuilder.identity()); + return of(Target.blob(imu)); } public static NearImu of(String imu, Function> fn) { - return fn.apply(new Builder(imu)).build(); + return of(Target.blob(imu), fn); + } + + public static NearImu of(Target searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); + } + + public static NearImu of(Target searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public NearImu(Builder builder) { @@ -28,8 +38,8 @@ public NearImu(Builder builder) { } public static class Builder extends NearMediaBuilder { - public Builder(String imu) { - super(imu); + public Builder(Target searchTarget) { + super(searchTarget); } @Override @@ -54,7 +64,16 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { private WeaviateProtoBaseSearch.NearIMUSearch.Builder protoBuilder() { var nearImu = WeaviateProtoBaseSearch.NearIMUSearch.newBuilder(); - nearImu.setImu(imu); + if (searchTarget instanceof TextTarget imu) { + nearImu.setImu(imu.query().get(0)); + } else if (searchTarget instanceof CombinedTextTarget combined) { + nearImu.setImu(combined.query().get(0)); + } + + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + nearImu.setTargets(targets); + } if (certainty != null) { nearImu.setCertainty(certainty); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearMediaBuilder.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearMediaBuilder.java index 1d81eeae4..b9777aae0 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearMediaBuilder.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearMediaBuilder.java @@ -3,9 +3,9 @@ abstract class NearMediaBuilder, MediaT extends Object> extends BaseVectorSearchBuilder { // Required query parameters. - final String media; + final Target media; - public NearMediaBuilder(String media) { + public NearMediaBuilder(Target media) { this.media = media; } } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearThermal.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearThermal.java index 26efdc418..d85ef8b93 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearThermal.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearThermal.java @@ -3,20 +3,30 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; +import io.weaviate.client6.v1.api.collections.query.Target.CombinedTextTarget; +import io.weaviate.client6.v1.api.collections.query.Target.TextTarget; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; -public record NearThermal(String thermal, Float distance, Float certainty, BaseQueryOptions common) +public record NearThermal(Target searchTarget, Float distance, Float certainty, BaseQueryOptions common) implements QueryOperator, AggregateObjectFilter { public static NearThermal of(String thermal) { - return of(thermal, ObjectBuilder.identity()); + return of(Target.blob(thermal)); } public static NearThermal of(String thermal, Function> fn) { - return fn.apply(new Builder(thermal)).build(); + return of(Target.blob(thermal), fn); + } + + public static NearThermal of(Target searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); + } + + public static NearThermal of(Target searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public NearThermal(Builder builder) { @@ -28,8 +38,8 @@ public NearThermal(Builder builder) { } public static class Builder extends NearMediaBuilder { - public Builder(String thermal) { - super(thermal); + public Builder(Target searchTarget) { + super(searchTarget); } @Override @@ -54,7 +64,16 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { private WeaviateProtoBaseSearch.NearThermalSearch.Builder protoBuilder() { var nearThermal = WeaviateProtoBaseSearch.NearThermalSearch.newBuilder(); - nearThermal.setThermal(thermal); + if (searchTarget instanceof TextTarget thermal) { + nearThermal.setThermal(thermal.query().get(0)); + } else if (searchTarget instanceof CombinedTextTarget combined) { + nearThermal.setThermal(combined.query().get(0)); + } + + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + nearThermal.setTargets(targets); + } if (certainty != null) { nearThermal.setCertainty(certainty); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVideo.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVideo.java index 0968221cc..f4a1b8922 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVideo.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVideo.java @@ -3,20 +3,30 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; +import io.weaviate.client6.v1.api.collections.query.Target.CombinedTextTarget; +import io.weaviate.client6.v1.api.collections.query.Target.TextTarget; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; -public record NearVideo(String video, Float distance, Float certainty, BaseQueryOptions common) +public record NearVideo(Target searchTarget, Float distance, Float certainty, BaseQueryOptions common) implements QueryOperator, AggregateObjectFilter { public static NearVideo of(String video) { - return of(video, ObjectBuilder.identity()); + return of(Target.blob(video)); } public static NearVideo of(String video, Function> fn) { - return fn.apply(new Builder(video)).build(); + return of(Target.blob(video), fn); + } + + public static NearVideo of(Target searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); + } + + public static NearVideo of(Target searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public NearVideo(Builder builder) { @@ -28,8 +38,8 @@ public NearVideo(Builder builder) { } public static class Builder extends NearMediaBuilder { - public Builder(String video) { - super(video); + public Builder(Target searchTarget) { + super(searchTarget); } @Override @@ -54,7 +64,16 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { private WeaviateProtoBaseSearch.NearVideoSearch.Builder protoBuilder() { var nearVideo = WeaviateProtoBaseSearch.NearVideoSearch.newBuilder(); - nearVideo.setVideo(video); + if (searchTarget instanceof TextTarget video) { + nearVideo.setVideo(video.query().get(0)); + } else if (searchTarget instanceof CombinedTextTarget combined) { + nearVideo.setVideo(combined.query().get(0)); + } + + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + nearVideo.setTargets(targets); + } if (certainty != null) { nearVideo.setCertainty(certainty); diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java index b9c010079..aa62e7e8b 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Target.java @@ -1,6 +1,7 @@ package io.weaviate.client6.v1.api.collections.query; import java.util.Arrays; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; @@ -213,6 +214,30 @@ static TextTarget text(String vectorName, float weight, String... text) { return new TextTarget(vectorName, weight, Arrays.asList(text)); } + static TextTarget blob(String blob) { + return new TextTarget(null, null, Collections.singletonList(blob)); + } + + static TextTarget blob(String vectorName, String blob) { + return new TextTarget(vectorName, null, Collections.singletonList(blob)); + } + + static TextTarget blob(String vectorName, float weight, String blob) { + return new TextTarget(vectorName, weight, Collections.singletonList(blob)); + } + + static TextTarget uuid(String uuid) { + return new TextTarget(null, null, Collections.singletonList(uuid)); + } + + static TextTarget uuid(String vectorName, String uuid) { + return new TextTarget(vectorName, null, Collections.singletonList(uuid)); + } + + static TextTarget uuid(String vectorName, float weight, String uuid) { + return new TextTarget(vectorName, weight, Collections.singletonList(uuid)); + } + /** * Weight to be applied to the vector distance. Used for text-based * queries where only a single input is allowed. From 8eb1ece3bc48622c67d6320affe129f9243b6001 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Thu, 16 Oct 2025 14:12:49 +0200 Subject: [PATCH 10/10] feat: introduce target vectors to hybrid query --- .../query/AbstractQueryClient.java | 57 +++++++++++++++++++ .../v1/api/collections/query/Hybrid.java | 40 +++++++++---- .../v1/api/collections/query/NearText.java | 8 +-- .../v1/api/collections/query/NearVector.java | 10 ++-- 4 files changed, 96 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java index b8ca66f97..8774ef508 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/AbstractQueryClient.java @@ -248,6 +248,29 @@ public ResponseT hybrid(String query, Function> fn) { + return hybrid(Hybrid.of(searchTarget, fn)); + } + /** * Query collection objects using hybrid search. * @@ -292,6 +315,40 @@ public GroupedResponseT hybrid(String query, Function> fn, + GroupBy groupBy) { + return hybrid(Hybrid.of(searchTarget, fn), groupBy); + } + /** * Query collection objects using hybrid search. * diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/Hybrid.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/Hybrid.java index dc5ef608f..6f284c5a5 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/Hybrid.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/Hybrid.java @@ -6,13 +6,15 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.collections.aggregate.AggregateObjectFilter; +import io.weaviate.client6.v1.api.collections.query.Target.CombinedTextTarget; +import io.weaviate.client6.v1.api.collections.query.Target.TextTarget; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoAggregate; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoBaseSearch; import io.weaviate.client6.v1.internal.grpc.protocol.WeaviateProtoSearchGet; public record Hybrid( - String query, + Target searchTarget, List queryProperties, SearchOperator searchOperator, Float alpha, @@ -27,16 +29,24 @@ public static enum FusionType { } public static final Hybrid of(String query) { - return of(query, ObjectBuilder.identity()); + return of(Target.text(List.of(query))); } public static final Hybrid of(String query, Function> fn) { - return fn.apply(new Builder(query)).build(); + return of(Target.text(List.of(query)), fn); + } + + public static final Hybrid of(Target searchTarget) { + return of(searchTarget, ObjectBuilder.identity()); + } + + public static final Hybrid of(Target searchTarget, Function> fn) { + return fn.apply(new Builder(searchTarget)).build(); } public Hybrid(Builder builder) { this( - builder.query, + builder.searchTarget, builder.queryProperties, builder.searchOperator, builder.alpha, @@ -48,7 +58,7 @@ public Hybrid(Builder builder) { public static class Builder extends BaseQueryOptions.Builder { // Required query parameters. - private final String query; + private final Target searchTarget; // Optional query parameters. List queryProperties = new ArrayList<>(); @@ -58,8 +68,8 @@ public static class Builder extends BaseQueryOptions.Builder { FusionType fusionType; Float maxVectorDistance; - public Builder(String query) { - this.query = query; + public Builder(Target searchTarget) { + this.searchTarget = searchTarget; } /** Select properties to be included in the results scoring. */ @@ -155,9 +165,14 @@ public final void appendTo(WeaviateProtoSearchGet.SearchRequest.Builder req) { private WeaviateProtoBaseSearch.Hybrid.Builder protoBuilder() { var hybrid = WeaviateProtoBaseSearch.Hybrid.newBuilder() - .setQuery(query) .addAllProperties(queryProperties); + if (searchTarget instanceof TextTarget text) { + hybrid.setQuery(text.query().get(0)); + } else if (searchTarget instanceof CombinedTextTarget combined) { + hybrid.setQuery(combined.query().get(0)); + } + if (alpha != null) { hybrid.setAlpha(alpha); } @@ -177,12 +192,17 @@ private WeaviateProtoBaseSearch.Hybrid.Builder protoBuilder() { if (near != null) { if (near instanceof NearVector nv) { - hybrid.setNearVector(nv.protoBuilder()); + hybrid.setNearVector(nv.protoBuilder(false)); } else if (near instanceof NearText nt) { - hybrid.setNearText(nt.protoBuilder()); + hybrid.setNearText(nt.protoBuilder(false)); } } + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); + if (searchTarget.appendTargets(targets)) { + hybrid.setTargets(targets); + } + return hybrid; } } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearText.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearText.java index 051558f96..9878edb76 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearText.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearText.java @@ -117,7 +117,7 @@ public final void appendTo(WeaviateProtoBaseSearch.NearTextSearch.Move.Builder m @Override public void appendTo(WeaviateProtoSearchGet.SearchRequest.Builder req) { common.appendTo(req); - req.setNearText(protoBuilder()); + req.setNearText(protoBuilder(true)); } @Override @@ -125,11 +125,11 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { if (common.limit() != null) { req.setLimit(common.limit()); } - req.setNearText(protoBuilder()); + req.setNearText(protoBuilder(true)); } // Package-private for Hybrid to see. - WeaviateProtoBaseSearch.NearTextSearch.Builder protoBuilder() { + WeaviateProtoBaseSearch.NearTextSearch.Builder protoBuilder(boolean withTargets) { var nearText = WeaviateProtoBaseSearch.NearTextSearch.newBuilder(); if (searchTarget instanceof TextTarget text) { @@ -139,7 +139,7 @@ WeaviateProtoBaseSearch.NearTextSearch.Builder protoBuilder() { } var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); - if (searchTarget.appendTargets(targets)) { + if (withTargets && searchTarget.appendTargets(targets)) { nearText.setTargets(targets); } diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVector.java b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVector.java index e869c40cd..e8323a640 100644 --- a/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVector.java +++ b/src/main/java/io/weaviate/client6/v1/api/collections/query/NearVector.java @@ -40,7 +40,7 @@ public final NearVector build() { @Override public final void appendTo(WeaviateProtoSearchGet.SearchRequest.Builder req) { common.appendTo(req); - req.setNearVector(protoBuilder()); + req.setNearVector(protoBuilder(true)); } @Override @@ -48,16 +48,16 @@ public void appendTo(WeaviateProtoAggregate.AggregateRequest.Builder req) { if (common.limit() != null) { req.setLimit(common.limit()); } - req.setNearVector(protoBuilder()); + req.setNearVector(protoBuilder(true)); } - // This is made package-private for Hybrid to see. Should we refactor? - WeaviateProtoBaseSearch.NearVector.Builder protoBuilder() { + WeaviateProtoBaseSearch.NearVector.Builder protoBuilder(boolean withTargets) { var nearVector = WeaviateProtoBaseSearch.NearVector.newBuilder(); searchTarget.appendVectors(nearVector); + var targets = WeaviateProtoBaseSearch.Targets.newBuilder(); - if (searchTarget.appendTargets(targets)) { + if (withTargets && searchTarget.appendTargets(targets)) { nearVector.setTargets(targets); }