@java.lang.Override
  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(displayName_)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, displayName_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, description_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(productCategory_)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 4, productCategory_);
    }
    for (int i = 0; i < productLabels_.size(); i++) {
      output.writeMessage(5, productLabels_.get(i));
    }
    getUnknownFields().writeTo(output);
  }
<pre>
Key-value pairs that can be attached to a product. At query time,
constraints can be specified based on the product_labels.

Note that integer values can be provided as strings, e.g. "1199". Only
strings with integer values can match a range-based restriction which is
to be supported soon.

Multiple values can be assigned to the same key. One product may have up to
500 product_labels.

Notice that the total number of distinct product_labels over all products
in one ProductSet cannot exceed 1M, otherwise the product search pipeline
will refuse to work for that ProductSet.
</pre>

<code>repeated .google.cloud.vision.v1p4beta1.Product.KeyValue product_labels = 5;</code>
java-vision/proto-google-cloud-vision-v1p4beta1/src/main/java/com/google/cloud/vision/v1p4beta1/Product.java