1*d5c09012SAndroid Build Coastguard Worker// Copyright 2021 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.cloud.retail.v2beta; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 21*d5c09012SAndroid Build Coastguard Worker 22*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Retail.V2Beta"; 23*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/retail/apiv2beta/retailpb;retailpb"; 24*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 25*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "CommonProto"; 26*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.cloud.retail.v2beta"; 27*d5c09012SAndroid Build Coastguard Workeroption objc_class_prefix = "RETAIL"; 28*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\Retail\\V2beta"; 29*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::Retail::V2beta"; 30*d5c09012SAndroid Build Coastguard Worker 31*d5c09012SAndroid Build Coastguard Worker// At which level we offer configuration for attributes. 32*d5c09012SAndroid Build Coastguard Workerenum AttributeConfigLevel { 33*d5c09012SAndroid Build Coastguard Worker // Value used when unset. In this case, server behavior defaults to 34*d5c09012SAndroid Build Coastguard Worker // [CATALOG_LEVEL_ATTRIBUTE_CONFIG][google.cloud.retail.v2beta.AttributeConfigLevel.CATALOG_LEVEL_ATTRIBUTE_CONFIG]. 35*d5c09012SAndroid Build Coastguard Worker ATTRIBUTE_CONFIG_LEVEL_UNSPECIFIED = 0; 36*d5c09012SAndroid Build Coastguard Worker 37*d5c09012SAndroid Build Coastguard Worker // At this level, we honor the attribute configurations set in 38*d5c09012SAndroid Build Coastguard Worker // [Product.attributes][google.cloud.retail.v2beta.Product.attributes]. 39*d5c09012SAndroid Build Coastguard Worker PRODUCT_LEVEL_ATTRIBUTE_CONFIG = 1; 40*d5c09012SAndroid Build Coastguard Worker 41*d5c09012SAndroid Build Coastguard Worker // At this level, we honor the attribute configurations set in 42*d5c09012SAndroid Build Coastguard Worker // [CatalogConfig.attribute_configs][]. 43*d5c09012SAndroid Build Coastguard Worker CATALOG_LEVEL_ATTRIBUTE_CONFIG = 2; 44*d5c09012SAndroid Build Coastguard Worker} 45*d5c09012SAndroid Build Coastguard Worker 46*d5c09012SAndroid Build Coastguard Worker// The type of solution. 47*d5c09012SAndroid Build Coastguard Workerenum SolutionType { 48*d5c09012SAndroid Build Coastguard Worker // Default value. 49*d5c09012SAndroid Build Coastguard Worker SOLUTION_TYPE_UNSPECIFIED = 0; 50*d5c09012SAndroid Build Coastguard Worker 51*d5c09012SAndroid Build Coastguard Worker // Used for Recommendations AI. 52*d5c09012SAndroid Build Coastguard Worker SOLUTION_TYPE_RECOMMENDATION = 1; 53*d5c09012SAndroid Build Coastguard Worker 54*d5c09012SAndroid Build Coastguard Worker // Used for Retail Search. 55*d5c09012SAndroid Build Coastguard Worker SOLUTION_TYPE_SEARCH = 2; 56*d5c09012SAndroid Build Coastguard Worker} 57*d5c09012SAndroid Build Coastguard Worker 58*d5c09012SAndroid Build Coastguard Worker// If filtering for recommendations is enabled. 59*d5c09012SAndroid Build Coastguard Workerenum RecommendationsFilteringOption { 60*d5c09012SAndroid Build Coastguard Worker // Value used when unset. 61*d5c09012SAndroid Build Coastguard Worker // In this case, server behavior defaults to 62*d5c09012SAndroid Build Coastguard Worker // [RECOMMENDATIONS_FILTERING_DISABLED][google.cloud.retail.v2beta.RecommendationsFilteringOption.RECOMMENDATIONS_FILTERING_DISABLED]. 63*d5c09012SAndroid Build Coastguard Worker RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED = 0; 64*d5c09012SAndroid Build Coastguard Worker 65*d5c09012SAndroid Build Coastguard Worker // Recommendation filtering is disabled. 66*d5c09012SAndroid Build Coastguard Worker RECOMMENDATIONS_FILTERING_DISABLED = 1; 67*d5c09012SAndroid Build Coastguard Worker 68*d5c09012SAndroid Build Coastguard Worker // Recommendation filtering is enabled. 69*d5c09012SAndroid Build Coastguard Worker RECOMMENDATIONS_FILTERING_ENABLED = 3; 70*d5c09012SAndroid Build Coastguard Worker} 71*d5c09012SAndroid Build Coastguard Worker 72*d5c09012SAndroid Build Coastguard Worker// The use case of Cloud Retail Search. 73*d5c09012SAndroid Build Coastguard Workerenum SearchSolutionUseCase { 74*d5c09012SAndroid Build Coastguard Worker // The value when it's unspecified. In this case, server behavior defaults to 75*d5c09012SAndroid Build Coastguard Worker // [SEARCH_SOLUTION_USE_CASE_SEARCH][google.cloud.retail.v2beta.SearchSolutionUseCase.SEARCH_SOLUTION_USE_CASE_SEARCH]. 76*d5c09012SAndroid Build Coastguard Worker SEARCH_SOLUTION_USE_CASE_UNSPECIFIED = 0; 77*d5c09012SAndroid Build Coastguard Worker 78*d5c09012SAndroid Build Coastguard Worker // Search use case. Expects the traffic has a non-empty 79*d5c09012SAndroid Build Coastguard Worker // [query][google.cloud.retail.v2beta.SearchRequest.query]. 80*d5c09012SAndroid Build Coastguard Worker SEARCH_SOLUTION_USE_CASE_SEARCH = 1; 81*d5c09012SAndroid Build Coastguard Worker 82*d5c09012SAndroid Build Coastguard Worker // Browse use case. Expects the traffic has an empty 83*d5c09012SAndroid Build Coastguard Worker // [query][google.cloud.retail.v2beta.SearchRequest.query]. 84*d5c09012SAndroid Build Coastguard Worker SEARCH_SOLUTION_USE_CASE_BROWSE = 2; 85*d5c09012SAndroid Build Coastguard Worker} 86*d5c09012SAndroid Build Coastguard Worker 87*d5c09012SAndroid Build Coastguard Worker// Metadata that is used to define a condition that triggers an action. 88*d5c09012SAndroid Build Coastguard Worker// A valid condition must specify at least one of 'query_terms' or 89*d5c09012SAndroid Build Coastguard Worker// 'products_filter'. If multiple fields are specified, the condition is met if 90*d5c09012SAndroid Build Coastguard Worker// all the fields are satisfied e.g. if a set of query terms and product_filter 91*d5c09012SAndroid Build Coastguard Worker// are set, then only items matching the product_filter for requests with a 92*d5c09012SAndroid Build Coastguard Worker// query matching the query terms wil get boosted. 93*d5c09012SAndroid Build Coastguard Workermessage Condition { 94*d5c09012SAndroid Build Coastguard Worker // Query terms that we want to match on. 95*d5c09012SAndroid Build Coastguard Worker message QueryTerm { 96*d5c09012SAndroid Build Coastguard Worker // The value of the term to match on. 97*d5c09012SAndroid Build Coastguard Worker // Value cannot be empty. 98*d5c09012SAndroid Build Coastguard Worker // Value can have at most 3 terms if specified as a partial match. Each 99*d5c09012SAndroid Build Coastguard Worker // space separated string is considered as one term. 100*d5c09012SAndroid Build Coastguard Worker // For example, "a b c" is 3 terms and allowed, but " a b c d" is 4 terms 101*d5c09012SAndroid Build Coastguard Worker // and not allowed for a partial match. 102*d5c09012SAndroid Build Coastguard Worker string value = 1; 103*d5c09012SAndroid Build Coastguard Worker 104*d5c09012SAndroid Build Coastguard Worker // Whether this is supposed to be a full or partial match. 105*d5c09012SAndroid Build Coastguard Worker bool full_match = 2; 106*d5c09012SAndroid Build Coastguard Worker } 107*d5c09012SAndroid Build Coastguard Worker 108*d5c09012SAndroid Build Coastguard Worker // Used for time-dependent conditions. 109*d5c09012SAndroid Build Coastguard Worker // Example: Want to have rule applied for week long sale. 110*d5c09012SAndroid Build Coastguard Worker message TimeRange { 111*d5c09012SAndroid Build Coastguard Worker // Start of time range. Range is inclusive. 112*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp start_time = 1; 113*d5c09012SAndroid Build Coastguard Worker 114*d5c09012SAndroid Build Coastguard Worker // End of time range. Range is inclusive. 115*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp end_time = 2; 116*d5c09012SAndroid Build Coastguard Worker } 117*d5c09012SAndroid Build Coastguard Worker 118*d5c09012SAndroid Build Coastguard Worker // A list (up to 10 entries) of terms to match the query on. If not 119*d5c09012SAndroid Build Coastguard Worker // specified, match all queries. 120*d5c09012SAndroid Build Coastguard Worker // If many query terms are specified, the condition 121*d5c09012SAndroid Build Coastguard Worker // is matched if any of the terms is a match (i.e. using the OR operator). 122*d5c09012SAndroid Build Coastguard Worker repeated QueryTerm query_terms = 1; 123*d5c09012SAndroid Build Coastguard Worker 124*d5c09012SAndroid Build Coastguard Worker // Range of time(s) specifying when Condition is active. 125*d5c09012SAndroid Build Coastguard Worker // Condition true if any time range matches. 126*d5c09012SAndroid Build Coastguard Worker repeated TimeRange active_time_range = 3; 127*d5c09012SAndroid Build Coastguard Worker} 128*d5c09012SAndroid Build Coastguard Worker 129*d5c09012SAndroid Build Coastguard Worker// A rule is a condition-action pair 130*d5c09012SAndroid Build Coastguard Worker// 131*d5c09012SAndroid Build Coastguard Worker// * A condition defines when a rule is to be triggered. 132*d5c09012SAndroid Build Coastguard Worker// * An action specifies what occurs on that trigger. 133*d5c09012SAndroid Build Coastguard Worker// Currently rules only work for [controls][google.cloud.retail.v2beta.Control] 134*d5c09012SAndroid Build Coastguard Worker// with 135*d5c09012SAndroid Build Coastguard Worker// [SOLUTION_TYPE_SEARCH][google.cloud.retail.v2beta.SolutionType.SOLUTION_TYPE_SEARCH]. 136*d5c09012SAndroid Build Coastguard Workermessage Rule { 137*d5c09012SAndroid Build Coastguard Worker // A boost action to apply to results matching condition specified above. 138*d5c09012SAndroid Build Coastguard Worker message BoostAction { 139*d5c09012SAndroid Build Coastguard Worker // Strength of the condition boost, which must be in [-1, 1]. Negative 140*d5c09012SAndroid Build Coastguard Worker // boost means demotion. Default is 0.0. 141*d5c09012SAndroid Build Coastguard Worker // 142*d5c09012SAndroid Build Coastguard Worker // Setting to 1.0 gives the item a big promotion. However, it does not 143*d5c09012SAndroid Build Coastguard Worker // necessarily mean that the boosted item will be the top result at all 144*d5c09012SAndroid Build Coastguard Worker // times, nor that other items will be excluded. Results could still be 145*d5c09012SAndroid Build Coastguard Worker // shown even when none of them matches the condition. And results that 146*d5c09012SAndroid Build Coastguard Worker // are significantly more relevant to the search query can still trump 147*d5c09012SAndroid Build Coastguard Worker // your heavily favored but irrelevant items. 148*d5c09012SAndroid Build Coastguard Worker // 149*d5c09012SAndroid Build Coastguard Worker // Setting to -1.0 gives the item a big demotion. However, results that 150*d5c09012SAndroid Build Coastguard Worker // are deeply relevant might still be shown. The item will have an 151*d5c09012SAndroid Build Coastguard Worker // upstream battle to get a fairly high ranking, but it is not blocked out 152*d5c09012SAndroid Build Coastguard Worker // completely. 153*d5c09012SAndroid Build Coastguard Worker // 154*d5c09012SAndroid Build Coastguard Worker // Setting to 0.0 means no boost applied. The boosting condition is 155*d5c09012SAndroid Build Coastguard Worker // ignored. 156*d5c09012SAndroid Build Coastguard Worker float boost = 1; 157*d5c09012SAndroid Build Coastguard Worker 158*d5c09012SAndroid Build Coastguard Worker // The filter can have a max size of 5000 characters. 159*d5c09012SAndroid Build Coastguard Worker // An expression which specifies which products to apply an action to. 160*d5c09012SAndroid Build Coastguard Worker // The syntax and supported fields are the same as a filter expression. See 161*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.filter][google.cloud.retail.v2beta.SearchRequest.filter] 162*d5c09012SAndroid Build Coastguard Worker // for detail syntax and limitations. 163*d5c09012SAndroid Build Coastguard Worker // 164*d5c09012SAndroid Build Coastguard Worker // Examples: 165*d5c09012SAndroid Build Coastguard Worker // 166*d5c09012SAndroid Build Coastguard Worker // * To boost products with product ID "product_1" or "product_2", and 167*d5c09012SAndroid Build Coastguard Worker // color 168*d5c09012SAndroid Build Coastguard Worker // "Red" or "Blue":<br> 169*d5c09012SAndroid Build Coastguard Worker // *(id: ANY("product_1", "product_2"))<br>* 170*d5c09012SAndroid Build Coastguard Worker // *AND<br>* 171*d5c09012SAndroid Build Coastguard Worker // *(colorFamilies: ANY("Red", "Blue"))<br>* 172*d5c09012SAndroid Build Coastguard Worker string products_filter = 2; 173*d5c09012SAndroid Build Coastguard Worker } 174*d5c09012SAndroid Build Coastguard Worker 175*d5c09012SAndroid Build Coastguard Worker // * Rule Condition: 176*d5c09012SAndroid Build Coastguard Worker // - No 177*d5c09012SAndroid Build Coastguard Worker // [Condition.query_terms][google.cloud.retail.v2beta.Condition.query_terms] 178*d5c09012SAndroid Build Coastguard Worker // provided is a global match. 179*d5c09012SAndroid Build Coastguard Worker // - 1 or more 180*d5c09012SAndroid Build Coastguard Worker // [Condition.query_terms][google.cloud.retail.v2beta.Condition.query_terms] 181*d5c09012SAndroid Build Coastguard Worker // provided are combined with OR operator. 182*d5c09012SAndroid Build Coastguard Worker // * Action Input: The request query and filter that are applied to the 183*d5c09012SAndroid Build Coastguard Worker // retrieved products, in addition to any filters already provided with the 184*d5c09012SAndroid Build Coastguard Worker // SearchRequest. The AND operator is used to combine the query's existing 185*d5c09012SAndroid Build Coastguard Worker // filters with the filter rule(s). NOTE: May result in 0 results when 186*d5c09012SAndroid Build Coastguard Worker // filters conflict. 187*d5c09012SAndroid Build Coastguard Worker // * Action Result: Filters the returned objects to be ONLY those that passed 188*d5c09012SAndroid Build Coastguard Worker // the filter. 189*d5c09012SAndroid Build Coastguard Worker message FilterAction { 190*d5c09012SAndroid Build Coastguard Worker // A filter to apply on the matching condition results. Supported features: 191*d5c09012SAndroid Build Coastguard Worker // 192*d5c09012SAndroid Build Coastguard Worker // * [filter][google.cloud.retail.v2beta.Rule.FilterAction.filter] must be 193*d5c09012SAndroid Build Coastguard Worker // set. 194*d5c09012SAndroid Build Coastguard Worker // * Filter syntax is identical to 195*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.filter][google.cloud.retail.v2beta.SearchRequest.filter]. 196*d5c09012SAndroid Build Coastguard Worker // See more 197*d5c09012SAndroid Build Coastguard Worker // details at the Retail Search 198*d5c09012SAndroid Build Coastguard Worker // [user guide](/retail/search/docs/filter-and-order#filter). 199*d5c09012SAndroid Build Coastguard Worker // * To filter products with product ID "product_1" or "product_2", and 200*d5c09012SAndroid Build Coastguard Worker // color 201*d5c09012SAndroid Build Coastguard Worker // "Red" or "Blue":<br> 202*d5c09012SAndroid Build Coastguard Worker // *(id: ANY("product_1", "product_2"))<br>* 203*d5c09012SAndroid Build Coastguard Worker // *AND<br>* 204*d5c09012SAndroid Build Coastguard Worker // *(colorFamilies: ANY("Red", "Blue"))<br>* 205*d5c09012SAndroid Build Coastguard Worker string filter = 1; 206*d5c09012SAndroid Build Coastguard Worker } 207*d5c09012SAndroid Build Coastguard Worker 208*d5c09012SAndroid Build Coastguard Worker // Redirects a shopper to a specific page. 209*d5c09012SAndroid Build Coastguard Worker // 210*d5c09012SAndroid Build Coastguard Worker // * Rule Condition: 211*d5c09012SAndroid Build Coastguard Worker // - Must specify 212*d5c09012SAndroid Build Coastguard Worker // [Condition.query_terms][google.cloud.retail.v2beta.Condition.query_terms]. 213*d5c09012SAndroid Build Coastguard Worker // * Action Input: Request Query 214*d5c09012SAndroid Build Coastguard Worker // * Action Result: Redirects shopper to provided uri. 215*d5c09012SAndroid Build Coastguard Worker message RedirectAction { 216*d5c09012SAndroid Build Coastguard Worker // URL must have length equal or less than 2000 characters. 217*d5c09012SAndroid Build Coastguard Worker string redirect_uri = 1; 218*d5c09012SAndroid Build Coastguard Worker } 219*d5c09012SAndroid Build Coastguard Worker 220*d5c09012SAndroid Build Coastguard Worker // Creates a set of terms that will be treated as synonyms of each other. 221*d5c09012SAndroid Build Coastguard Worker // Example: synonyms of "sneakers" and "shoes": 222*d5c09012SAndroid Build Coastguard Worker // 223*d5c09012SAndroid Build Coastguard Worker // * "sneakers" will use a synonym of "shoes". 224*d5c09012SAndroid Build Coastguard Worker // * "shoes" will use a synonym of "sneakers". 225*d5c09012SAndroid Build Coastguard Worker message TwowaySynonymsAction { 226*d5c09012SAndroid Build Coastguard Worker // Defines a set of synonyms. 227*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 synonyms. 228*d5c09012SAndroid Build Coastguard Worker // Must specify at least 2 synonyms. 229*d5c09012SAndroid Build Coastguard Worker repeated string synonyms = 1; 230*d5c09012SAndroid Build Coastguard Worker } 231*d5c09012SAndroid Build Coastguard Worker 232*d5c09012SAndroid Build Coastguard Worker // Maps a set of terms to a set of synonyms. 233*d5c09012SAndroid Build Coastguard Worker // Set of synonyms will be treated as synonyms of each query term only. 234*d5c09012SAndroid Build Coastguard Worker // `query_terms` will not be treated as synonyms of each other. 235*d5c09012SAndroid Build Coastguard Worker // Example: "sneakers" will use a synonym of "shoes". 236*d5c09012SAndroid Build Coastguard Worker // "shoes" will not use a synonym of "sneakers". 237*d5c09012SAndroid Build Coastguard Worker message OnewaySynonymsAction { 238*d5c09012SAndroid Build Coastguard Worker // Terms from the search query. 239*d5c09012SAndroid Build Coastguard Worker // Will treat synonyms as their synonyms. 240*d5c09012SAndroid Build Coastguard Worker // Not themselves synonyms of the synonyms. 241*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 terms. 242*d5c09012SAndroid Build Coastguard Worker repeated string query_terms = 3; 243*d5c09012SAndroid Build Coastguard Worker 244*d5c09012SAndroid Build Coastguard Worker // Defines a set of synonyms. 245*d5c09012SAndroid Build Coastguard Worker // Cannot contain duplicates. 246*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 synonyms. 247*d5c09012SAndroid Build Coastguard Worker repeated string synonyms = 4; 248*d5c09012SAndroid Build Coastguard Worker 249*d5c09012SAndroid Build Coastguard Worker // Will be [deprecated = true] post migration; 250*d5c09012SAndroid Build Coastguard Worker repeated string oneway_terms = 2; 251*d5c09012SAndroid Build Coastguard Worker } 252*d5c09012SAndroid Build Coastguard Worker 253*d5c09012SAndroid Build Coastguard Worker // Prevents `query_term` from being associated with specified terms during 254*d5c09012SAndroid Build Coastguard Worker // search. 255*d5c09012SAndroid Build Coastguard Worker // Example: Don't associate "gShoe" and "cheap". 256*d5c09012SAndroid Build Coastguard Worker message DoNotAssociateAction { 257*d5c09012SAndroid Build Coastguard Worker // Terms from the search query. 258*d5c09012SAndroid Build Coastguard Worker // Will not consider do_not_associate_terms for search if in search query. 259*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 terms. 260*d5c09012SAndroid Build Coastguard Worker repeated string query_terms = 2; 261*d5c09012SAndroid Build Coastguard Worker 262*d5c09012SAndroid Build Coastguard Worker // Cannot contain duplicates or the query term. 263*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 terms. 264*d5c09012SAndroid Build Coastguard Worker repeated string do_not_associate_terms = 3; 265*d5c09012SAndroid Build Coastguard Worker 266*d5c09012SAndroid Build Coastguard Worker // Will be [deprecated = true] post migration; 267*d5c09012SAndroid Build Coastguard Worker repeated string terms = 1; 268*d5c09012SAndroid Build Coastguard Worker } 269*d5c09012SAndroid Build Coastguard Worker 270*d5c09012SAndroid Build Coastguard Worker // Replaces a term in the query. Multiple replacement candidates can be 271*d5c09012SAndroid Build Coastguard Worker // specified. All `query_terms` will be replaced with the replacement term. 272*d5c09012SAndroid Build Coastguard Worker // Example: Replace "gShoe" with "google shoe". 273*d5c09012SAndroid Build Coastguard Worker message ReplacementAction { 274*d5c09012SAndroid Build Coastguard Worker // Terms from the search query. 275*d5c09012SAndroid Build Coastguard Worker // Will be replaced by replacement term. 276*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 terms. 277*d5c09012SAndroid Build Coastguard Worker repeated string query_terms = 2; 278*d5c09012SAndroid Build Coastguard Worker 279*d5c09012SAndroid Build Coastguard Worker // Term that will be used for replacement. 280*d5c09012SAndroid Build Coastguard Worker string replacement_term = 3; 281*d5c09012SAndroid Build Coastguard Worker 282*d5c09012SAndroid Build Coastguard Worker // Will be [deprecated = true] post migration; 283*d5c09012SAndroid Build Coastguard Worker string term = 1; 284*d5c09012SAndroid Build Coastguard Worker } 285*d5c09012SAndroid Build Coastguard Worker 286*d5c09012SAndroid Build Coastguard Worker // Prevents a term in the query from being used in search. 287*d5c09012SAndroid Build Coastguard Worker // Example: Don't search for "shoddy". 288*d5c09012SAndroid Build Coastguard Worker message IgnoreAction { 289*d5c09012SAndroid Build Coastguard Worker // Terms to ignore in the search query. 290*d5c09012SAndroid Build Coastguard Worker repeated string ignore_terms = 1; 291*d5c09012SAndroid Build Coastguard Worker } 292*d5c09012SAndroid Build Coastguard Worker 293*d5c09012SAndroid Build Coastguard Worker // An action must be provided. 294*d5c09012SAndroid Build Coastguard Worker oneof action { 295*d5c09012SAndroid Build Coastguard Worker // A boost action. 296*d5c09012SAndroid Build Coastguard Worker BoostAction boost_action = 2; 297*d5c09012SAndroid Build Coastguard Worker 298*d5c09012SAndroid Build Coastguard Worker // Redirects a shopper to a specific page. 299*d5c09012SAndroid Build Coastguard Worker RedirectAction redirect_action = 3; 300*d5c09012SAndroid Build Coastguard Worker 301*d5c09012SAndroid Build Coastguard Worker // Treats specific term as a synonym with a group of terms. 302*d5c09012SAndroid Build Coastguard Worker // Group of terms will not be treated as synonyms with the specific term. 303*d5c09012SAndroid Build Coastguard Worker OnewaySynonymsAction oneway_synonyms_action = 6; 304*d5c09012SAndroid Build Coastguard Worker 305*d5c09012SAndroid Build Coastguard Worker // Prevents term from being associated with other terms. 306*d5c09012SAndroid Build Coastguard Worker DoNotAssociateAction do_not_associate_action = 7; 307*d5c09012SAndroid Build Coastguard Worker 308*d5c09012SAndroid Build Coastguard Worker // Replaces specific terms in the query. 309*d5c09012SAndroid Build Coastguard Worker ReplacementAction replacement_action = 8; 310*d5c09012SAndroid Build Coastguard Worker 311*d5c09012SAndroid Build Coastguard Worker // Ignores specific terms from query during search. 312*d5c09012SAndroid Build Coastguard Worker IgnoreAction ignore_action = 9; 313*d5c09012SAndroid Build Coastguard Worker 314*d5c09012SAndroid Build Coastguard Worker // Filters results. 315*d5c09012SAndroid Build Coastguard Worker FilterAction filter_action = 10; 316*d5c09012SAndroid Build Coastguard Worker 317*d5c09012SAndroid Build Coastguard Worker // Treats a set of terms as synonyms of one another. 318*d5c09012SAndroid Build Coastguard Worker TwowaySynonymsAction twoway_synonyms_action = 11; 319*d5c09012SAndroid Build Coastguard Worker } 320*d5c09012SAndroid Build Coastguard Worker 321*d5c09012SAndroid Build Coastguard Worker // Required. The condition that triggers the rule. 322*d5c09012SAndroid Build Coastguard Worker // If the condition is empty, the rule will always apply. 323*d5c09012SAndroid Build Coastguard Worker Condition condition = 1 [(google.api.field_behavior) = REQUIRED]; 324*d5c09012SAndroid Build Coastguard Worker} 325*d5c09012SAndroid Build Coastguard Worker 326*d5c09012SAndroid Build Coastguard Worker// An intended audience of the [Product][google.cloud.retail.v2beta.Product] for 327*d5c09012SAndroid Build Coastguard Worker// whom it's sold. 328*d5c09012SAndroid Build Coastguard Workermessage Audience { 329*d5c09012SAndroid Build Coastguard Worker // The genders of the audience. Strongly encouraged to use the standard 330*d5c09012SAndroid Build Coastguard Worker // values: "male", "female", "unisex". 331*d5c09012SAndroid Build Coastguard Worker // 332*d5c09012SAndroid Build Coastguard Worker // At most 5 values are allowed. Each value must be a UTF-8 encoded string 333*d5c09012SAndroid Build Coastguard Worker // with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error 334*d5c09012SAndroid Build Coastguard Worker // is returned. 335*d5c09012SAndroid Build Coastguard Worker // 336*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 337*d5c09012SAndroid Build Coastguard Worker // [gender](https://support.google.com/merchants/answer/6324479). Schema.org 338*d5c09012SAndroid Build Coastguard Worker // property 339*d5c09012SAndroid Build Coastguard Worker // [Product.audience.suggestedGender](https://schema.org/suggestedGender). 340*d5c09012SAndroid Build Coastguard Worker repeated string genders = 1; 341*d5c09012SAndroid Build Coastguard Worker 342*d5c09012SAndroid Build Coastguard Worker // The age groups of the audience. Strongly encouraged to use the standard 343*d5c09012SAndroid Build Coastguard Worker // values: "newborn" (up to 3 months old), "infant" (3–12 months old), 344*d5c09012SAndroid Build Coastguard Worker // "toddler" (1–5 years old), "kids" (5–13 years old), "adult" (typically 345*d5c09012SAndroid Build Coastguard Worker // teens or older). 346*d5c09012SAndroid Build Coastguard Worker // 347*d5c09012SAndroid Build Coastguard Worker // At most 5 values are allowed. Each value must be a UTF-8 encoded string 348*d5c09012SAndroid Build Coastguard Worker // with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error 349*d5c09012SAndroid Build Coastguard Worker // is returned. 350*d5c09012SAndroid Build Coastguard Worker // 351*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 352*d5c09012SAndroid Build Coastguard Worker // [age_group](https://support.google.com/merchants/answer/6324463). 353*d5c09012SAndroid Build Coastguard Worker // Schema.org property 354*d5c09012SAndroid Build Coastguard Worker // [Product.audience.suggestedMinAge](https://schema.org/suggestedMinAge) and 355*d5c09012SAndroid Build Coastguard Worker // [Product.audience.suggestedMaxAge](https://schema.org/suggestedMaxAge). 356*d5c09012SAndroid Build Coastguard Worker repeated string age_groups = 2; 357*d5c09012SAndroid Build Coastguard Worker} 358*d5c09012SAndroid Build Coastguard Worker 359*d5c09012SAndroid Build Coastguard Worker// The color information of a [Product][google.cloud.retail.v2beta.Product]. 360*d5c09012SAndroid Build Coastguard Workermessage ColorInfo { 361*d5c09012SAndroid Build Coastguard Worker // The standard color families. Strongly recommended to use the following 362*d5c09012SAndroid Build Coastguard Worker // standard color groups: "Red", "Pink", "Orange", "Yellow", "Purple", 363*d5c09012SAndroid Build Coastguard Worker // "Green", "Cyan", "Blue", "Brown", "White", "Gray", "Black" and 364*d5c09012SAndroid Build Coastguard Worker // "Mixed". Normally it is expected to have only 1 color family. May consider 365*d5c09012SAndroid Build Coastguard Worker // using single "Mixed" instead of multiple values. 366*d5c09012SAndroid Build Coastguard Worker // 367*d5c09012SAndroid Build Coastguard Worker // A maximum of 5 values are allowed. Each value must be a UTF-8 encoded 368*d5c09012SAndroid Build Coastguard Worker // string with a length limit of 128 characters. Otherwise, an 369*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 370*d5c09012SAndroid Build Coastguard Worker // 371*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 372*d5c09012SAndroid Build Coastguard Worker // [color](https://support.google.com/merchants/answer/6324487). Schema.org 373*d5c09012SAndroid Build Coastguard Worker // property [Product.color](https://schema.org/color). 374*d5c09012SAndroid Build Coastguard Worker repeated string color_families = 1; 375*d5c09012SAndroid Build Coastguard Worker 376*d5c09012SAndroid Build Coastguard Worker // The color display names, which may be different from standard color family 377*d5c09012SAndroid Build Coastguard Worker // names, such as the color aliases used in the website frontend. Normally 378*d5c09012SAndroid Build Coastguard Worker // it is expected to have only 1 color. May consider using single "Mixed" 379*d5c09012SAndroid Build Coastguard Worker // instead of multiple values. 380*d5c09012SAndroid Build Coastguard Worker // 381*d5c09012SAndroid Build Coastguard Worker // A maximum of 75 colors are allowed. Each value must be a UTF-8 encoded 382*d5c09012SAndroid Build Coastguard Worker // string with a length limit of 128 characters. Otherwise, an 383*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 384*d5c09012SAndroid Build Coastguard Worker // 385*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 386*d5c09012SAndroid Build Coastguard Worker // [color](https://support.google.com/merchants/answer/6324487). Schema.org 387*d5c09012SAndroid Build Coastguard Worker // property [Product.color](https://schema.org/color). 388*d5c09012SAndroid Build Coastguard Worker repeated string colors = 2; 389*d5c09012SAndroid Build Coastguard Worker} 390*d5c09012SAndroid Build Coastguard Worker 391*d5c09012SAndroid Build Coastguard Worker// A custom attribute that is not explicitly modeled in 392*d5c09012SAndroid Build Coastguard Worker// [Product][google.cloud.retail.v2beta.Product]. 393*d5c09012SAndroid Build Coastguard Workermessage CustomAttribute { 394*d5c09012SAndroid Build Coastguard Worker // The textual values of this custom attribute. For example, `["yellow", 395*d5c09012SAndroid Build Coastguard Worker // "green"]` when the key is "color". 396*d5c09012SAndroid Build Coastguard Worker // 397*d5c09012SAndroid Build Coastguard Worker // Empty string is not allowed. Otherwise, an INVALID_ARGUMENT error is 398*d5c09012SAndroid Build Coastguard Worker // returned. 399*d5c09012SAndroid Build Coastguard Worker // 400*d5c09012SAndroid Build Coastguard Worker // Exactly one of [text][google.cloud.retail.v2beta.CustomAttribute.text] or 401*d5c09012SAndroid Build Coastguard Worker // [numbers][google.cloud.retail.v2beta.CustomAttribute.numbers] should be 402*d5c09012SAndroid Build Coastguard Worker // set. Otherwise, an INVALID_ARGUMENT error is returned. 403*d5c09012SAndroid Build Coastguard Worker repeated string text = 1; 404*d5c09012SAndroid Build Coastguard Worker 405*d5c09012SAndroid Build Coastguard Worker // The numerical values of this custom attribute. For example, `[2.3, 15.4]` 406*d5c09012SAndroid Build Coastguard Worker // when the key is "lengths_cm". 407*d5c09012SAndroid Build Coastguard Worker // 408*d5c09012SAndroid Build Coastguard Worker // Exactly one of [text][google.cloud.retail.v2beta.CustomAttribute.text] or 409*d5c09012SAndroid Build Coastguard Worker // [numbers][google.cloud.retail.v2beta.CustomAttribute.numbers] should be 410*d5c09012SAndroid Build Coastguard Worker // set. Otherwise, an INVALID_ARGUMENT error is returned. 411*d5c09012SAndroid Build Coastguard Worker repeated double numbers = 2; 412*d5c09012SAndroid Build Coastguard Worker 413*d5c09012SAndroid Build Coastguard Worker // This field is normally ignored unless 414*d5c09012SAndroid Build Coastguard Worker // [AttributesConfig.attribute_config_level][google.cloud.retail.v2beta.AttributesConfig.attribute_config_level] 415*d5c09012SAndroid Build Coastguard Worker // of the [Catalog][google.cloud.retail.v2beta.Catalog] is set to the 416*d5c09012SAndroid Build Coastguard Worker // deprecated 'PRODUCT_LEVEL_ATTRIBUTE_CONFIG' mode. For information about 417*d5c09012SAndroid Build Coastguard Worker // product-level attribute configuration, see [Configuration 418*d5c09012SAndroid Build Coastguard Worker // modes](https://cloud.google.com/retail/docs/attribute-config#config-modes). 419*d5c09012SAndroid Build Coastguard Worker // If true, custom attribute values are searchable by text queries in 420*d5c09012SAndroid Build Coastguard Worker // [SearchService.Search][google.cloud.retail.v2beta.SearchService.Search]. 421*d5c09012SAndroid Build Coastguard Worker // 422*d5c09012SAndroid Build Coastguard Worker // This field is ignored in a 423*d5c09012SAndroid Build Coastguard Worker // [UserEvent][google.cloud.retail.v2beta.UserEvent]. 424*d5c09012SAndroid Build Coastguard Worker // 425*d5c09012SAndroid Build Coastguard Worker // Only set if type [text][google.cloud.retail.v2beta.CustomAttribute.text] is 426*d5c09012SAndroid Build Coastguard Worker // set. Otherwise, a INVALID_ARGUMENT error is returned. 427*d5c09012SAndroid Build Coastguard Worker optional bool searchable = 3 [deprecated = true]; 428*d5c09012SAndroid Build Coastguard Worker 429*d5c09012SAndroid Build Coastguard Worker // This field is normally ignored unless 430*d5c09012SAndroid Build Coastguard Worker // [AttributesConfig.attribute_config_level][google.cloud.retail.v2beta.AttributesConfig.attribute_config_level] 431*d5c09012SAndroid Build Coastguard Worker // of the [Catalog][google.cloud.retail.v2beta.Catalog] is set to the 432*d5c09012SAndroid Build Coastguard Worker // deprecated 'PRODUCT_LEVEL_ATTRIBUTE_CONFIG' mode. For information about 433*d5c09012SAndroid Build Coastguard Worker // product-level attribute configuration, see [Configuration 434*d5c09012SAndroid Build Coastguard Worker // modes](https://cloud.google.com/retail/docs/attribute-config#config-modes). 435*d5c09012SAndroid Build Coastguard Worker // If true, custom attribute values are indexed, so that they can be filtered, 436*d5c09012SAndroid Build Coastguard Worker // faceted or boosted in 437*d5c09012SAndroid Build Coastguard Worker // [SearchService.Search][google.cloud.retail.v2beta.SearchService.Search]. 438*d5c09012SAndroid Build Coastguard Worker // 439*d5c09012SAndroid Build Coastguard Worker // This field is ignored in a 440*d5c09012SAndroid Build Coastguard Worker // [UserEvent][google.cloud.retail.v2beta.UserEvent]. 441*d5c09012SAndroid Build Coastguard Worker // 442*d5c09012SAndroid Build Coastguard Worker // See 443*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.filter][google.cloud.retail.v2beta.SearchRequest.filter], 444*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.facet_specs][google.cloud.retail.v2beta.SearchRequest.facet_specs] 445*d5c09012SAndroid Build Coastguard Worker // and 446*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.boost_spec][google.cloud.retail.v2beta.SearchRequest.boost_spec] 447*d5c09012SAndroid Build Coastguard Worker // for more details. 448*d5c09012SAndroid Build Coastguard Worker optional bool indexable = 4 [deprecated = true]; 449*d5c09012SAndroid Build Coastguard Worker} 450*d5c09012SAndroid Build Coastguard Worker 451*d5c09012SAndroid Build Coastguard Worker// Fulfillment information, such as the store IDs for in-store pickup or region 452*d5c09012SAndroid Build Coastguard Worker// IDs for different shipping methods. 453*d5c09012SAndroid Build Coastguard Workermessage FulfillmentInfo { 454*d5c09012SAndroid Build Coastguard Worker // The fulfillment type, including commonly used types (such as pickup in 455*d5c09012SAndroid Build Coastguard Worker // store and same day delivery), and custom types. Customers have to map 456*d5c09012SAndroid Build Coastguard Worker // custom types to their display names before rendering UI. 457*d5c09012SAndroid Build Coastguard Worker // 458*d5c09012SAndroid Build Coastguard Worker // Supported values: 459*d5c09012SAndroid Build Coastguard Worker // 460*d5c09012SAndroid Build Coastguard Worker // * "pickup-in-store" 461*d5c09012SAndroid Build Coastguard Worker // * "ship-to-store" 462*d5c09012SAndroid Build Coastguard Worker // * "same-day-delivery" 463*d5c09012SAndroid Build Coastguard Worker // * "next-day-delivery" 464*d5c09012SAndroid Build Coastguard Worker // * "custom-type-1" 465*d5c09012SAndroid Build Coastguard Worker // * "custom-type-2" 466*d5c09012SAndroid Build Coastguard Worker // * "custom-type-3" 467*d5c09012SAndroid Build Coastguard Worker // * "custom-type-4" 468*d5c09012SAndroid Build Coastguard Worker // * "custom-type-5" 469*d5c09012SAndroid Build Coastguard Worker // 470*d5c09012SAndroid Build Coastguard Worker // If this field is set to an invalid value other than these, an 471*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 472*d5c09012SAndroid Build Coastguard Worker string type = 1; 473*d5c09012SAndroid Build Coastguard Worker 474*d5c09012SAndroid Build Coastguard Worker // The IDs for this [type][google.cloud.retail.v2beta.FulfillmentInfo.type], 475*d5c09012SAndroid Build Coastguard Worker // such as the store IDs for 476*d5c09012SAndroid Build Coastguard Worker // [FulfillmentInfo.type.pickup-in-store][google.cloud.retail.v2beta.FulfillmentInfo.type] 477*d5c09012SAndroid Build Coastguard Worker // or the region IDs for 478*d5c09012SAndroid Build Coastguard Worker // [FulfillmentInfo.type.same-day-delivery][google.cloud.retail.v2beta.FulfillmentInfo.type]. 479*d5c09012SAndroid Build Coastguard Worker // 480*d5c09012SAndroid Build Coastguard Worker // A maximum of 3000 values are allowed. Each value must be a string with a 481*d5c09012SAndroid Build Coastguard Worker // length limit of 30 characters, matching the pattern `[a-zA-Z0-9_-]+`, such 482*d5c09012SAndroid Build Coastguard Worker // as "store1" or "REGION-2". Otherwise, an INVALID_ARGUMENT error is 483*d5c09012SAndroid Build Coastguard Worker // returned. 484*d5c09012SAndroid Build Coastguard Worker repeated string place_ids = 2; 485*d5c09012SAndroid Build Coastguard Worker} 486*d5c09012SAndroid Build Coastguard Worker 487*d5c09012SAndroid Build Coastguard Worker// [Product][google.cloud.retail.v2beta.Product] image. Recommendations AI and 488*d5c09012SAndroid Build Coastguard Worker// Retail Search do not use product images to improve prediction and search 489*d5c09012SAndroid Build Coastguard Worker// results. However, product images can be returned in results, and are shown in 490*d5c09012SAndroid Build Coastguard Worker// prediction or search previews in the console. 491*d5c09012SAndroid Build Coastguard Workermessage Image { 492*d5c09012SAndroid Build Coastguard Worker // Required. URI of the image. 493*d5c09012SAndroid Build Coastguard Worker // 494*d5c09012SAndroid Build Coastguard Worker // This field must be a valid UTF-8 encoded URI with a length limit of 5,000 495*d5c09012SAndroid Build Coastguard Worker // characters. Otherwise, an INVALID_ARGUMENT error is returned. 496*d5c09012SAndroid Build Coastguard Worker // 497*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 498*d5c09012SAndroid Build Coastguard Worker // [image_link](https://support.google.com/merchants/answer/6324350). 499*d5c09012SAndroid Build Coastguard Worker // Schema.org property [Product.image](https://schema.org/image). 500*d5c09012SAndroid Build Coastguard Worker string uri = 1 [(google.api.field_behavior) = REQUIRED]; 501*d5c09012SAndroid Build Coastguard Worker 502*d5c09012SAndroid Build Coastguard Worker // Height of the image in number of pixels. 503*d5c09012SAndroid Build Coastguard Worker // 504*d5c09012SAndroid Build Coastguard Worker // This field must be nonnegative. Otherwise, an INVALID_ARGUMENT error is 505*d5c09012SAndroid Build Coastguard Worker // returned. 506*d5c09012SAndroid Build Coastguard Worker int32 height = 2; 507*d5c09012SAndroid Build Coastguard Worker 508*d5c09012SAndroid Build Coastguard Worker // Width of the image in number of pixels. 509*d5c09012SAndroid Build Coastguard Worker // 510*d5c09012SAndroid Build Coastguard Worker // This field must be nonnegative. Otherwise, an INVALID_ARGUMENT error is 511*d5c09012SAndroid Build Coastguard Worker // returned. 512*d5c09012SAndroid Build Coastguard Worker int32 width = 3; 513*d5c09012SAndroid Build Coastguard Worker} 514*d5c09012SAndroid Build Coastguard Worker 515*d5c09012SAndroid Build Coastguard Worker// A floating point interval. 516*d5c09012SAndroid Build Coastguard Workermessage Interval { 517*d5c09012SAndroid Build Coastguard Worker // The lower bound of the interval. If neither of the min fields are set, then 518*d5c09012SAndroid Build Coastguard Worker // the lower bound is negative infinity. 519*d5c09012SAndroid Build Coastguard Worker // 520*d5c09012SAndroid Build Coastguard Worker // This field must not be larger than max. 521*d5c09012SAndroid Build Coastguard Worker // Otherwise, an INVALID_ARGUMENT error is returned. 522*d5c09012SAndroid Build Coastguard Worker oneof min { 523*d5c09012SAndroid Build Coastguard Worker // Inclusive lower bound. 524*d5c09012SAndroid Build Coastguard Worker double minimum = 1; 525*d5c09012SAndroid Build Coastguard Worker 526*d5c09012SAndroid Build Coastguard Worker // Exclusive lower bound. 527*d5c09012SAndroid Build Coastguard Worker double exclusive_minimum = 2; 528*d5c09012SAndroid Build Coastguard Worker } 529*d5c09012SAndroid Build Coastguard Worker 530*d5c09012SAndroid Build Coastguard Worker // The upper bound of the interval. If neither of the max fields are set, then 531*d5c09012SAndroid Build Coastguard Worker // the upper bound is positive infinity. 532*d5c09012SAndroid Build Coastguard Worker // 533*d5c09012SAndroid Build Coastguard Worker // This field must be not smaller than min. 534*d5c09012SAndroid Build Coastguard Worker // Otherwise, an INVALID_ARGUMENT error is returned. 535*d5c09012SAndroid Build Coastguard Worker oneof max { 536*d5c09012SAndroid Build Coastguard Worker // Inclusive upper bound. 537*d5c09012SAndroid Build Coastguard Worker double maximum = 3; 538*d5c09012SAndroid Build Coastguard Worker 539*d5c09012SAndroid Build Coastguard Worker // Exclusive upper bound. 540*d5c09012SAndroid Build Coastguard Worker double exclusive_maximum = 4; 541*d5c09012SAndroid Build Coastguard Worker } 542*d5c09012SAndroid Build Coastguard Worker} 543*d5c09012SAndroid Build Coastguard Worker 544*d5c09012SAndroid Build Coastguard Worker// The price information of a [Product][google.cloud.retail.v2beta.Product]. 545*d5c09012SAndroid Build Coastguard Workermessage PriceInfo { 546*d5c09012SAndroid Build Coastguard Worker // The price range of all 547*d5c09012SAndroid Build Coastguard Worker // [variant][google.cloud.retail.v2beta.Product.Type.VARIANT] 548*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2beta.Product] having the same 549*d5c09012SAndroid Build Coastguard Worker // [Product.primary_product_id][google.cloud.retail.v2beta.Product.primary_product_id]. 550*d5c09012SAndroid Build Coastguard Worker message PriceRange { 551*d5c09012SAndroid Build Coastguard Worker // The inclusive 552*d5c09012SAndroid Build Coastguard Worker // [Product.pricing_info.price][google.cloud.retail.v2beta.PriceInfo.price] 553*d5c09012SAndroid Build Coastguard Worker // interval of all 554*d5c09012SAndroid Build Coastguard Worker // [variant][google.cloud.retail.v2beta.Product.Type.VARIANT] 555*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2beta.Product] having the same 556*d5c09012SAndroid Build Coastguard Worker // [Product.primary_product_id][google.cloud.retail.v2beta.Product.primary_product_id]. 557*d5c09012SAndroid Build Coastguard Worker Interval price = 1; 558*d5c09012SAndroid Build Coastguard Worker 559*d5c09012SAndroid Build Coastguard Worker // The inclusive 560*d5c09012SAndroid Build Coastguard Worker // [Product.pricing_info.original_price][google.cloud.retail.v2beta.PriceInfo.original_price] 561*d5c09012SAndroid Build Coastguard Worker // internal of all 562*d5c09012SAndroid Build Coastguard Worker // [variant][google.cloud.retail.v2beta.Product.Type.VARIANT] 563*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2beta.Product] having the same 564*d5c09012SAndroid Build Coastguard Worker // [Product.primary_product_id][google.cloud.retail.v2beta.Product.primary_product_id]. 565*d5c09012SAndroid Build Coastguard Worker Interval original_price = 2; 566*d5c09012SAndroid Build Coastguard Worker } 567*d5c09012SAndroid Build Coastguard Worker 568*d5c09012SAndroid Build Coastguard Worker // The 3-letter currency code defined in [ISO 569*d5c09012SAndroid Build Coastguard Worker // 4217](https://www.iso.org/iso-4217-currency-codes.html). 570*d5c09012SAndroid Build Coastguard Worker // 571*d5c09012SAndroid Build Coastguard Worker // If this field is an unrecognizable currency code, an INVALID_ARGUMENT 572*d5c09012SAndroid Build Coastguard Worker // error is returned. 573*d5c09012SAndroid Build Coastguard Worker // 574*d5c09012SAndroid Build Coastguard Worker // The [Product.Type.VARIANT][google.cloud.retail.v2beta.Product.Type.VARIANT] 575*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2beta.Product]s with the same 576*d5c09012SAndroid Build Coastguard Worker // [Product.primary_product_id][google.cloud.retail.v2beta.Product.primary_product_id] 577*d5c09012SAndroid Build Coastguard Worker // must share the same 578*d5c09012SAndroid Build Coastguard Worker // [currency_code][google.cloud.retail.v2beta.PriceInfo.currency_code]. 579*d5c09012SAndroid Build Coastguard Worker // Otherwise, a FAILED_PRECONDITION error is returned. 580*d5c09012SAndroid Build Coastguard Worker string currency_code = 1; 581*d5c09012SAndroid Build Coastguard Worker 582*d5c09012SAndroid Build Coastguard Worker // Price of the product. 583*d5c09012SAndroid Build Coastguard Worker // 584*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 585*d5c09012SAndroid Build Coastguard Worker // [price](https://support.google.com/merchants/answer/6324371). Schema.org 586*d5c09012SAndroid Build Coastguard Worker // property [Offer.price](https://schema.org/price). 587*d5c09012SAndroid Build Coastguard Worker float price = 2; 588*d5c09012SAndroid Build Coastguard Worker 589*d5c09012SAndroid Build Coastguard Worker // Price of the product without any discount. If zero, by default set to be 590*d5c09012SAndroid Build Coastguard Worker // the [price][google.cloud.retail.v2beta.PriceInfo.price]. If set, 591*d5c09012SAndroid Build Coastguard Worker // [original_price][google.cloud.retail.v2beta.PriceInfo.original_price] 592*d5c09012SAndroid Build Coastguard Worker // should be greater than or equal to 593*d5c09012SAndroid Build Coastguard Worker // [price][google.cloud.retail.v2beta.PriceInfo.price], otherwise an 594*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is thrown. 595*d5c09012SAndroid Build Coastguard Worker float original_price = 3; 596*d5c09012SAndroid Build Coastguard Worker 597*d5c09012SAndroid Build Coastguard Worker // The costs associated with the sale of a particular product. Used for gross 598*d5c09012SAndroid Build Coastguard Worker // profit reporting. 599*d5c09012SAndroid Build Coastguard Worker // 600*d5c09012SAndroid Build Coastguard Worker // * Profit = [price][google.cloud.retail.v2beta.PriceInfo.price] - 601*d5c09012SAndroid Build Coastguard Worker // [cost][google.cloud.retail.v2beta.PriceInfo.cost] 602*d5c09012SAndroid Build Coastguard Worker // 603*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 604*d5c09012SAndroid Build Coastguard Worker // [cost_of_goods_sold](https://support.google.com/merchants/answer/9017895). 605*d5c09012SAndroid Build Coastguard Worker float cost = 4; 606*d5c09012SAndroid Build Coastguard Worker 607*d5c09012SAndroid Build Coastguard Worker // The timestamp when the [price][google.cloud.retail.v2beta.PriceInfo.price] 608*d5c09012SAndroid Build Coastguard Worker // starts to be effective. This can be set as a future timestamp, and the 609*d5c09012SAndroid Build Coastguard Worker // [price][google.cloud.retail.v2beta.PriceInfo.price] is only used for search 610*d5c09012SAndroid Build Coastguard Worker // after 611*d5c09012SAndroid Build Coastguard Worker // [price_effective_time][google.cloud.retail.v2beta.PriceInfo.price_effective_time]. 612*d5c09012SAndroid Build Coastguard Worker // If so, the 613*d5c09012SAndroid Build Coastguard Worker // [original_price][google.cloud.retail.v2beta.PriceInfo.original_price] must 614*d5c09012SAndroid Build Coastguard Worker // be set and 615*d5c09012SAndroid Build Coastguard Worker // [original_price][google.cloud.retail.v2beta.PriceInfo.original_price] is 616*d5c09012SAndroid Build Coastguard Worker // used before 617*d5c09012SAndroid Build Coastguard Worker // [price_effective_time][google.cloud.retail.v2beta.PriceInfo.price_effective_time]. 618*d5c09012SAndroid Build Coastguard Worker // 619*d5c09012SAndroid Build Coastguard Worker // Do not set if [price][google.cloud.retail.v2beta.PriceInfo.price] is always 620*d5c09012SAndroid Build Coastguard Worker // effective because it will cause additional latency during search. 621*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp price_effective_time = 5; 622*d5c09012SAndroid Build Coastguard Worker 623*d5c09012SAndroid Build Coastguard Worker // The timestamp when the [price][google.cloud.retail.v2beta.PriceInfo.price] 624*d5c09012SAndroid Build Coastguard Worker // stops to be effective. The 625*d5c09012SAndroid Build Coastguard Worker // [price][google.cloud.retail.v2beta.PriceInfo.price] is used for search 626*d5c09012SAndroid Build Coastguard Worker // before 627*d5c09012SAndroid Build Coastguard Worker // [price_expire_time][google.cloud.retail.v2beta.PriceInfo.price_expire_time]. 628*d5c09012SAndroid Build Coastguard Worker // If this field is set, the 629*d5c09012SAndroid Build Coastguard Worker // [original_price][google.cloud.retail.v2beta.PriceInfo.original_price] must 630*d5c09012SAndroid Build Coastguard Worker // be set and 631*d5c09012SAndroid Build Coastguard Worker // [original_price][google.cloud.retail.v2beta.PriceInfo.original_price] is 632*d5c09012SAndroid Build Coastguard Worker // used after 633*d5c09012SAndroid Build Coastguard Worker // [price_expire_time][google.cloud.retail.v2beta.PriceInfo.price_expire_time]. 634*d5c09012SAndroid Build Coastguard Worker // 635*d5c09012SAndroid Build Coastguard Worker // Do not set if [price][google.cloud.retail.v2beta.PriceInfo.price] is always 636*d5c09012SAndroid Build Coastguard Worker // effective because it will cause additional latency during search. 637*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp price_expire_time = 6; 638*d5c09012SAndroid Build Coastguard Worker 639*d5c09012SAndroid Build Coastguard Worker // Output only. The price range of all the child 640*d5c09012SAndroid Build Coastguard Worker // [Product.Type.VARIANT][google.cloud.retail.v2beta.Product.Type.VARIANT] 641*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2beta.Product]s grouped together on the 642*d5c09012SAndroid Build Coastguard Worker // [Product.Type.PRIMARY][google.cloud.retail.v2beta.Product.Type.PRIMARY] 643*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2beta.Product]. Only populated for 644*d5c09012SAndroid Build Coastguard Worker // [Product.Type.PRIMARY][google.cloud.retail.v2beta.Product.Type.PRIMARY] 645*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2beta.Product]s. 646*d5c09012SAndroid Build Coastguard Worker // 647*d5c09012SAndroid Build Coastguard Worker // Note: This field is OUTPUT_ONLY for 648*d5c09012SAndroid Build Coastguard Worker // [ProductService.GetProduct][google.cloud.retail.v2beta.ProductService.GetProduct]. 649*d5c09012SAndroid Build Coastguard Worker // Do not set this field in API requests. 650*d5c09012SAndroid Build Coastguard Worker PriceRange price_range = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; 651*d5c09012SAndroid Build Coastguard Worker} 652*d5c09012SAndroid Build Coastguard Worker 653*d5c09012SAndroid Build Coastguard Worker// The rating of a [Product][google.cloud.retail.v2beta.Product]. 654*d5c09012SAndroid Build Coastguard Workermessage Rating { 655*d5c09012SAndroid Build Coastguard Worker // The total number of ratings. This value is independent of the value of 656*d5c09012SAndroid Build Coastguard Worker // [rating_histogram][google.cloud.retail.v2beta.Rating.rating_histogram]. 657*d5c09012SAndroid Build Coastguard Worker // 658*d5c09012SAndroid Build Coastguard Worker // This value must be nonnegative. Otherwise, an INVALID_ARGUMENT error is 659*d5c09012SAndroid Build Coastguard Worker // returned. 660*d5c09012SAndroid Build Coastguard Worker int32 rating_count = 1; 661*d5c09012SAndroid Build Coastguard Worker 662*d5c09012SAndroid Build Coastguard Worker // The average rating of the [Product][google.cloud.retail.v2beta.Product]. 663*d5c09012SAndroid Build Coastguard Worker // 664*d5c09012SAndroid Build Coastguard Worker // The rating is scaled at 1-5. Otherwise, an INVALID_ARGUMENT error is 665*d5c09012SAndroid Build Coastguard Worker // returned. 666*d5c09012SAndroid Build Coastguard Worker float average_rating = 2; 667*d5c09012SAndroid Build Coastguard Worker 668*d5c09012SAndroid Build Coastguard Worker // List of rating counts per rating value (index = rating - 1). The list is 669*d5c09012SAndroid Build Coastguard Worker // empty if there is no rating. If the list is non-empty, its size is 670*d5c09012SAndroid Build Coastguard Worker // always 5. Otherwise, an INVALID_ARGUMENT error is returned. 671*d5c09012SAndroid Build Coastguard Worker // 672*d5c09012SAndroid Build Coastguard Worker // For example, [41, 14, 13, 47, 303]. It means that the 673*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2beta.Product] got 41 ratings with 1 star, 674*d5c09012SAndroid Build Coastguard Worker // 14 ratings with 2 star, and so on. 675*d5c09012SAndroid Build Coastguard Worker repeated int32 rating_histogram = 3; 676*d5c09012SAndroid Build Coastguard Worker} 677*d5c09012SAndroid Build Coastguard Worker 678*d5c09012SAndroid Build Coastguard Worker// Information of an end user. 679*d5c09012SAndroid Build Coastguard Workermessage UserInfo { 680*d5c09012SAndroid Build Coastguard Worker // Highly recommended for logged-in users. Unique identifier for logged-in 681*d5c09012SAndroid Build Coastguard Worker // user, such as a user name. Don't set for anonymous users. 682*d5c09012SAndroid Build Coastguard Worker // 683*d5c09012SAndroid Build Coastguard Worker // Always use a hashed value for this ID. 684*d5c09012SAndroid Build Coastguard Worker // 685*d5c09012SAndroid Build Coastguard Worker // Don't set the field to the same fixed ID for different users. This mixes 686*d5c09012SAndroid Build Coastguard Worker // the event history of those users together, which results in degraded 687*d5c09012SAndroid Build Coastguard Worker // model quality. 688*d5c09012SAndroid Build Coastguard Worker // 689*d5c09012SAndroid Build Coastguard Worker // The field must be a UTF-8 encoded string with a length limit of 128 690*d5c09012SAndroid Build Coastguard Worker // characters. Otherwise, an INVALID_ARGUMENT error is returned. 691*d5c09012SAndroid Build Coastguard Worker string user_id = 1; 692*d5c09012SAndroid Build Coastguard Worker 693*d5c09012SAndroid Build Coastguard Worker // The end user's IP address. This field is used to extract location 694*d5c09012SAndroid Build Coastguard Worker // information for personalization. 695*d5c09012SAndroid Build Coastguard Worker // 696*d5c09012SAndroid Build Coastguard Worker // This field must be either an IPv4 address (e.g. "104.133.9.80") or an IPv6 697*d5c09012SAndroid Build Coastguard Worker // address (e.g. "2001:0db8:85a3:0000:0000:8a2e:0370:7334"). Otherwise, an 698*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 699*d5c09012SAndroid Build Coastguard Worker // 700*d5c09012SAndroid Build Coastguard Worker // This should not be set when: 701*d5c09012SAndroid Build Coastguard Worker // 702*d5c09012SAndroid Build Coastguard Worker // * setting 703*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.user_info][google.cloud.retail.v2beta.SearchRequest.user_info]. 704*d5c09012SAndroid Build Coastguard Worker // * using the JavaScript tag in 705*d5c09012SAndroid Build Coastguard Worker // [UserEventService.CollectUserEvent][google.cloud.retail.v2beta.UserEventService.CollectUserEvent] 706*d5c09012SAndroid Build Coastguard Worker // or if 707*d5c09012SAndroid Build Coastguard Worker // [direct_user_request][google.cloud.retail.v2beta.UserInfo.direct_user_request] 708*d5c09012SAndroid Build Coastguard Worker // is set. 709*d5c09012SAndroid Build Coastguard Worker string ip_address = 2; 710*d5c09012SAndroid Build Coastguard Worker 711*d5c09012SAndroid Build Coastguard Worker // User agent as included in the HTTP header. Required for getting 712*d5c09012SAndroid Build Coastguard Worker // [SearchResponse.sponsored_results][google.cloud.retail.v2beta.SearchResponse.sponsored_results]. 713*d5c09012SAndroid Build Coastguard Worker // 714*d5c09012SAndroid Build Coastguard Worker // The field must be a UTF-8 encoded string with a length limit of 1,000 715*d5c09012SAndroid Build Coastguard Worker // characters. Otherwise, an INVALID_ARGUMENT error is returned. 716*d5c09012SAndroid Build Coastguard Worker // 717*d5c09012SAndroid Build Coastguard Worker // This should not be set when using the client side event reporting with 718*d5c09012SAndroid Build Coastguard Worker // GTM or JavaScript tag in 719*d5c09012SAndroid Build Coastguard Worker // [UserEventService.CollectUserEvent][google.cloud.retail.v2beta.UserEventService.CollectUserEvent] 720*d5c09012SAndroid Build Coastguard Worker // or if 721*d5c09012SAndroid Build Coastguard Worker // [direct_user_request][google.cloud.retail.v2beta.UserInfo.direct_user_request] 722*d5c09012SAndroid Build Coastguard Worker // is set. 723*d5c09012SAndroid Build Coastguard Worker string user_agent = 3; 724*d5c09012SAndroid Build Coastguard Worker 725*d5c09012SAndroid Build Coastguard Worker // True if the request is made directly from the end user, in which case the 726*d5c09012SAndroid Build Coastguard Worker // [ip_address][google.cloud.retail.v2beta.UserInfo.ip_address] and 727*d5c09012SAndroid Build Coastguard Worker // [user_agent][google.cloud.retail.v2beta.UserInfo.user_agent] can be 728*d5c09012SAndroid Build Coastguard Worker // populated from the HTTP request. This flag should be set only if the API 729*d5c09012SAndroid Build Coastguard Worker // request is made directly from the end user such as a mobile app (and not if 730*d5c09012SAndroid Build Coastguard Worker // a gateway or a server is processing and pushing the user events). 731*d5c09012SAndroid Build Coastguard Worker // 732*d5c09012SAndroid Build Coastguard Worker // This should not be set when using the JavaScript tag in 733*d5c09012SAndroid Build Coastguard Worker // [UserEventService.CollectUserEvent][google.cloud.retail.v2beta.UserEventService.CollectUserEvent]. 734*d5c09012SAndroid Build Coastguard Worker bool direct_user_request = 4; 735*d5c09012SAndroid Build Coastguard Worker} 736*d5c09012SAndroid Build Coastguard Worker 737*d5c09012SAndroid Build Coastguard Worker// The inventory information at a place (e.g. a store) identified 738*d5c09012SAndroid Build Coastguard Worker// by a place ID. 739*d5c09012SAndroid Build Coastguard Workermessage LocalInventory { 740*d5c09012SAndroid Build Coastguard Worker // The place ID for the current set of inventory information. 741*d5c09012SAndroid Build Coastguard Worker string place_id = 1; 742*d5c09012SAndroid Build Coastguard Worker 743*d5c09012SAndroid Build Coastguard Worker // Product price and cost information. 744*d5c09012SAndroid Build Coastguard Worker // 745*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 746*d5c09012SAndroid Build Coastguard Worker // [price](https://support.google.com/merchants/answer/6324371). 747*d5c09012SAndroid Build Coastguard Worker PriceInfo price_info = 2; 748*d5c09012SAndroid Build Coastguard Worker 749*d5c09012SAndroid Build Coastguard Worker // Additional local inventory attributes, for example, store name, promotion 750*d5c09012SAndroid Build Coastguard Worker // tags, etc. 751*d5c09012SAndroid Build Coastguard Worker // 752*d5c09012SAndroid Build Coastguard Worker // This field needs to pass all below criteria, otherwise an INVALID_ARGUMENT 753*d5c09012SAndroid Build Coastguard Worker // error is returned: 754*d5c09012SAndroid Build Coastguard Worker // 755*d5c09012SAndroid Build Coastguard Worker // * At most 30 attributes are allowed. 756*d5c09012SAndroid Build Coastguard Worker // * The key must be a UTF-8 encoded string with a length limit of 32 757*d5c09012SAndroid Build Coastguard Worker // characters. 758*d5c09012SAndroid Build Coastguard Worker // * The key must match the pattern: `[a-zA-Z0-9][a-zA-Z0-9_]*`. For example, 759*d5c09012SAndroid Build Coastguard Worker // key0LikeThis or KEY_1_LIKE_THIS. 760*d5c09012SAndroid Build Coastguard Worker // * The attribute values must be of the same type (text or number). 761*d5c09012SAndroid Build Coastguard Worker // * Only 1 value is allowed for each attribute. 762*d5c09012SAndroid Build Coastguard Worker // * For text values, the length limit is 256 UTF-8 characters. 763*d5c09012SAndroid Build Coastguard Worker // * The attribute does not support search. The `searchable` field should be 764*d5c09012SAndroid Build Coastguard Worker // unset or set to false. 765*d5c09012SAndroid Build Coastguard Worker // * The max summed total bytes of custom attribute keys and values per 766*d5c09012SAndroid Build Coastguard Worker // product is 5MiB. 767*d5c09012SAndroid Build Coastguard Worker map<string, CustomAttribute> attributes = 3; 768*d5c09012SAndroid Build Coastguard Worker 769*d5c09012SAndroid Build Coastguard Worker // Input only. Supported fulfillment types. Valid fulfillment type values 770*d5c09012SAndroid Build Coastguard Worker // include commonly used types (such as pickup in store and same day 771*d5c09012SAndroid Build Coastguard Worker // delivery), and custom types. Customers have to map custom types to their 772*d5c09012SAndroid Build Coastguard Worker // display names before rendering UI. 773*d5c09012SAndroid Build Coastguard Worker // 774*d5c09012SAndroid Build Coastguard Worker // Supported values: 775*d5c09012SAndroid Build Coastguard Worker // 776*d5c09012SAndroid Build Coastguard Worker // * "pickup-in-store" 777*d5c09012SAndroid Build Coastguard Worker // * "ship-to-store" 778*d5c09012SAndroid Build Coastguard Worker // * "same-day-delivery" 779*d5c09012SAndroid Build Coastguard Worker // * "next-day-delivery" 780*d5c09012SAndroid Build Coastguard Worker // * "custom-type-1" 781*d5c09012SAndroid Build Coastguard Worker // * "custom-type-2" 782*d5c09012SAndroid Build Coastguard Worker // * "custom-type-3" 783*d5c09012SAndroid Build Coastguard Worker // * "custom-type-4" 784*d5c09012SAndroid Build Coastguard Worker // * "custom-type-5" 785*d5c09012SAndroid Build Coastguard Worker // 786*d5c09012SAndroid Build Coastguard Worker // If this field is set to an invalid value other than these, an 787*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 788*d5c09012SAndroid Build Coastguard Worker // 789*d5c09012SAndroid Build Coastguard Worker // All the elements must be distinct. Otherwise, an INVALID_ARGUMENT error is 790*d5c09012SAndroid Build Coastguard Worker // returned. 791*d5c09012SAndroid Build Coastguard Worker repeated string fulfillment_types = 4 792*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = INPUT_ONLY]; 793*d5c09012SAndroid Build Coastguard Worker} 794