1// Copyright 2021 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.cloud.retail.v2; 18 19import "google/api/field_behavior.proto"; 20import "google/api/resource.proto"; 21import "google/cloud/retail/v2/common.proto"; 22import "google/cloud/retail/v2/promotion.proto"; 23import "google/protobuf/duration.proto"; 24import "google/protobuf/field_mask.proto"; 25import "google/protobuf/timestamp.proto"; 26import "google/protobuf/wrappers.proto"; 27 28option csharp_namespace = "Google.Cloud.Retail.V2"; 29option go_package = "cloud.google.com/go/retail/apiv2/retailpb;retailpb"; 30option java_multiple_files = true; 31option java_outer_classname = "ProductProto"; 32option java_package = "com.google.cloud.retail.v2"; 33option objc_class_prefix = "RETAIL"; 34option php_namespace = "Google\\Cloud\\Retail\\V2"; 35option ruby_package = "Google::Cloud::Retail::V2"; 36option (google.api.resource_definition) = { 37 type: "retail.googleapis.com/Branch" 38 pattern: "projects/{project}/locations/{location}/catalogs/{catalog}/branches/{branch}" 39}; 40 41// Product captures all metadata information of items to be recommended or 42// searched. 43message Product { 44 option (google.api.resource) = { 45 type: "retail.googleapis.com/Product" 46 pattern: "projects/{project}/locations/{location}/catalogs/{catalog}/branches/{branch}/products/{product}" 47 }; 48 49 // The type of this product. 50 enum Type { 51 // Default value. Default to 52 // [Catalog.product_level_config.ingestion_product_type][google.cloud.retail.v2.ProductLevelConfig.ingestion_product_type] 53 // if unset. 54 TYPE_UNSPECIFIED = 0; 55 56 // The primary type. 57 // 58 // As the primary unit for predicting, indexing and search serving, a 59 // [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 60 // [Product][google.cloud.retail.v2.Product] is grouped with multiple 61 // [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT] 62 // [Product][google.cloud.retail.v2.Product]s. 63 PRIMARY = 1; 64 65 // The variant type. 66 // 67 // [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT] 68 // [Product][google.cloud.retail.v2.Product]s usually share some common 69 // attributes on the same 70 // [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 71 // [Product][google.cloud.retail.v2.Product]s, but they have variant 72 // attributes like different colors, sizes and prices, etc. 73 VARIANT = 2; 74 75 // The collection type. Collection products are bundled 76 // [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 77 // [Product][google.cloud.retail.v2.Product]s or 78 // [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT] 79 // [Product][google.cloud.retail.v2.Product]s that are sold together, such 80 // as a jewelry set with necklaces, earrings and rings, etc. 81 COLLECTION = 3; 82 } 83 84 // Product availability. If this field is unspecified, the product is 85 // assumed to be in stock. 86 enum Availability { 87 // Default product availability. Default to 88 // [Availability.IN_STOCK][google.cloud.retail.v2.Product.Availability.IN_STOCK] 89 // if unset. 90 AVAILABILITY_UNSPECIFIED = 0; 91 92 // Product in stock. 93 IN_STOCK = 1; 94 95 // Product out of stock. 96 OUT_OF_STOCK = 2; 97 98 // Product that is in pre-order state. 99 PREORDER = 3; 100 101 // Product that is back-ordered (i.e. temporarily out of stock). 102 BACKORDER = 4; 103 } 104 105 oneof expiration { 106 // The timestamp when this product becomes unavailable for 107 // [SearchService.Search][google.cloud.retail.v2.SearchService.Search]. Note 108 // that this is only applicable to 109 // [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] and 110 // [Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION], and 111 // ignored for [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT]. 112 // In general, we suggest the users to delete the stale products explicitly, 113 // instead of using this field to determine staleness. 114 // 115 // If it is set, the [Product][google.cloud.retail.v2.Product] is not 116 // available for 117 // [SearchService.Search][google.cloud.retail.v2.SearchService.Search] after 118 // [expire_time][google.cloud.retail.v2.Product.expire_time]. However, the 119 // product can still be retrieved by 120 // [ProductService.GetProduct][google.cloud.retail.v2.ProductService.GetProduct] 121 // and 122 // [ProductService.ListProducts][google.cloud.retail.v2.ProductService.ListProducts]. 123 // 124 // [expire_time][google.cloud.retail.v2.Product.expire_time] must be later 125 // than [available_time][google.cloud.retail.v2.Product.available_time] and 126 // [publish_time][google.cloud.retail.v2.Product.publish_time], otherwise an 127 // INVALID_ARGUMENT error is thrown. 128 // 129 // Corresponding properties: Google Merchant Center property 130 // [expiration_date](https://support.google.com/merchants/answer/6324499). 131 google.protobuf.Timestamp expire_time = 16; 132 133 // Input only. The TTL (time to live) of the product. Note that this is only 134 // applicable to [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 135 // and [Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION], 136 // and ignored for 137 // [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT]. In general, 138 // we suggest the users to delete the stale products explicitly, instead of 139 // using this field to determine staleness. 140 // 141 // If it is set, it must be a non-negative value, and 142 // [expire_time][google.cloud.retail.v2.Product.expire_time] is set as 143 // current timestamp plus [ttl][google.cloud.retail.v2.Product.ttl]. The 144 // derived [expire_time][google.cloud.retail.v2.Product.expire_time] is 145 // returned in the output and [ttl][google.cloud.retail.v2.Product.ttl] is 146 // left blank when retrieving the [Product][google.cloud.retail.v2.Product]. 147 // 148 // If it is set, the product is not available for 149 // [SearchService.Search][google.cloud.retail.v2.SearchService.Search] after 150 // current timestamp plus [ttl][google.cloud.retail.v2.Product.ttl]. 151 // However, the product can still be retrieved by 152 // [ProductService.GetProduct][google.cloud.retail.v2.ProductService.GetProduct] 153 // and 154 // [ProductService.ListProducts][google.cloud.retail.v2.ProductService.ListProducts]. 155 google.protobuf.Duration ttl = 17 156 [(google.api.field_behavior) = INPUT_ONLY]; 157 } 158 159 // Immutable. Full resource name of the product, such as 160 // `projects/*/locations/global/catalogs/default_catalog/branches/default_branch/products/product_id`. 161 string name = 1 [(google.api.field_behavior) = IMMUTABLE]; 162 163 // Immutable. [Product][google.cloud.retail.v2.Product] identifier, which is 164 // the final component of [name][google.cloud.retail.v2.Product.name]. For 165 // example, this field is "id_1", if 166 // [name][google.cloud.retail.v2.Product.name] is 167 // `projects/*/locations/global/catalogs/default_catalog/branches/default_branch/products/id_1`. 168 // 169 // This field must be a UTF-8 encoded string with a length limit of 128 170 // characters. Otherwise, an INVALID_ARGUMENT error is returned. 171 // 172 // Corresponding properties: Google Merchant Center property 173 // [id](https://support.google.com/merchants/answer/6324405). Schema.org 174 // property [Product.sku](https://schema.org/sku). 175 string id = 2 [(google.api.field_behavior) = IMMUTABLE]; 176 177 // Immutable. The type of the product. Default to 178 // [Catalog.product_level_config.ingestion_product_type][google.cloud.retail.v2.ProductLevelConfig.ingestion_product_type] 179 // if unset. 180 Type type = 3 [(google.api.field_behavior) = IMMUTABLE]; 181 182 // Variant group identifier. Must be an 183 // [id][google.cloud.retail.v2.Product.id], with the same parent branch with 184 // this product. Otherwise, an error is thrown. 185 // 186 // For [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 187 // [Product][google.cloud.retail.v2.Product]s, this field can only be empty or 188 // set to the same value as [id][google.cloud.retail.v2.Product.id]. 189 // 190 // For VARIANT [Product][google.cloud.retail.v2.Product]s, this field cannot 191 // be empty. A maximum of 2,000 products are allowed to share the same 192 // [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 193 // [Product][google.cloud.retail.v2.Product]. Otherwise, an INVALID_ARGUMENT 194 // error is returned. 195 // 196 // Corresponding properties: Google Merchant Center property 197 // [item_group_id](https://support.google.com/merchants/answer/6324507). 198 // Schema.org property 199 // [Product.inProductGroupWithID](https://schema.org/inProductGroupWithID). 200 string primary_product_id = 4; 201 202 // The [id][google.cloud.retail.v2.Product.id] of the collection members when 203 // [type][google.cloud.retail.v2.Product.type] is 204 // [Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION]. 205 // 206 // Non-existent product ids are allowed. 207 // The [type][google.cloud.retail.v2.Product.type] of the members must be 208 // either [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] or 209 // [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT] otherwise an 210 // INVALID_ARGUMENT error is thrown. Should not set it for other types. A 211 // maximum of 1000 values are allowed. Otherwise, an INVALID_ARGUMENT error is 212 // return. 213 repeated string collection_member_ids = 5; 214 215 // The Global Trade Item Number (GTIN) of the product. 216 // 217 // This field must be a UTF-8 encoded string with a length limit of 128 218 // characters. Otherwise, an INVALID_ARGUMENT error is returned. 219 // 220 // This field must be a Unigram. Otherwise, an INVALID_ARGUMENT error is 221 // returned. 222 // 223 // Corresponding properties: Google Merchant Center property 224 // [gtin](https://support.google.com/merchants/answer/6324461). 225 // Schema.org property 226 // [Product.isbn](https://schema.org/isbn), 227 // [Product.gtin8](https://schema.org/gtin8), 228 // [Product.gtin12](https://schema.org/gtin12), 229 // [Product.gtin13](https://schema.org/gtin13), or 230 // [Product.gtin14](https://schema.org/gtin14). 231 // 232 // If the value is not a valid GTIN, an INVALID_ARGUMENT error is returned. 233 string gtin = 6; 234 235 // Product categories. This field is repeated for supporting one product 236 // belonging to several parallel categories. Strongly recommended using the 237 // full path for better search / recommendation quality. 238 // 239 // 240 // To represent full path of category, use '>' sign to separate different 241 // hierarchies. If '>' is part of the category name, replace it with 242 // other character(s). 243 // 244 // For example, if a shoes product belongs to both 245 // ["Shoes & Accessories" -> "Shoes"] and 246 // ["Sports & Fitness" -> "Athletic Clothing" -> "Shoes"], it could be 247 // represented as: 248 // 249 // "categories": [ 250 // "Shoes & Accessories > Shoes", 251 // "Sports & Fitness > Athletic Clothing > Shoes" 252 // ] 253 // 254 // Must be set for [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 255 // [Product][google.cloud.retail.v2.Product] otherwise an INVALID_ARGUMENT 256 // error is returned. 257 // 258 // At most 250 values are allowed per 259 // [Product][google.cloud.retail.v2.Product]. Empty values are not allowed. 260 // Each value must be a UTF-8 encoded string with a length limit of 5,000 261 // characters. Otherwise, an INVALID_ARGUMENT error is returned. 262 // 263 // Corresponding properties: Google Merchant Center property 264 // [google_product_category][mc_google_product_category]. Schema.org property 265 // [Product.category] (https://schema.org/category). 266 // 267 // [mc_google_product_category]: 268 // https://support.google.com/merchants/answer/6324436 269 repeated string categories = 7; 270 271 // Required. Product title. 272 // 273 // This field must be a UTF-8 encoded string with a length limit of 1,000 274 // characters. Otherwise, an INVALID_ARGUMENT error is returned. 275 // 276 // Corresponding properties: Google Merchant Center property 277 // [title](https://support.google.com/merchants/answer/6324415). Schema.org 278 // property [Product.name](https://schema.org/name). 279 string title = 8 [(google.api.field_behavior) = REQUIRED]; 280 281 // The brands of the product. 282 // 283 // A maximum of 30 brands are allowed. Each brand must be a UTF-8 encoded 284 // string with a length limit of 1,000 characters. Otherwise, an 285 // INVALID_ARGUMENT error is returned. 286 // 287 // Corresponding properties: Google Merchant Center property 288 // [brand](https://support.google.com/merchants/answer/6324351). Schema.org 289 // property [Product.brand](https://schema.org/brand). 290 repeated string brands = 9; 291 292 // Product description. 293 // 294 // This field must be a UTF-8 encoded string with a length limit of 5,000 295 // characters. Otherwise, an INVALID_ARGUMENT error is returned. 296 // 297 // Corresponding properties: Google Merchant Center property 298 // [description](https://support.google.com/merchants/answer/6324468). 299 // Schema.org property [Product.description](https://schema.org/description). 300 string description = 10; 301 302 // Language of the title/description and other string attributes. Use language 303 // tags defined by [BCP 47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). 304 // 305 // For product prediction, this field is ignored and the model automatically 306 // detects the text language. The [Product][google.cloud.retail.v2.Product] 307 // can include text in different languages, but duplicating 308 // [Product][google.cloud.retail.v2.Product]s to provide text in multiple 309 // languages can result in degraded model performance. 310 // 311 // For product search this field is in use. It defaults to "en-US" if unset. 312 string language_code = 11; 313 314 // Highly encouraged. Extra product attributes to be included. For example, 315 // for products, this could include the store name, vendor, style, color, etc. 316 // These are very strong signals for recommendation model, thus we highly 317 // recommend providing the attributes here. 318 // 319 // Features that can take on one of a limited number of possible values. Two 320 // types of features can be set are: 321 // 322 // Textual features. some examples would be the brand/maker of a product, or 323 // country of a customer. Numerical features. Some examples would be the 324 // height/weight of a product, or age of a customer. 325 // 326 // For example: `{ "vendor": {"text": ["vendor123", "vendor456"]}, 327 // "lengths_cm": {"numbers":[2.3, 15.4]}, "heights_cm": {"numbers":[8.1, 6.4]} 328 // }`. 329 // 330 // This field needs to pass all below criteria, otherwise an INVALID_ARGUMENT 331 // error is returned: 332 // 333 // * Max entries count: 200. 334 // * The key must be a UTF-8 encoded string with a length limit of 128 335 // characters. 336 // * For indexable attribute, the key must match the pattern: 337 // `[a-zA-Z0-9][a-zA-Z0-9_]*`. For example, `key0LikeThis` or 338 // `KEY_1_LIKE_THIS`. 339 // * For text attributes, at most 400 values are allowed. Empty values are not 340 // allowed. Each value must be a non-empty UTF-8 encoded string with a 341 // length limit of 256 characters. 342 // * For number attributes, at most 400 values are allowed. 343 map<string, CustomAttribute> attributes = 12; 344 345 // Custom tags associated with the product. 346 // 347 // At most 250 values are allowed per 348 // [Product][google.cloud.retail.v2.Product]. This value must be a UTF-8 349 // encoded string with a length limit of 1,000 characters. Otherwise, an 350 // INVALID_ARGUMENT error is returned. 351 // 352 // This tag can be used for filtering recommendation results by passing the 353 // tag as part of the 354 // [PredictRequest.filter][google.cloud.retail.v2.PredictRequest.filter]. 355 // 356 // Corresponding properties: Google Merchant Center property 357 // [custom_label_0–4](https://support.google.com/merchants/answer/6324473). 358 repeated string tags = 13; 359 360 // Product price and cost information. 361 // 362 // Corresponding properties: Google Merchant Center property 363 // [price](https://support.google.com/merchants/answer/6324371). 364 PriceInfo price_info = 14; 365 366 // The rating of this product. 367 Rating rating = 15; 368 369 // The timestamp when this [Product][google.cloud.retail.v2.Product] becomes 370 // available for 371 // [SearchService.Search][google.cloud.retail.v2.SearchService.Search]. Note 372 // that this is only applicable to 373 // [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] and 374 // [Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION], and 375 // ignored for [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT]. 376 google.protobuf.Timestamp available_time = 18; 377 378 // The online availability of the [Product][google.cloud.retail.v2.Product]. 379 // Default to 380 // [Availability.IN_STOCK][google.cloud.retail.v2.Product.Availability.IN_STOCK]. 381 // 382 // Corresponding properties: Google Merchant Center property 383 // [availability](https://support.google.com/merchants/answer/6324448). 384 // Schema.org property [Offer.availability](https://schema.org/availability). 385 Availability availability = 19; 386 387 // The available quantity of the item. 388 google.protobuf.Int32Value available_quantity = 20; 389 390 // Fulfillment information, such as the store IDs for in-store pickup or 391 // region IDs for different shipping methods. 392 // 393 // All the elements must have distinct 394 // [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]. 395 // Otherwise, an INVALID_ARGUMENT error is returned. 396 repeated FulfillmentInfo fulfillment_info = 21; 397 398 // Canonical URL directly linking to the product detail page. 399 // 400 // It is strongly recommended to provide a valid uri for the product, 401 // otherwise the service performance could be significantly degraded. 402 // 403 // This field must be a UTF-8 encoded string with a length limit of 5,000 404 // characters. Otherwise, an INVALID_ARGUMENT error is returned. 405 // 406 // Corresponding properties: Google Merchant Center property 407 // [link](https://support.google.com/merchants/answer/6324416). Schema.org 408 // property [Offer.url](https://schema.org/url). 409 string uri = 22; 410 411 // Product images for the product. We highly recommend putting the main 412 // image first. 413 // 414 // A maximum of 300 images are allowed. 415 // 416 // Corresponding properties: Google Merchant Center property 417 // [image_link](https://support.google.com/merchants/answer/6324350). 418 // Schema.org property [Product.image](https://schema.org/image). 419 repeated Image images = 23; 420 421 // The target group associated with a given audience (e.g. male, veterans, 422 // car owners, musicians, etc.) of the product. 423 Audience audience = 24; 424 425 // The color of the product. 426 // 427 // Corresponding properties: Google Merchant Center property 428 // [color](https://support.google.com/merchants/answer/6324487). Schema.org 429 // property [Product.color](https://schema.org/color). 430 ColorInfo color_info = 25; 431 432 // The size of the product. To represent different size systems or size types, 433 // consider using this format: [[[size_system:]size_type:]size_value]. 434 // 435 // For example, in "US:MENS:M", "US" represents size system; "MENS" represents 436 // size type; "M" represents size value. In "GIRLS:27", size system is empty; 437 // "GIRLS" represents size type; "27" represents size value. In "32 inches", 438 // both size system and size type are empty, while size value is "32 inches". 439 // 440 // A maximum of 20 values are allowed per 441 // [Product][google.cloud.retail.v2.Product]. Each value must be a UTF-8 442 // encoded string with a length limit of 128 characters. Otherwise, an 443 // INVALID_ARGUMENT error is returned. 444 // 445 // Corresponding properties: Google Merchant Center property 446 // [size](https://support.google.com/merchants/answer/6324492), 447 // [size_type](https://support.google.com/merchants/answer/6324497), and 448 // [size_system](https://support.google.com/merchants/answer/6324502). 449 // Schema.org property [Product.size](https://schema.org/size). 450 repeated string sizes = 26; 451 452 // The material of the product. For example, "leather", "wooden". 453 // 454 // A maximum of 20 values are allowed. Each value must be a UTF-8 encoded 455 // string with a length limit of 200 characters. Otherwise, an 456 // INVALID_ARGUMENT error is returned. 457 // 458 // Corresponding properties: Google Merchant Center property 459 // [material](https://support.google.com/merchants/answer/6324410). Schema.org 460 // property [Product.material](https://schema.org/material). 461 repeated string materials = 27; 462 463 // The pattern or graphic print of the product. For example, "striped", "polka 464 // dot", "paisley". 465 // 466 // A maximum of 20 values are allowed per 467 // [Product][google.cloud.retail.v2.Product]. Each value must be a UTF-8 468 // encoded string with a length limit of 128 characters. Otherwise, an 469 // INVALID_ARGUMENT error is returned. 470 // 471 // Corresponding properties: Google Merchant Center property 472 // [pattern](https://support.google.com/merchants/answer/6324483). Schema.org 473 // property [Product.pattern](https://schema.org/pattern). 474 repeated string patterns = 28; 475 476 // The condition of the product. Strongly encouraged to use the standard 477 // values: "new", "refurbished", "used". 478 // 479 // A maximum of 1 value is allowed per 480 // [Product][google.cloud.retail.v2.Product]. Each value must be a UTF-8 481 // encoded string with a length limit of 128 characters. Otherwise, an 482 // INVALID_ARGUMENT error is returned. 483 // 484 // Corresponding properties: Google Merchant Center property 485 // [condition](https://support.google.com/merchants/answer/6324469). 486 // Schema.org property 487 // [Offer.itemCondition](https://schema.org/itemCondition). 488 repeated string conditions = 29; 489 490 // The promotions applied to the product. A maximum of 10 values are allowed 491 // per [Product][google.cloud.retail.v2.Product]. Only 492 // [Promotion.promotion_id][google.cloud.retail.v2.Promotion.promotion_id] 493 // will be used, other fields will be ignored if set. 494 repeated Promotion promotions = 34; 495 496 // The timestamp when the product is published by the retailer for the first 497 // time, which indicates the freshness of the products. Note that this field 498 // is different from 499 // [available_time][google.cloud.retail.v2.Product.available_time], given it 500 // purely describes product freshness regardless of when it is available on 501 // search and recommendation. 502 google.protobuf.Timestamp publish_time = 33; 503 504 // Indicates which fields in the [Product][google.cloud.retail.v2.Product]s 505 // are returned in [SearchResponse][google.cloud.retail.v2.SearchResponse]. 506 // 507 // Supported fields for all [type][google.cloud.retail.v2.Product.type]s: 508 // 509 // * [audience][google.cloud.retail.v2.Product.audience] 510 // * [availability][google.cloud.retail.v2.Product.availability] 511 // * [brands][google.cloud.retail.v2.Product.brands] 512 // * [color_info][google.cloud.retail.v2.Product.color_info] 513 // * [conditions][google.cloud.retail.v2.Product.conditions] 514 // * [gtin][google.cloud.retail.v2.Product.gtin] 515 // * [materials][google.cloud.retail.v2.Product.materials] 516 // * [name][google.cloud.retail.v2.Product.name] 517 // * [patterns][google.cloud.retail.v2.Product.patterns] 518 // * [price_info][google.cloud.retail.v2.Product.price_info] 519 // * [rating][google.cloud.retail.v2.Product.rating] 520 // * [sizes][google.cloud.retail.v2.Product.sizes] 521 // * [title][google.cloud.retail.v2.Product.title] 522 // * [uri][google.cloud.retail.v2.Product.uri] 523 // 524 // Supported fields only for 525 // [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] and 526 // [Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION]: 527 // 528 // * [categories][google.cloud.retail.v2.Product.categories] 529 // * [description][google.cloud.retail.v2.Product.description] 530 // * [images][google.cloud.retail.v2.Product.images] 531 // 532 // Supported fields only for 533 // [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT]: 534 // 535 // * Only the first image in [images][google.cloud.retail.v2.Product.images] 536 // 537 // To mark [attributes][google.cloud.retail.v2.Product.attributes] as 538 // retrievable, include paths of the form "attributes.key" where "key" is the 539 // key of a custom attribute, as specified in 540 // [attributes][google.cloud.retail.v2.Product.attributes]. 541 // 542 // For [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] and 543 // [Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION], the 544 // following fields are always returned in 545 // [SearchResponse][google.cloud.retail.v2.SearchResponse] by default: 546 // 547 // * [name][google.cloud.retail.v2.Product.name] 548 // 549 // For [Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT], the 550 // following fields are always returned in by default: 551 // 552 // * [name][google.cloud.retail.v2.Product.name] 553 // * [color_info][google.cloud.retail.v2.Product.color_info] 554 // 555 // The maximum number of paths is 30. Otherwise, an INVALID_ARGUMENT error is 556 // returned. 557 // 558 // Note: Returning more fields in 559 // [SearchResponse][google.cloud.retail.v2.SearchResponse] can increase 560 // response payload size and serving latency. 561 // 562 // This field is deprecated. Use the retrievable site-wide control instead. 563 google.protobuf.FieldMask retrievable_fields = 30 [deprecated = true]; 564 565 // Output only. Product variants grouped together on primary product which 566 // share similar product attributes. It's automatically grouped by 567 // [primary_product_id][google.cloud.retail.v2.Product.primary_product_id] for 568 // all the product variants. Only populated for 569 // [Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 570 // [Product][google.cloud.retail.v2.Product]s. 571 // 572 // Note: This field is OUTPUT_ONLY for 573 // [ProductService.GetProduct][google.cloud.retail.v2.ProductService.GetProduct]. 574 // Do not set this field in API requests. 575 repeated Product variants = 31 [(google.api.field_behavior) = OUTPUT_ONLY]; 576 577 // Output only. A list of local inventories specific to different places. 578 // 579 // This field can be managed by 580 // [ProductService.AddLocalInventories][google.cloud.retail.v2.ProductService.AddLocalInventories] 581 // and 582 // [ProductService.RemoveLocalInventories][google.cloud.retail.v2.ProductService.RemoveLocalInventories] 583 // APIs if fine-grained, high-volume updates are necessary. 584 repeated LocalInventory local_inventories = 35 585 [(google.api.field_behavior) = OUTPUT_ONLY]; 586} 587