diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c7bc3322e7f9..c89860958f874 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Bump `org.jsoup:jsoup` from 1.21.2 to 1.22.1 ([#20368](https://github.com/opensearch-project/OpenSearch/pull/20368)) - Bump `org.jline:jline` from 3.30.5 to 3.30.6 ([#20369](https://github.com/opensearch-project/OpenSearch/pull/20369)) - Bump `lycheeverse/lychee-action` from 2.6.1 to 2.7.0 ([#20370](https://github.com/opensearch-project/OpenSearch/pull/20370)) +- Bump `opensearch-protobufs` from 1.0.0 to 1.1.0 and update transport-grpc module compatibility ([#20396](https://github.com/opensearch-project/OpenSearch/pull/20396)) ### Removed diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 705fe46a0536a..aee25ad9a06f7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ kotlin = "1.7.10" antlr4 = "4.13.1" guava = "33.2.1-jre" gson = "2.13.2" -opensearchprotobufs = "1.0.0" +opensearchprotobufs = "1.1.0" protobuf = "3.25.8" jakarta_annotation = "1.3.5" google_http_client = "1.44.1" diff --git a/modules/transport-grpc/licenses/protobufs-1.0.0.jar.sha1 b/modules/transport-grpc/licenses/protobufs-1.0.0.jar.sha1 deleted file mode 100644 index 8daf74b220d1b..0000000000000 --- a/modules/transport-grpc/licenses/protobufs-1.0.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -495727dc62f515bd34e37dcdda976026b0aaf33a \ No newline at end of file diff --git a/modules/transport-grpc/licenses/protobufs-1.1.0.jar.sha1 b/modules/transport-grpc/licenses/protobufs-1.1.0.jar.sha1 new file mode 100644 index 0000000000000..7363c49ac959d --- /dev/null +++ b/modules/transport-grpc/licenses/protobufs-1.1.0.jar.sha1 @@ -0,0 +1 @@ +4d49daae7d84f850a876540ee7b6a979e769d4c7 \ No newline at end of file diff --git a/modules/transport-grpc/spi/licenses/protobufs-1.0.0.jar.sha1 b/modules/transport-grpc/spi/licenses/protobufs-1.0.0.jar.sha1 deleted file mode 100644 index 8daf74b220d1b..0000000000000 --- a/modules/transport-grpc/spi/licenses/protobufs-1.0.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -495727dc62f515bd34e37dcdda976026b0aaf33a \ No newline at end of file diff --git a/modules/transport-grpc/spi/licenses/protobufs-1.1.0.jar.sha1 b/modules/transport-grpc/spi/licenses/protobufs-1.1.0.jar.sha1 new file mode 100644 index 0000000000000..7363c49ac959d --- /dev/null +++ b/modules/transport-grpc/spi/licenses/protobufs-1.1.0.jar.sha1 @@ -0,0 +1 @@ +4d49daae7d84f850a876540ee7b6a979e769d4c7 \ No newline at end of file diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/GeoPointProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/GeoPointProtoUtils.java index d3b2ad5dfbe61..40330970a32ca 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/GeoPointProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/common/GeoPointProtoUtils.java @@ -66,8 +66,8 @@ public static GeoPoint parseGeoPoint( point.resetLat(latLon.getLat()); point.resetLon(latLon.getLon()); - } else if (geoLocation.hasDoubleArray()) { - org.opensearch.protobufs.DoubleArray doubleArray = geoLocation.getDoubleArray(); + } else if (geoLocation.hasCoords()) { + org.opensearch.protobufs.DoubleArray doubleArray = geoLocation.getCoords(); int count = doubleArray.getDoubleArrayCount(); if (count < 2) { throw new IllegalArgumentException("[geo_point] field type should have at least two dimensions"); diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoUtils.java index 8efe4142c7557..f2cc322279284 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoUtils.java @@ -12,7 +12,6 @@ import org.opensearch.core.xcontent.XContentParser; import org.opensearch.index.query.TermsQueryBuilder; import org.opensearch.indices.TermsLookup; -import org.opensearch.protobufs.TermsQueryField; import org.opensearch.transport.grpc.proto.response.common.FieldValueProtoUtils; import java.util.ArrayList; @@ -73,48 +72,6 @@ static TermsQueryBuilder fromProto(org.opensearch.protobufs.TermsQuery termsQuer return builder; } - /** - * Converts a Protocol Buffer TermsQueryField to an OpenSearch TermQueryBuilder. - * This method handles the field-specific conversion (values or lookup) without - * boost, queryName, or valueType which are handled at the TermsQuery level. - * - * @param termsQueryProto The Protocol Buffer TermsQueryField object - * @return A configured TermQueryBuilder instance - * @throws IllegalArgumentException if the term query field value is not recognized - */ - static TermsQueryBuilder fromProto(TermsQueryField termsQueryProto) { - String fieldName = null; - List values = null; - TermsLookup termsLookup = null; - - switch (termsQueryProto.getTermsQueryFieldCase()) { - case FIELD_VALUE_ARRAY: - values = parseFieldValueArray(termsQueryProto.getFieldValueArray()); - break; - case LOOKUP: - termsLookup = parseTermsLookup(termsQueryProto.getLookup()); - break; - case TERMSQUERYFIELD_NOT_SET: - default: - throw new IllegalArgumentException("Neither field_value_array nor lookup is set"); - } - - if (values == null && termsLookup == null) { - throw new IllegalArgumentException("Either field_value_array or lookup must be set"); - } - - TermsQueryBuilder termsQueryBuilder; - if (values == null) { - termsQueryBuilder = new TermsQueryBuilder(fieldName, termsLookup); - } else if (termsLookup == null) { - termsQueryBuilder = new TermsQueryBuilder(fieldName, values); - } else { - throw new IllegalArgumentException("values and termsLookup cannot both be null"); - } - - return termsQueryBuilder; - } - /** * Builds a TermsQueryBuilder from a field name, TermsQueryField oneof, and value_type. * @param fieldName the field name (from the terms map key) @@ -136,15 +93,15 @@ static TermsQueryBuilder fromProto( TermsLookup termsLookup = null; switch (termsQueryField.getTermsQueryFieldCase()) { - case FIELD_VALUE_ARRAY: - values = parseFieldValueArray(termsQueryField.getFieldValueArray()); + case VALUE: + values = parseFieldValueArray(termsQueryField.getValue()); break; case LOOKUP: termsLookup = parseTermsLookup(termsQueryField.getLookup()); break; case TERMSQUERYFIELD_NOT_SET: default: - throw new IllegalArgumentException("Neither field_value_array nor lookup is set"); + throw new IllegalArgumentException("Neither value nor lookup is set"); } if (values == null && termsLookup == null) { diff --git a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/search/SearchHitProtoUtils.java b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/search/SearchHitProtoUtils.java index 84c9594633314..9313c78910b87 100644 --- a/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/search/SearchHitProtoUtils.java +++ b/modules/transport-grpc/src/main/java/org/opensearch/transport/grpc/proto/response/search/SearchHitProtoUtils.java @@ -14,7 +14,6 @@ import org.opensearch.common.document.DocumentField; import org.opensearch.core.common.bytes.BytesArray; import org.opensearch.core.common.bytes.BytesReference; -import org.opensearch.core.xcontent.ToXContent; import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.index.seqno.SequenceNumbers; import org.opensearch.protobufs.InnerHitsResult; @@ -261,15 +260,30 @@ private static void processMatchedQueries(SearchHit hit, org.opensearch.protobuf // boolean includeMatchedQueriesScore = params.paramAsBoolean(RestSearchAction.INCLUDE_NAMED_QUERIES_SCORE_PARAM, false); boolean includeMatchedQueriesScore = false; + org.opensearch.protobufs.HitMatchedQueries.Builder matchedQueriesBuilder = org.opensearch.protobufs.HitMatchedQueries + .newBuilder(); if (includeMatchedQueriesScore) { - // TODO map type is missing in spec - // for (Map.Entry entry : matchedQueries.entrySet()) { - // hitBuilder.putMatchedqueires(entry.getKey(), entry.getValue()); + // TODO: uncomment when have a way to pass the param to the converter + // Map matchedQueriesWithScores = hit.getMatchedQueriesAndScores(); + // org.opensearch.protobufs.DoubleMap.Builder doubleMapBuilder = org.opensearch.protobufs.DoubleMap.newBuilder(); + // for (Map.Entry entry : matchedQueriesWithScores.entrySet()) { + // doubleMapBuilder.putDoubleMap(entry.getKey(), entry.getValue().doubleValue()); + // } + // matchedQueriesBuilder.setScores(doubleMapBuilder.build()); } else { + org.opensearch.protobufs.StringArray.Builder namesBuilder = org.opensearch.protobufs.StringArray.newBuilder(); + for (String matchedFilter : hit.getMatchedQueries()) { + namesBuilder.addStringArray(matchedFilter); + } + matchedQueriesBuilder.setNames(namesBuilder.build()); + + // Populate deprecated matched_queries field for backward compatibility with old clients for (String matchedFilter : hit.getMatchedQueries()) { hitBuilder.addMatchedQueries(matchedFilter); } } + + hitBuilder.setMatchedQueries2(matchedQueriesBuilder.build()); } } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/GeoPointProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/GeoPointProtoUtilsTests.java index ce1b74ff9938a..890f804a0a260 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/GeoPointProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/common/GeoPointProtoUtilsTests.java @@ -53,7 +53,7 @@ public void testParseGeoPointWithDoubleArrayTwoDimensions() { .addDoubleArray(37.7749) // lat .build(); - GeoLocation geoLocation = GeoLocation.newBuilder().setDoubleArray(doubleArray).build(); + GeoLocation geoLocation = GeoLocation.newBuilder().setCoords(doubleArray).build(); GeoPoint result = GeoPointProtoUtils.parseGeoPoint(geoLocation); @@ -70,7 +70,7 @@ public void testParseGeoPointWithDoubleArrayThreeDimensions() { .addDoubleArray(100.0) // z (elevation) .build(); - GeoLocation geoLocation = GeoLocation.newBuilder().setDoubleArray(doubleArray).build(); + GeoLocation geoLocation = GeoLocation.newBuilder().setCoords(doubleArray).build(); // Test with ignoreZValue = true GeoPoint point = new GeoPoint(); @@ -90,7 +90,7 @@ public void testParseGeoPointWithDoubleArrayThreeDimensionsNoIgnore() { .addDoubleArray(0.0) // z (elevation) .build(); - GeoLocation geoLocation = GeoLocation.newBuilder().setDoubleArray(doubleArray).build(); + GeoLocation geoLocation = GeoLocation.newBuilder().setCoords(doubleArray).build(); // Test with ignoreZValue = false and z = 0.0 (should throw OpenSearchParseException) GeoPoint point = new GeoPoint(); @@ -163,7 +163,7 @@ public void testParseGeoPointWithDoubleArrayTooFewDimensions() { .addDoubleArray(-122.4194) // Only lon, missing lat .build(); - GeoLocation geoLocation = GeoLocation.newBuilder().setDoubleArray(doubleArray).build(); + GeoLocation geoLocation = GeoLocation.newBuilder().setCoords(doubleArray).build(); IllegalArgumentException exception = expectThrows( IllegalArgumentException.class, @@ -185,7 +185,7 @@ public void testParseGeoPointWithDoubleArrayTooManyDimensions() { .addDoubleArray(200.0) // extra dimension .build(); - GeoLocation geoLocation = GeoLocation.newBuilder().setDoubleArray(doubleArray).build(); + GeoLocation geoLocation = GeoLocation.newBuilder().setCoords(doubleArray).build(); IllegalArgumentException exception = expectThrows( IllegalArgumentException.class, @@ -206,7 +206,7 @@ public void testParseGeoPointWithDoubleArrayThreeDimensionsWithNonZeroZ() { .addDoubleArray(100.0) // non-zero z (elevation) .build(); - GeoLocation geoLocation = GeoLocation.newBuilder().setDoubleArray(doubleArray).build(); + GeoLocation geoLocation = GeoLocation.newBuilder().setCoords(doubleArray).build(); // Test with ignoreZValue = false and non-zero z (should throw OpenSearchParseException) GeoPoint point = new GeoPoint(); diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/GeoDistanceQueryBuilderProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/GeoDistanceQueryBuilderProtoUtilsTests.java index dc5a03ceead2a..7c21719f92fc7 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/GeoDistanceQueryBuilderProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/GeoDistanceQueryBuilderProtoUtilsTests.java @@ -141,7 +141,7 @@ public void testFromProtoWithDoubleArrayGeoLocation() { .addDoubleArray(40.7) // lat .build(); - GeoLocation geoLocation = GeoLocation.newBuilder().setDoubleArray(doubleArray).build(); + GeoLocation geoLocation = GeoLocation.newBuilder().setCoords(doubleArray).build(); GeoDistanceQuery geoDistanceQuery = GeoDistanceQuery.newBuilder() .setXName("location") diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/QueryBuilderProtoConverterRegistryTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/QueryBuilderProtoConverterRegistryTests.java index e83c13e2b50b6..06ef5b72fb667 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/QueryBuilderProtoConverterRegistryTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/QueryBuilderProtoConverterRegistryTests.java @@ -457,7 +457,7 @@ public void testGeoDistanceQueryConversionWithDoubleArray() { .addDoubleArray(40.7589) // lat .build(); - GeoLocation geoLocation = GeoLocation.newBuilder().setDoubleArray(doubleArray).build(); + GeoLocation geoLocation = GeoLocation.newBuilder().setCoords(doubleArray).build(); GeoDistanceQuery geoDistanceQuery = GeoDistanceQuery.newBuilder() .setXName("location") @@ -604,7 +604,7 @@ public void testTermsQueryConversion() { FieldValue fv1 = FieldValue.newBuilder().setString("electronics").build(); FieldValue fv2 = FieldValue.newBuilder().setString("books").build(); FieldValueArray fva = FieldValueArray.newBuilder().addFieldValueArray(fv1).addFieldValueArray(fv2).build(); - TermsQueryField termsQueryField = TermsQueryField.newBuilder().setFieldValueArray(fva).build(); + TermsQueryField termsQueryField = TermsQueryField.newBuilder().setValue(fva).build(); QueryContainer queryContainer = QueryContainer.newBuilder() .setTerms(org.opensearch.protobufs.TermsQuery.newBuilder().putTerms("category", termsQueryField).setBoost(1.5f).build()) diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoConverterTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoConverterTests.java index 0614b0d9e020c..b4018dec367dc 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoConverterTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoConverterTests.java @@ -40,7 +40,7 @@ public void testGetHandledQueryCase() { public void testFromProto() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("v1").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); - TermsQueryField termsQueryField = TermsQueryField.newBuilder().setFieldValueArray(fva).build(); + TermsQueryField termsQueryField = TermsQueryField.newBuilder().setValue(fva).build(); Map termsMap = new HashMap<>(); termsMap.put("test-field", termsQueryField); TermsQuery termsQuery = TermsQuery.newBuilder().putTerms("test-field", termsQueryField).build(); @@ -89,7 +89,7 @@ public void testFromProtoWithEmptyTermsMap() { public void testFromProtoWithBoostAndQueryName() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("test_value").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); - TermsQueryField termsQueryField = TermsQueryField.newBuilder().setFieldValueArray(fva).build(); + TermsQueryField termsQueryField = TermsQueryField.newBuilder().setValue(fva).build(); TermsQuery termsQuery = TermsQuery.newBuilder() .putTerms("test_field", termsQueryField) @@ -116,7 +116,7 @@ public void testFromProtoWithValueType() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("AQI=").build(); // base64 for // {1,2} org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); - TermsQueryField termsQueryField = TermsQueryField.newBuilder().setFieldValueArray(fva).build(); + TermsQueryField termsQueryField = TermsQueryField.newBuilder().setValue(fva).build(); TermsQuery termsQuery = TermsQuery.newBuilder() .putTerms("bitmap_field", termsQueryField) @@ -174,7 +174,7 @@ public void testFromProtoWithTermsLookup() { public void testFromProtoWithDefaultValues() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("default_value").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); - TermsQueryField termsQueryField = TermsQueryField.newBuilder().setFieldValueArray(fva).build(); + TermsQueryField termsQueryField = TermsQueryField.newBuilder().setValue(fva).build(); TermsQuery termsQuery = TermsQuery.newBuilder().putTerms("default_field", termsQueryField).build(); diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoUtilsTests.java index 6ffb5d8d94579..2aea56ef1f084 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/request/search/query/TermsQueryBuilderProtoUtilsTests.java @@ -24,7 +24,7 @@ public void testFromProtoWithDefaultBehavior() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("v").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); - TermsQueryField termsQueryField = TermsQueryField.newBuilder().setFieldValueArray(fva).build(); + TermsQueryField termsQueryField = TermsQueryField.newBuilder().setValue(fva).build(); TermsQueryBuilder termsQueryBuilder = TermsQueryBuilderProtoUtils.fromProto( "field", termsQueryField, @@ -82,7 +82,7 @@ public void testFromProtoWithValueTypeField() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("x").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); - TermsQueryField termsQueryField = TermsQueryField.newBuilder().setFieldValueArray(fva).build(); + TermsQueryField termsQueryField = TermsQueryField.newBuilder().setValue(fva).build(); TermsQueryBuilder result = TermsQueryBuilderProtoUtils.fromProto( "field", @@ -105,7 +105,7 @@ public void testFromProtoNewOverloadWithFieldValueArray() { .build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); org.opensearch.protobufs.TermsQueryValueType vt = org.opensearch.protobufs.TermsQueryValueType.TERMS_QUERY_VALUE_TYPE_DEFAULT; @@ -183,7 +183,7 @@ public void testFromProtoNewOverloadBitmapDecoding() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("AQI=").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); TermsQueryBuilder builder = TermsQueryBuilderProtoUtils.fromProto( @@ -208,7 +208,7 @@ public void testFromProtoNewOverloadBitmapInvalidMultipleValues() { .addFieldValueArray(fv2) .build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); assertThrows( @@ -253,7 +253,7 @@ public void testFromProtoWithTermsQuery() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("test_value").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); org.opensearch.protobufs.TermsQuery termsQuery = org.opensearch.protobufs.TermsQuery.newBuilder() @@ -297,8 +297,8 @@ public void testFromProtoWithTermsQueryMultipleFields() { .build(); org.opensearch.protobufs.TermsQuery termsQuery = org.opensearch.protobufs.TermsQuery.newBuilder() - .putTerms("field1", org.opensearch.protobufs.TermsQueryField.newBuilder().setFieldValueArray(fva1).build()) - .putTerms("field2", org.opensearch.protobufs.TermsQueryField.newBuilder().setFieldValueArray(fva2).build()) + .putTerms("field1", org.opensearch.protobufs.TermsQueryField.newBuilder().setValue(fva1).build()) + .putTerms("field2", org.opensearch.protobufs.TermsQueryField.newBuilder().setValue(fva2).build()) .build(); assertThrows(IllegalArgumentException.class, () -> TermsQueryBuilderProtoUtils.fromProto(termsQuery)); @@ -341,7 +341,7 @@ public void testFromProtoWithTermsQueryDefaultValues() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("default_value").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); org.opensearch.protobufs.TermsQuery termsQuery = org.opensearch.protobufs.TermsQuery.newBuilder() @@ -363,7 +363,7 @@ public void testFromProtoWithTermsQueryBitmapValueType() { // {1,2} org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); org.opensearch.protobufs.TermsQuery termsQuery = org.opensearch.protobufs.TermsQuery.newBuilder() @@ -385,7 +385,7 @@ public void testFromProtoWithTermsQueryNullValueType() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("test_value").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); org.opensearch.protobufs.TermsQuery termsQuery = org.opensearch.protobufs.TermsQuery.newBuilder() @@ -403,7 +403,7 @@ public void testFromProtoWithTermsQueryUnspecifiedValueType() { org.opensearch.protobufs.FieldValue fv = org.opensearch.protobufs.FieldValue.newBuilder().setString("test_value").build(); org.opensearch.protobufs.FieldValueArray fva = org.opensearch.protobufs.FieldValueArray.newBuilder().addFieldValueArray(fv).build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); org.opensearch.protobufs.TermsQuery termsQuery = org.opensearch.protobufs.TermsQuery.newBuilder() @@ -426,7 +426,7 @@ public void testFromProtoWithTermsQueryBitmapInvalidMultipleValues() { .addFieldValueArray(fv2) .build(); org.opensearch.protobufs.TermsQueryField termsQueryField = org.opensearch.protobufs.TermsQueryField.newBuilder() - .setFieldValueArray(fva) + .setValue(fva) .build(); assertThrows( @@ -438,4 +438,5 @@ public void testFromProtoWithTermsQueryBitmapInvalidMultipleValues() { ) ); } + } diff --git a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/search/SearchHitProtoUtilsTests.java b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/search/SearchHitProtoUtilsTests.java index 3ebb27445ab5a..89aa185172c0d 100644 --- a/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/search/SearchHitProtoUtilsTests.java +++ b/modules/transport-grpc/src/test/java/org/opensearch/transport/grpc/proto/response/search/SearchHitProtoUtilsTests.java @@ -520,4 +520,26 @@ public void testToProtoWithBytesArrayOffsetConditionCoverage() throws IOExceptio byte[] expectedBytes = jsonContent.getBytes(StandardCharsets.UTF_8); assertArrayEquals("Source bytes should match JSON content", expectedBytes, hit.getXSource().toByteArray()); } + + public void testToProtoWithMatchedQueriesWithoutScores() throws IOException { + SearchHit searchHit = new SearchHit(1); + searchHit.matchedQueries(new String[] { "filter1", "filter2" }); + + HitsMetadataHitsInner hit = SearchHitProtoUtils.toProto(searchHit); + + assertNotNull("Hit should not be null", hit); + assertTrue("matched_queries_2 should be set", hit.hasMatchedQueries2()); + assertTrue("Should use names (StringArray)", hit.getMatchedQueries2().hasNames()); + assertFalse("Should not use scores (DoubleMap)", hit.getMatchedQueries2().hasScores()); + assertEquals("Should have 2 matched query names", 2, hit.getMatchedQueries2().getNames().getStringArrayCount()); + } + + public void testToProtoWithNoMatchedQueries() throws IOException { + SearchHit searchHit = new SearchHit(1); + + HitsMetadataHitsInner hit = SearchHitProtoUtils.toProto(searchHit); + + assertNotNull("Hit should not be null", hit); + assertFalse("matched_queries_2 should not be set", hit.hasMatchedQueries2()); + } }