blob: 9ae12b75a1a09067683cda73e10c5a816150f280 [file] [log] [blame]
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.26.0
// protoc v3.12.2
// source: google/cloud/retail/v2/search_service.proto
package retailpb
import (
context "context"
reflect "reflect"
sync "sync"
_struct "github.com/golang/protobuf/ptypes/struct"
_ "google.golang.org/genproto/googleapis/api/annotations"
field_mask "google.golang.org/genproto/protobuf/field_mask"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// The search mode of each search request.
type SearchRequest_SearchMode int32
const (
// Default value. In this case both product search and faceted search will
// be performed. Both [SearchResponse.SearchResult] and
// [SearchResponse.Facet] will be returned.
SearchRequest_SEARCH_MODE_UNSPECIFIED SearchRequest_SearchMode = 0
// Only product search will be performed. The faceted search will be
// disabled.
//
// Only [SearchResponse.SearchResult] will be returned.
// [SearchResponse.Facet] will not be returned, even if
// [SearchRequest.facet_specs][google.cloud.retail.v2.SearchRequest.facet_specs]
// or
// [SearchRequest.dynamic_facet_spec][google.cloud.retail.v2.SearchRequest.dynamic_facet_spec]
// is set.
SearchRequest_PRODUCT_SEARCH_ONLY SearchRequest_SearchMode = 1
// Only faceted search will be performed. The product search will be
// disabled.
//
// When in this mode, one or both of
// [SearchRequest.facet_specs][google.cloud.retail.v2.SearchRequest.facet_specs]
// and
// [SearchRequest.dynamic_facet_spec][google.cloud.retail.v2.SearchRequest.dynamic_facet_spec]
// should be set. Otherwise, an INVALID_ARGUMENT error is returned. Only
// [SearchResponse.Facet] will be returned. [SearchResponse.SearchResult]
// will not be returned.
SearchRequest_FACETED_SEARCH_ONLY SearchRequest_SearchMode = 2
)
// Enum value maps for SearchRequest_SearchMode.
var (
SearchRequest_SearchMode_name = map[int32]string{
0: "SEARCH_MODE_UNSPECIFIED",
1: "PRODUCT_SEARCH_ONLY",
2: "FACETED_SEARCH_ONLY",
}
SearchRequest_SearchMode_value = map[string]int32{
"SEARCH_MODE_UNSPECIFIED": 0,
"PRODUCT_SEARCH_ONLY": 1,
"FACETED_SEARCH_ONLY": 2,
}
)
func (x SearchRequest_SearchMode) Enum() *SearchRequest_SearchMode {
p := new(SearchRequest_SearchMode)
*p = x
return p
}
func (x SearchRequest_SearchMode) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (SearchRequest_SearchMode) Descriptor() protoreflect.EnumDescriptor {
return file_google_cloud_retail_v2_search_service_proto_enumTypes[0].Descriptor()
}
func (SearchRequest_SearchMode) Type() protoreflect.EnumType {
return &file_google_cloud_retail_v2_search_service_proto_enumTypes[0]
}
func (x SearchRequest_SearchMode) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use SearchRequest_SearchMode.Descriptor instead.
func (SearchRequest_SearchMode) EnumDescriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 0}
}
// Enum to control DynamicFacet mode
type SearchRequest_DynamicFacetSpec_Mode int32
const (
// Default value.
SearchRequest_DynamicFacetSpec_MODE_UNSPECIFIED SearchRequest_DynamicFacetSpec_Mode = 0
// Disable Dynamic Facet.
SearchRequest_DynamicFacetSpec_DISABLED SearchRequest_DynamicFacetSpec_Mode = 1
// Automatic mode built by Google Retail Search.
SearchRequest_DynamicFacetSpec_ENABLED SearchRequest_DynamicFacetSpec_Mode = 2
)
// Enum value maps for SearchRequest_DynamicFacetSpec_Mode.
var (
SearchRequest_DynamicFacetSpec_Mode_name = map[int32]string{
0: "MODE_UNSPECIFIED",
1: "DISABLED",
2: "ENABLED",
}
SearchRequest_DynamicFacetSpec_Mode_value = map[string]int32{
"MODE_UNSPECIFIED": 0,
"DISABLED": 1,
"ENABLED": 2,
}
)
func (x SearchRequest_DynamicFacetSpec_Mode) Enum() *SearchRequest_DynamicFacetSpec_Mode {
p := new(SearchRequest_DynamicFacetSpec_Mode)
*p = x
return p
}
func (x SearchRequest_DynamicFacetSpec_Mode) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (SearchRequest_DynamicFacetSpec_Mode) Descriptor() protoreflect.EnumDescriptor {
return file_google_cloud_retail_v2_search_service_proto_enumTypes[1].Descriptor()
}
func (SearchRequest_DynamicFacetSpec_Mode) Type() protoreflect.EnumType {
return &file_google_cloud_retail_v2_search_service_proto_enumTypes[1]
}
func (x SearchRequest_DynamicFacetSpec_Mode) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use SearchRequest_DynamicFacetSpec_Mode.Descriptor instead.
func (SearchRequest_DynamicFacetSpec_Mode) EnumDescriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 1, 0}
}
// Enum describing under which condition query expansion should occur.
type SearchRequest_QueryExpansionSpec_Condition int32
const (
// Unspecified query expansion condition. In this case, server behavior
// defaults to
// [Condition.DISABLED][google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition.DISABLED].
SearchRequest_QueryExpansionSpec_CONDITION_UNSPECIFIED SearchRequest_QueryExpansionSpec_Condition = 0
// Disabled query expansion. Only the exact search query is used, even if
// [SearchResponse.total_size][google.cloud.retail.v2.SearchResponse.total_size]
// is zero.
SearchRequest_QueryExpansionSpec_DISABLED SearchRequest_QueryExpansionSpec_Condition = 1
// Automatic query expansion built by Google Retail Search.
SearchRequest_QueryExpansionSpec_AUTO SearchRequest_QueryExpansionSpec_Condition = 3
)
// Enum value maps for SearchRequest_QueryExpansionSpec_Condition.
var (
SearchRequest_QueryExpansionSpec_Condition_name = map[int32]string{
0: "CONDITION_UNSPECIFIED",
1: "DISABLED",
3: "AUTO",
}
SearchRequest_QueryExpansionSpec_Condition_value = map[string]int32{
"CONDITION_UNSPECIFIED": 0,
"DISABLED": 1,
"AUTO": 3,
}
)
func (x SearchRequest_QueryExpansionSpec_Condition) Enum() *SearchRequest_QueryExpansionSpec_Condition {
p := new(SearchRequest_QueryExpansionSpec_Condition)
*p = x
return p
}
func (x SearchRequest_QueryExpansionSpec_Condition) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (SearchRequest_QueryExpansionSpec_Condition) Descriptor() protoreflect.EnumDescriptor {
return file_google_cloud_retail_v2_search_service_proto_enumTypes[2].Descriptor()
}
func (SearchRequest_QueryExpansionSpec_Condition) Type() protoreflect.EnumType {
return &file_google_cloud_retail_v2_search_service_proto_enumTypes[2]
}
func (x SearchRequest_QueryExpansionSpec_Condition) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use SearchRequest_QueryExpansionSpec_Condition.Descriptor instead.
func (SearchRequest_QueryExpansionSpec_Condition) EnumDescriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 3, 0}
}
// The personalization mode of each search request.
type SearchRequest_PersonalizationSpec_Mode int32
const (
// Default value. In this case, server behavior defaults to
// [Mode.AUTO][google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode.AUTO].
SearchRequest_PersonalizationSpec_MODE_UNSPECIFIED SearchRequest_PersonalizationSpec_Mode = 0
// Let CRS decide whether to use personalization based on quality of user
// event data.
SearchRequest_PersonalizationSpec_AUTO SearchRequest_PersonalizationSpec_Mode = 1
// Disable personalization.
SearchRequest_PersonalizationSpec_DISABLED SearchRequest_PersonalizationSpec_Mode = 2
)
// Enum value maps for SearchRequest_PersonalizationSpec_Mode.
var (
SearchRequest_PersonalizationSpec_Mode_name = map[int32]string{
0: "MODE_UNSPECIFIED",
1: "AUTO",
2: "DISABLED",
}
SearchRequest_PersonalizationSpec_Mode_value = map[string]int32{
"MODE_UNSPECIFIED": 0,
"AUTO": 1,
"DISABLED": 2,
}
)
func (x SearchRequest_PersonalizationSpec_Mode) Enum() *SearchRequest_PersonalizationSpec_Mode {
p := new(SearchRequest_PersonalizationSpec_Mode)
*p = x
return p
}
func (x SearchRequest_PersonalizationSpec_Mode) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (SearchRequest_PersonalizationSpec_Mode) Descriptor() protoreflect.EnumDescriptor {
return file_google_cloud_retail_v2_search_service_proto_enumTypes[3].Descriptor()
}
func (SearchRequest_PersonalizationSpec_Mode) Type() protoreflect.EnumType {
return &file_google_cloud_retail_v2_search_service_proto_enumTypes[3]
}
func (x SearchRequest_PersonalizationSpec_Mode) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use SearchRequest_PersonalizationSpec_Mode.Descriptor instead.
func (SearchRequest_PersonalizationSpec_Mode) EnumDescriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 4, 0}
}
// Enum describing under which mode spell correction should occur.
type SearchRequest_SpellCorrectionSpec_Mode int32
const (
// Unspecified spell correction mode. In this case, server behavior
// defaults to
// [Mode.AUTO][google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.Mode.AUTO].
SearchRequest_SpellCorrectionSpec_MODE_UNSPECIFIED SearchRequest_SpellCorrectionSpec_Mode = 0
// Google Retail Search will try to find a spell suggestion if there
// is any and put in the
// [SearchResponse.corrected_query][google.cloud.retail.v2.SearchResponse.corrected_query].
// The spell suggestion will not be used as the search query.
SearchRequest_SpellCorrectionSpec_SUGGESTION_ONLY SearchRequest_SpellCorrectionSpec_Mode = 1
// Automatic spell correction built by Google Retail Search. Search will
// be based on the corrected query if found.
SearchRequest_SpellCorrectionSpec_AUTO SearchRequest_SpellCorrectionSpec_Mode = 2
)
// Enum value maps for SearchRequest_SpellCorrectionSpec_Mode.
var (
SearchRequest_SpellCorrectionSpec_Mode_name = map[int32]string{
0: "MODE_UNSPECIFIED",
1: "SUGGESTION_ONLY",
2: "AUTO",
}
SearchRequest_SpellCorrectionSpec_Mode_value = map[string]int32{
"MODE_UNSPECIFIED": 0,
"SUGGESTION_ONLY": 1,
"AUTO": 2,
}
)
func (x SearchRequest_SpellCorrectionSpec_Mode) Enum() *SearchRequest_SpellCorrectionSpec_Mode {
p := new(SearchRequest_SpellCorrectionSpec_Mode)
*p = x
return p
}
func (x SearchRequest_SpellCorrectionSpec_Mode) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (SearchRequest_SpellCorrectionSpec_Mode) Descriptor() protoreflect.EnumDescriptor {
return file_google_cloud_retail_v2_search_service_proto_enumTypes[4].Descriptor()
}
func (SearchRequest_SpellCorrectionSpec_Mode) Type() protoreflect.EnumType {
return &file_google_cloud_retail_v2_search_service_proto_enumTypes[4]
}
func (x SearchRequest_SpellCorrectionSpec_Mode) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use SearchRequest_SpellCorrectionSpec_Mode.Descriptor instead.
func (SearchRequest_SpellCorrectionSpec_Mode) EnumDescriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 5, 0}
}
// Request message for
// [SearchService.Search][google.cloud.retail.v2.SearchService.Search] method.
type SearchRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The resource name of the Retail Search serving config, such as
// `projects/*/locations/global/catalogs/default_catalog/servingConfigs/default_serving_config`
// or the name of the legacy placement resource, such as
// `projects/*/locations/global/catalogs/default_catalog/placements/default_search`.
// This field is used to identify the serving configuration name and the set
// of models that will be used to make the search.
Placement string `protobuf:"bytes,1,opt,name=placement,proto3" json:"placement,omitempty"`
// The branch resource name, such as
// `projects/*/locations/global/catalogs/default_catalog/branches/0`.
//
// Use "default_branch" as the branch ID or leave this field empty, to search
// products under the default branch.
Branch string `protobuf:"bytes,2,opt,name=branch,proto3" json:"branch,omitempty"`
// Raw search query.
//
// If this field is empty, the request is considered a category browsing
// request and returned results are based on
// [filter][google.cloud.retail.v2.SearchRequest.filter] and
// [page_categories][google.cloud.retail.v2.SearchRequest.page_categories].
Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"`
// Required. A unique identifier for tracking visitors. For example, this
// could be implemented with an HTTP cookie, which should be able to uniquely
// identify a visitor on a single device. This unique identifier should not
// change if the visitor logs in or out of the website.
//
// This should be the same identifier as
// [UserEvent.visitor_id][google.cloud.retail.v2.UserEvent.visitor_id].
//
// The field must be a UTF-8 encoded string with a length limit of 128
// characters. Otherwise, an INVALID_ARGUMENT error is returned.
VisitorId string `protobuf:"bytes,4,opt,name=visitor_id,json=visitorId,proto3" json:"visitor_id,omitempty"`
// User information.
UserInfo *UserInfo `protobuf:"bytes,5,opt,name=user_info,json=userInfo,proto3" json:"user_info,omitempty"`
// Maximum number of [Product][google.cloud.retail.v2.Product]s to return. If
// unspecified, defaults to a reasonable value. The maximum allowed value is
// 120. Values above 120 will be coerced to 120.
//
// If this field is negative, an INVALID_ARGUMENT is returned.
PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
// A page token
// [SearchResponse.next_page_token][google.cloud.retail.v2.SearchResponse.next_page_token],
// received from a previous
// [SearchService.Search][google.cloud.retail.v2.SearchService.Search] call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to
// [SearchService.Search][google.cloud.retail.v2.SearchService.Search] must
// match the call that provided the page token. Otherwise, an INVALID_ARGUMENT
// error is returned.
PageToken string `protobuf:"bytes,8,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
// A 0-indexed integer that specifies the current offset (that is, starting
// result location, amongst the [Product][google.cloud.retail.v2.Product]s
// deemed by the API as relevant) in search results. This field is only
// considered if [page_token][google.cloud.retail.v2.SearchRequest.page_token]
// is unset.
//
// If this field is negative, an INVALID_ARGUMENT is returned.
Offset int32 `protobuf:"varint,9,opt,name=offset,proto3" json:"offset,omitempty"`
// The filter syntax consists of an expression language for constructing a
// predicate from one or more fields of the products being filtered. Filter
// expression is case-sensitive. See more details at this [user
// guide](https://cloud.google.com/retail/docs/filter-and-order#filter).
//
// If this field is unrecognizable, an INVALID_ARGUMENT is returned.
Filter string `protobuf:"bytes,10,opt,name=filter,proto3" json:"filter,omitempty"`
// The default filter that is applied when a user performs a search without
// checking any filters on the search page.
//
// The filter applied to every search request when quality improvement such as
// query expansion is needed. For example, if a query does not have enough
// results, an expanded query with
// [SearchRequest.canonical_filter][google.cloud.retail.v2.SearchRequest.canonical_filter]
// will be returned as a supplement of the original query. This field is
// strongly recommended to achieve high search quality.
//
// See [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter] for
// more details about filter syntax.
CanonicalFilter string `protobuf:"bytes,28,opt,name=canonical_filter,json=canonicalFilter,proto3" json:"canonical_filter,omitempty"`
// The order in which products are returned. Products can be ordered by
// a field in an [Product][google.cloud.retail.v2.Product] object. Leave it
// unset if ordered by relevance. OrderBy expression is case-sensitive. See
// more details at this [user
// guide](https://cloud.google.com/retail/docs/filter-and-order#order).
//
// If this field is unrecognizable, an INVALID_ARGUMENT is returned.
OrderBy string `protobuf:"bytes,11,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
// Facet specifications for faceted search. If empty, no facets are returned.
//
// A maximum of 100 values are allowed. Otherwise, an INVALID_ARGUMENT error
// is returned.
FacetSpecs []*SearchRequest_FacetSpec `protobuf:"bytes,12,rep,name=facet_specs,json=facetSpecs,proto3" json:"facet_specs,omitempty"`
// Deprecated. Refer to https://cloud.google.com/retail/docs/configs#dynamic
// to enable dynamic facets. Do not set this field.
//
// The specification for dynamically generated facets. Notice that only
// textual facets can be dynamically generated.
//
// Deprecated: Do not use.
DynamicFacetSpec *SearchRequest_DynamicFacetSpec `protobuf:"bytes,21,opt,name=dynamic_facet_spec,json=dynamicFacetSpec,proto3" json:"dynamic_facet_spec,omitempty"`
// Boost specification to boost certain products. See more details at this
// [user guide](https://cloud.google.com/retail/docs/boosting).
//
// Notice that if both
// [ServingConfig.boost_control_ids][google.cloud.retail.v2.ServingConfig.boost_control_ids]
// and
// [SearchRequest.boost_spec][google.cloud.retail.v2.SearchRequest.boost_spec]
// are set, the boost conditions from both places are evaluated. If a search
// request matches multiple boost conditions, the final boost score is equal
// to the sum of the boost scores from all matched boost conditions.
BoostSpec *SearchRequest_BoostSpec `protobuf:"bytes,13,opt,name=boost_spec,json=boostSpec,proto3" json:"boost_spec,omitempty"`
// The query expansion specification that specifies the conditions under which
// query expansion will occur. See more details at this [user
// guide](https://cloud.google.com/retail/docs/result-size#query_expansion).
QueryExpansionSpec *SearchRequest_QueryExpansionSpec `protobuf:"bytes,14,opt,name=query_expansion_spec,json=queryExpansionSpec,proto3" json:"query_expansion_spec,omitempty"`
// The keys to fetch and rollup the matching
// [variant][google.cloud.retail.v2.Product.Type.VARIANT]
// [Product][google.cloud.retail.v2.Product]s attributes,
// [FulfillmentInfo][google.cloud.retail.v2.FulfillmentInfo] or
// [LocalInventory][google.cloud.retail.v2.LocalInventory]s attributes. The
// attributes from all the matching
// [variant][google.cloud.retail.v2.Product.Type.VARIANT]
// [Product][google.cloud.retail.v2.Product]s or
// [LocalInventory][google.cloud.retail.v2.LocalInventory]s are merged and
// de-duplicated. Notice that rollup attributes will lead to extra query
// latency. Maximum number of keys is 30.
//
// For [FulfillmentInfo][google.cloud.retail.v2.FulfillmentInfo], a
// fulfillment type and a fulfillment ID must be provided in the format of
// "fulfillmentType.fulfillmentId". E.g., in "pickupInStore.store123",
// "pickupInStore" is fulfillment type and "store123" is the store ID.
//
// Supported keys are:
//
// - colorFamilies
// - price
// - originalPrice
// - discount
// - variantId
// - inventory(place_id,price)
// - inventory(place_id,original_price)
// - inventory(place_id,attributes.key), where key is any key in the
// [Product.local_inventories.attributes][google.cloud.retail.v2.LocalInventory.attributes]
// map.
// - attributes.key, where key is any key in the
// [Product.attributes][google.cloud.retail.v2.Product.attributes] map.
// - pickupInStore.id, where id is any
//
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "pickup-in-store".
//
// * shipToStore.id, where id is any
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "ship-to-store".
//
// * sameDayDelivery.id, where id is any
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "same-day-delivery".
//
// * nextDayDelivery.id, where id is any
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "next-day-delivery".
//
// * customFulfillment1.id, where id is any
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "custom-type-1".
//
// * customFulfillment2.id, where id is any
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "custom-type-2".
//
// * customFulfillment3.id, where id is any
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "custom-type-3".
//
// * customFulfillment4.id, where id is any
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "custom-type-4".
//
// * customFulfillment5.id, where id is any
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
//
// "custom-type-5".
//
// If this field is set to an invalid value other than these, an
// INVALID_ARGUMENT error is returned.
VariantRollupKeys []string `protobuf:"bytes,17,rep,name=variant_rollup_keys,json=variantRollupKeys,proto3" json:"variant_rollup_keys,omitempty"`
// The categories associated with a category page. Required for category
// navigation queries to achieve good search quality. The format should be
// the same as
// [UserEvent.page_categories][google.cloud.retail.v2.UserEvent.page_categories];
//
// To represent full path of category, use '>' sign to separate different
// hierarchies. If '>' is part of the category name, please replace it with
// other character(s).
//
// Category pages include special pages such as sales or promotions. For
// instance, a special sale page may have the category hierarchy:
// "pageCategories" : ["Sales > 2017 Black Friday Deals"].
PageCategories []string `protobuf:"bytes,23,rep,name=page_categories,json=pageCategories,proto3" json:"page_categories,omitempty"`
// The search mode of the search request. If not specified, a single search
// request triggers both product search and faceted search.
SearchMode SearchRequest_SearchMode `protobuf:"varint,31,opt,name=search_mode,json=searchMode,proto3,enum=google.cloud.retail.v2.SearchRequest_SearchMode" json:"search_mode,omitempty"`
// The specification for personalization.
//
// Notice that if both
// [ServingConfig.personalization_spec][google.cloud.retail.v2.ServingConfig.personalization_spec]
// and
// [SearchRequest.personalization_spec][google.cloud.retail.v2.SearchRequest.personalization_spec]
// are set.
// [SearchRequest.personalization_spec][google.cloud.retail.v2.SearchRequest.personalization_spec]
// will override
// [ServingConfig.personalization_spec][google.cloud.retail.v2.ServingConfig.personalization_spec].
PersonalizationSpec *SearchRequest_PersonalizationSpec `protobuf:"bytes,32,opt,name=personalization_spec,json=personalizationSpec,proto3" json:"personalization_spec,omitempty"`
// The labels applied to a resource must meet the following requirements:
//
// - Each resource can have multiple labels, up to a maximum of 64.
// - Each label must be a key-value pair.
// - Keys have a minimum length of 1 character and a maximum length of 63
// characters and cannot be empty. Values can be empty and have a maximum
// length of 63 characters.
// - Keys and values can contain only lowercase letters, numeric characters,
// underscores, and dashes. All characters must use UTF-8 encoding, and
// international characters are allowed.
// - The key portion of a label must be unique. However, you can use the same
// key with multiple resources.
// - Keys must start with a lowercase letter or international character.
//
// See [Google Cloud
// Document](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements)
// for more details.
Labels map[string]string `protobuf:"bytes,34,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// The spell correction specification that specifies the mode under
// which spell correction will take effect.
SpellCorrectionSpec *SearchRequest_SpellCorrectionSpec `protobuf:"bytes,35,opt,name=spell_correction_spec,json=spellCorrectionSpec,proto3,oneof" json:"spell_correction_spec,omitempty"`
}
func (x *SearchRequest) Reset() {
*x = SearchRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest) ProtoMessage() {}
func (x *SearchRequest) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest.ProtoReflect.Descriptor instead.
func (*SearchRequest) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0}
}
func (x *SearchRequest) GetPlacement() string {
if x != nil {
return x.Placement
}
return ""
}
func (x *SearchRequest) GetBranch() string {
if x != nil {
return x.Branch
}
return ""
}
func (x *SearchRequest) GetQuery() string {
if x != nil {
return x.Query
}
return ""
}
func (x *SearchRequest) GetVisitorId() string {
if x != nil {
return x.VisitorId
}
return ""
}
func (x *SearchRequest) GetUserInfo() *UserInfo {
if x != nil {
return x.UserInfo
}
return nil
}
func (x *SearchRequest) GetPageSize() int32 {
if x != nil {
return x.PageSize
}
return 0
}
func (x *SearchRequest) GetPageToken() string {
if x != nil {
return x.PageToken
}
return ""
}
func (x *SearchRequest) GetOffset() int32 {
if x != nil {
return x.Offset
}
return 0
}
func (x *SearchRequest) GetFilter() string {
if x != nil {
return x.Filter
}
return ""
}
func (x *SearchRequest) GetCanonicalFilter() string {
if x != nil {
return x.CanonicalFilter
}
return ""
}
func (x *SearchRequest) GetOrderBy() string {
if x != nil {
return x.OrderBy
}
return ""
}
func (x *SearchRequest) GetFacetSpecs() []*SearchRequest_FacetSpec {
if x != nil {
return x.FacetSpecs
}
return nil
}
// Deprecated: Do not use.
func (x *SearchRequest) GetDynamicFacetSpec() *SearchRequest_DynamicFacetSpec {
if x != nil {
return x.DynamicFacetSpec
}
return nil
}
func (x *SearchRequest) GetBoostSpec() *SearchRequest_BoostSpec {
if x != nil {
return x.BoostSpec
}
return nil
}
func (x *SearchRequest) GetQueryExpansionSpec() *SearchRequest_QueryExpansionSpec {
if x != nil {
return x.QueryExpansionSpec
}
return nil
}
func (x *SearchRequest) GetVariantRollupKeys() []string {
if x != nil {
return x.VariantRollupKeys
}
return nil
}
func (x *SearchRequest) GetPageCategories() []string {
if x != nil {
return x.PageCategories
}
return nil
}
func (x *SearchRequest) GetSearchMode() SearchRequest_SearchMode {
if x != nil {
return x.SearchMode
}
return SearchRequest_SEARCH_MODE_UNSPECIFIED
}
func (x *SearchRequest) GetPersonalizationSpec() *SearchRequest_PersonalizationSpec {
if x != nil {
return x.PersonalizationSpec
}
return nil
}
func (x *SearchRequest) GetLabels() map[string]string {
if x != nil {
return x.Labels
}
return nil
}
func (x *SearchRequest) GetSpellCorrectionSpec() *SearchRequest_SpellCorrectionSpec {
if x != nil {
return x.SpellCorrectionSpec
}
return nil
}
// Response message for
// [SearchService.Search][google.cloud.retail.v2.SearchService.Search] method.
type SearchResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A list of matched items. The order represents the ranking.
Results []*SearchResponse_SearchResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
// Results of facets requested by user.
Facets []*SearchResponse_Facet `protobuf:"bytes,2,rep,name=facets,proto3" json:"facets,omitempty"`
// The estimated total count of matched items irrespective of pagination. The
// count of [results][google.cloud.retail.v2.SearchResponse.results] returned
// by pagination may be less than the
// [total_size][google.cloud.retail.v2.SearchResponse.total_size] that
// matches.
TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"`
// Contains the spell corrected query, if found. If the spell correction type
// is AUTOMATIC, then the search results are based on corrected_query.
// Otherwise the original query is used for search.
CorrectedQuery string `protobuf:"bytes,4,opt,name=corrected_query,json=correctedQuery,proto3" json:"corrected_query,omitempty"`
// A unique search token. This should be included in the
// [UserEvent][google.cloud.retail.v2.UserEvent] logs resulting from this
// search, which enables accurate attribution of search model performance.
AttributionToken string `protobuf:"bytes,5,opt,name=attribution_token,json=attributionToken,proto3" json:"attribution_token,omitempty"`
// A token that can be sent as
// [SearchRequest.page_token][google.cloud.retail.v2.SearchRequest.page_token]
// to retrieve the next page. If this field is omitted, there are no
// subsequent pages.
NextPageToken string `protobuf:"bytes,6,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
// Query expansion information for the returned results.
QueryExpansionInfo *SearchResponse_QueryExpansionInfo `protobuf:"bytes,7,opt,name=query_expansion_info,json=queryExpansionInfo,proto3" json:"query_expansion_info,omitempty"`
// The URI of a customer-defined redirect page. If redirect action is
// triggered, no search is performed, and only
// [redirect_uri][google.cloud.retail.v2.SearchResponse.redirect_uri] and
// [attribution_token][google.cloud.retail.v2.SearchResponse.attribution_token]
// are set in the response.
RedirectUri string `protobuf:"bytes,10,opt,name=redirect_uri,json=redirectUri,proto3" json:"redirect_uri,omitempty"`
// The fully qualified resource name of applied
// [controls](https://cloud.google.com/retail/docs/serving-control-rules).
AppliedControls []string `protobuf:"bytes,12,rep,name=applied_controls,json=appliedControls,proto3" json:"applied_controls,omitempty"`
// The invalid
// [SearchRequest.BoostSpec.condition_boost_specs][google.cloud.retail.v2.SearchRequest.BoostSpec.condition_boost_specs]
// that are not applied during serving.
InvalidConditionBoostSpecs []*SearchRequest_BoostSpec_ConditionBoostSpec `protobuf:"bytes,14,rep,name=invalid_condition_boost_specs,json=invalidConditionBoostSpecs,proto3" json:"invalid_condition_boost_specs,omitempty"`
}
func (x *SearchResponse) Reset() {
*x = SearchResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchResponse) ProtoMessage() {}
func (x *SearchResponse) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchResponse.ProtoReflect.Descriptor instead.
func (*SearchResponse) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{1}
}
func (x *SearchResponse) GetResults() []*SearchResponse_SearchResult {
if x != nil {
return x.Results
}
return nil
}
func (x *SearchResponse) GetFacets() []*SearchResponse_Facet {
if x != nil {
return x.Facets
}
return nil
}
func (x *SearchResponse) GetTotalSize() int32 {
if x != nil {
return x.TotalSize
}
return 0
}
func (x *SearchResponse) GetCorrectedQuery() string {
if x != nil {
return x.CorrectedQuery
}
return ""
}
func (x *SearchResponse) GetAttributionToken() string {
if x != nil {
return x.AttributionToken
}
return ""
}
func (x *SearchResponse) GetNextPageToken() string {
if x != nil {
return x.NextPageToken
}
return ""
}
func (x *SearchResponse) GetQueryExpansionInfo() *SearchResponse_QueryExpansionInfo {
if x != nil {
return x.QueryExpansionInfo
}
return nil
}
func (x *SearchResponse) GetRedirectUri() string {
if x != nil {
return x.RedirectUri
}
return ""
}
func (x *SearchResponse) GetAppliedControls() []string {
if x != nil {
return x.AppliedControls
}
return nil
}
func (x *SearchResponse) GetInvalidConditionBoostSpecs() []*SearchRequest_BoostSpec_ConditionBoostSpec {
if x != nil {
return x.InvalidConditionBoostSpecs
}
return nil
}
// A facet specification to perform faceted search.
type SearchRequest_FacetSpec struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The facet key specification.
FacetKey *SearchRequest_FacetSpec_FacetKey `protobuf:"bytes,1,opt,name=facet_key,json=facetKey,proto3" json:"facet_key,omitempty"`
// Maximum of facet values that should be returned for this facet. If
// unspecified, defaults to 20. The maximum allowed value is 300. Values
// above 300 will be coerced to 300.
//
// If this field is negative, an INVALID_ARGUMENT is returned.
Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"`
// List of keys to exclude when faceting.
//
// By default,
// [FacetKey.key][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.key]
// is not excluded from the filter unless it is listed in this field.
//
// Listing a facet key in this field allows its values to appear as facet
// results, even when they are filtered out of search results. Using this
// field does not affect what search results are returned.
//
// For example, suppose there are 100 products with the color facet "Red"
// and 200 products with the color facet "Blue". A query containing the
// filter "colorFamilies:ANY("Red")" and having "colorFamilies" as
// [FacetKey.key][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.key]
// would by default return only "Red" products in the search results, and
// also return "Red" with count 100 as the only color facet. Although there
// are also blue products available, "Blue" would not be shown as an
// available facet value.
//
// If "colorFamilies" is listed in "excludedFilterKeys", then the query
// returns the facet values "Red" with count 100 and "Blue" with count
// 200, because the "colorFamilies" key is now excluded from the filter.
// Because this field doesn't affect search results, the search results
// are still correctly filtered to return only "Red" products.
//
// A maximum of 100 values are allowed. Otherwise, an INVALID_ARGUMENT error
// is returned.
ExcludedFilterKeys []string `protobuf:"bytes,3,rep,name=excluded_filter_keys,json=excludedFilterKeys,proto3" json:"excluded_filter_keys,omitempty"`
// Enables dynamic position for this facet. If set to true, the position of
// this facet among all facets in the response is determined by Google
// Retail Search. It will be ordered together with dynamic facets if dynamic
// facets is enabled. If set to false, the position of this facet in the
// response will be the same as in the request, and it will be ranked before
// the facets with dynamic position enable and all dynamic facets.
//
// For example, you may always want to have rating facet returned in
// the response, but it's not necessarily to always display the rating facet
// at the top. In that case, you can set enable_dynamic_position to true so
// that the position of rating facet in response will be determined by
// Google Retail Search.
//
// Another example, assuming you have the following facets in the request:
//
// * "rating", enable_dynamic_position = true
//
// * "price", enable_dynamic_position = false
//
// * "brands", enable_dynamic_position = false
//
// And also you have a dynamic facets enable, which will generate a facet
// 'gender'. Then the final order of the facets in the response can be
// ("price", "brands", "rating", "gender") or ("price", "brands", "gender",
// "rating") depends on how Google Retail Search orders "gender" and
// "rating" facets. However, notice that "price" and "brands" will always be
// ranked at 1st and 2nd position since their enable_dynamic_position are
// false.
EnableDynamicPosition bool `protobuf:"varint,4,opt,name=enable_dynamic_position,json=enableDynamicPosition,proto3" json:"enable_dynamic_position,omitempty"`
}
func (x *SearchRequest_FacetSpec) Reset() {
*x = SearchRequest_FacetSpec{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest_FacetSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest_FacetSpec) ProtoMessage() {}
func (x *SearchRequest_FacetSpec) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest_FacetSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_FacetSpec) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 0}
}
func (x *SearchRequest_FacetSpec) GetFacetKey() *SearchRequest_FacetSpec_FacetKey {
if x != nil {
return x.FacetKey
}
return nil
}
func (x *SearchRequest_FacetSpec) GetLimit() int32 {
if x != nil {
return x.Limit
}
return 0
}
func (x *SearchRequest_FacetSpec) GetExcludedFilterKeys() []string {
if x != nil {
return x.ExcludedFilterKeys
}
return nil
}
func (x *SearchRequest_FacetSpec) GetEnableDynamicPosition() bool {
if x != nil {
return x.EnableDynamicPosition
}
return false
}
// The specifications of dynamically generated facets.
type SearchRequest_DynamicFacetSpec struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Mode of the DynamicFacet feature.
// Defaults to
// [Mode.DISABLED][google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.Mode.DISABLED]
// if it's unset.
Mode SearchRequest_DynamicFacetSpec_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.cloud.retail.v2.SearchRequest_DynamicFacetSpec_Mode" json:"mode,omitempty"`
}
func (x *SearchRequest_DynamicFacetSpec) Reset() {
*x = SearchRequest_DynamicFacetSpec{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest_DynamicFacetSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest_DynamicFacetSpec) ProtoMessage() {}
func (x *SearchRequest_DynamicFacetSpec) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest_DynamicFacetSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_DynamicFacetSpec) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 1}
}
func (x *SearchRequest_DynamicFacetSpec) GetMode() SearchRequest_DynamicFacetSpec_Mode {
if x != nil {
return x.Mode
}
return SearchRequest_DynamicFacetSpec_MODE_UNSPECIFIED
}
// Boost specification to boost certain items.
type SearchRequest_BoostSpec struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Condition boost specifications. If a product matches multiple conditions
// in the specifictions, boost scores from these specifications are all
// applied and combined in a non-linear way. Maximum number of
// specifications is 20.
ConditionBoostSpecs []*SearchRequest_BoostSpec_ConditionBoostSpec `protobuf:"bytes,1,rep,name=condition_boost_specs,json=conditionBoostSpecs,proto3" json:"condition_boost_specs,omitempty"`
// Whether to skip boostspec validation. If this field is set to true,
// invalid
// [BoostSpec.condition_boost_specs][google.cloud.retail.v2.SearchRequest.BoostSpec.condition_boost_specs]
// will be ignored and valid
// [BoostSpec.condition_boost_specs][google.cloud.retail.v2.SearchRequest.BoostSpec.condition_boost_specs]
// will still be applied.
SkipBoostSpecValidation *bool `protobuf:"varint,2,opt,name=skip_boost_spec_validation,json=skipBoostSpecValidation,proto3,oneof" json:"skip_boost_spec_validation,omitempty"`
}
func (x *SearchRequest_BoostSpec) Reset() {
*x = SearchRequest_BoostSpec{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest_BoostSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest_BoostSpec) ProtoMessage() {}
func (x *SearchRequest_BoostSpec) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest_BoostSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_BoostSpec) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 2}
}
func (x *SearchRequest_BoostSpec) GetConditionBoostSpecs() []*SearchRequest_BoostSpec_ConditionBoostSpec {
if x != nil {
return x.ConditionBoostSpecs
}
return nil
}
func (x *SearchRequest_BoostSpec) GetSkipBoostSpecValidation() bool {
if x != nil && x.SkipBoostSpecValidation != nil {
return *x.SkipBoostSpecValidation
}
return false
}
// Specification to determine under which conditions query expansion should
// occur.
type SearchRequest_QueryExpansionSpec struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The condition under which query expansion should occur. Default to
// [Condition.DISABLED][google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition.DISABLED].
Condition SearchRequest_QueryExpansionSpec_Condition `protobuf:"varint,1,opt,name=condition,proto3,enum=google.cloud.retail.v2.SearchRequest_QueryExpansionSpec_Condition" json:"condition,omitempty"`
// Whether to pin unexpanded results. If this field is set to true,
// unexpanded products are always at the top of the search results, followed
// by the expanded results.
PinUnexpandedResults bool `protobuf:"varint,2,opt,name=pin_unexpanded_results,json=pinUnexpandedResults,proto3" json:"pin_unexpanded_results,omitempty"`
}
func (x *SearchRequest_QueryExpansionSpec) Reset() {
*x = SearchRequest_QueryExpansionSpec{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest_QueryExpansionSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest_QueryExpansionSpec) ProtoMessage() {}
func (x *SearchRequest_QueryExpansionSpec) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest_QueryExpansionSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_QueryExpansionSpec) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 3}
}
func (x *SearchRequest_QueryExpansionSpec) GetCondition() SearchRequest_QueryExpansionSpec_Condition {
if x != nil {
return x.Condition
}
return SearchRequest_QueryExpansionSpec_CONDITION_UNSPECIFIED
}
func (x *SearchRequest_QueryExpansionSpec) GetPinUnexpandedResults() bool {
if x != nil {
return x.PinUnexpandedResults
}
return false
}
// The specification for personalization.
type SearchRequest_PersonalizationSpec struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Defaults to
// [Mode.AUTO][google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode.AUTO].
Mode SearchRequest_PersonalizationSpec_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.cloud.retail.v2.SearchRequest_PersonalizationSpec_Mode" json:"mode,omitempty"`
}
func (x *SearchRequest_PersonalizationSpec) Reset() {
*x = SearchRequest_PersonalizationSpec{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest_PersonalizationSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest_PersonalizationSpec) ProtoMessage() {}
func (x *SearchRequest_PersonalizationSpec) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest_PersonalizationSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_PersonalizationSpec) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 4}
}
func (x *SearchRequest_PersonalizationSpec) GetMode() SearchRequest_PersonalizationSpec_Mode {
if x != nil {
return x.Mode
}
return SearchRequest_PersonalizationSpec_MODE_UNSPECIFIED
}
// The specification for query spell correction.
type SearchRequest_SpellCorrectionSpec struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The mode under which spell correction should take effect to
// replace the original search query. Default to
// [Mode.AUTO][google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.Mode.AUTO].
Mode SearchRequest_SpellCorrectionSpec_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.cloud.retail.v2.SearchRequest_SpellCorrectionSpec_Mode" json:"mode,omitempty"`
}
func (x *SearchRequest_SpellCorrectionSpec) Reset() {
*x = SearchRequest_SpellCorrectionSpec{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest_SpellCorrectionSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest_SpellCorrectionSpec) ProtoMessage() {}
func (x *SearchRequest_SpellCorrectionSpec) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest_SpellCorrectionSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_SpellCorrectionSpec) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 5}
}
func (x *SearchRequest_SpellCorrectionSpec) GetMode() SearchRequest_SpellCorrectionSpec_Mode {
if x != nil {
return x.Mode
}
return SearchRequest_SpellCorrectionSpec_MODE_UNSPECIFIED
}
// Specifies how a facet is computed.
type SearchRequest_FacetSpec_FacetKey struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. Supported textual and numerical facet keys in
// [Product][google.cloud.retail.v2.Product] object, over which the facet
// values are computed. Facet key is case-sensitive.
//
// Allowed facet keys when
// [FacetKey.query][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.query]
// is not specified:
//
// * textual_field =
// - "brands"
// - "categories"
// - "genders"
// - "ageGroups"
// - "availability"
// - "colorFamilies"
// - "colors"
// - "sizes"
// - "materials"
// - "patterns"
// - "conditions"
// - "attributes.key"
// - "pickupInStore"
// - "shipToStore"
// - "sameDayDelivery"
// - "nextDayDelivery"
// - "customFulfillment1"
// - "customFulfillment2"
// - "customFulfillment3"
// - "customFulfillment4"
// - "customFulfillment5"
// - "inventory(place_id,attributes.key)"
//
// * numerical_field =
// - "price"
// - "discount"
// - "rating"
// - "ratingCount"
// - "attributes.key"
// - "inventory(place_id,price)"
// - "inventory(place_id,original_price)"
// - "inventory(place_id,attributes.key)"
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
// Set only if values should be bucketized into intervals. Must be set
// for facets with numerical values. Must not be set for facet with text
// values. Maximum number of intervals is 30.
Intervals []*Interval `protobuf:"bytes,2,rep,name=intervals,proto3" json:"intervals,omitempty"`
// Only get facet for the given restricted values. For example, when using
// "pickupInStore" as key and set restricted values to
// ["store123", "store456"], only facets for "store123" and "store456" are
// returned. Only supported on predefined textual fields, custom textual
// attributes and fulfillments. Maximum is 20.
//
// Must be set for the fulfillment facet keys:
//
// * pickupInStore
//
// * shipToStore
//
// * sameDayDelivery
//
// * nextDayDelivery
//
// * customFulfillment1
//
// * customFulfillment2
//
// * customFulfillment3
//
// * customFulfillment4
//
// * customFulfillment5
RestrictedValues []string `protobuf:"bytes,3,rep,name=restricted_values,json=restrictedValues,proto3" json:"restricted_values,omitempty"`
// Only get facet values that start with the given string prefix. For
// example, suppose "categories" has three values "Women > Shoe",
// "Women > Dress" and "Men > Shoe". If set "prefixes" to "Women", the
// "categories" facet will give only "Women > Shoe" and "Women > Dress".
// Only supported on textual fields. Maximum is 10.
Prefixes []string `protobuf:"bytes,8,rep,name=prefixes,proto3" json:"prefixes,omitempty"`
// Only get facet values that contains the given strings. For example,
// suppose "categories" has three values "Women > Shoe",
// "Women > Dress" and "Men > Shoe". If set "contains" to "Shoe", the
// "categories" facet will give only "Women > Shoe" and "Men > Shoe".
// Only supported on textual fields. Maximum is 10.
Contains []string `protobuf:"bytes,9,rep,name=contains,proto3" json:"contains,omitempty"`
// True to make facet keys case insensitive when getting faceting
// values with prefixes or contains; false otherwise.
CaseInsensitive bool `protobuf:"varint,10,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"`
// The order in which
// [SearchResponse.Facet.values][google.cloud.retail.v2.SearchResponse.Facet.values]
// are returned.
//
// Allowed values are:
//
// * "count desc", which means order by
// [SearchResponse.Facet.values.count][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.count]
// descending.
//
// * "value desc", which means order by
// [SearchResponse.Facet.values.value][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.value]
// descending.
//
// Only applies to textual facets.
//
// If not set, textual values are sorted in [natural
// order](https://en.wikipedia.org/wiki/Natural_sort_order); numerical
// intervals are sorted in the order given by
// [FacetSpec.FacetKey.intervals][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.intervals];
// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
// are sorted in the order given by
// [FacetSpec.FacetKey.restricted_values][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.restricted_values].
OrderBy string `protobuf:"bytes,4,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
// The query that is used to compute facet for the given facet key.
// When provided, it will override the default behavior of facet
// computation. The query syntax is the same as a filter expression. See
// [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter] for
// detail syntax and limitations. Notice that there is no limitation on
// [FacetKey.key][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.key]
// when query is specified.
//
// In the response,
// [SearchResponse.Facet.values.value][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.value]
// will be always "1" and
// [SearchResponse.Facet.values.count][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.count]
// will be the number of results that match the query.
//
// For example, you can set a customized facet for "shipToStore",
// where
// [FacetKey.key][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.key]
// is "customizedShipToStore", and
// [FacetKey.query][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.query]
// is "availability: ANY(\"IN_STOCK\") AND shipToStore: ANY(\"123\")".
// Then the facet will count the products that are both in stock and ship
// to store "123".
Query string `protobuf:"bytes,5,opt,name=query,proto3" json:"query,omitempty"`
// Returns the min and max value for each numerical facet intervals.
// Ignored for textual facets.
ReturnMinMax bool `protobuf:"varint,11,opt,name=return_min_max,json=returnMinMax,proto3" json:"return_min_max,omitempty"`
}
func (x *SearchRequest_FacetSpec_FacetKey) Reset() {
*x = SearchRequest_FacetSpec_FacetKey{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest_FacetSpec_FacetKey) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest_FacetSpec_FacetKey) ProtoMessage() {}
func (x *SearchRequest_FacetSpec_FacetKey) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest_FacetSpec_FacetKey.ProtoReflect.Descriptor instead.
func (*SearchRequest_FacetSpec_FacetKey) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 0, 0}
}
func (x *SearchRequest_FacetSpec_FacetKey) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *SearchRequest_FacetSpec_FacetKey) GetIntervals() []*Interval {
if x != nil {
return x.Intervals
}
return nil
}
func (x *SearchRequest_FacetSpec_FacetKey) GetRestrictedValues() []string {
if x != nil {
return x.RestrictedValues
}
return nil
}
func (x *SearchRequest_FacetSpec_FacetKey) GetPrefixes() []string {
if x != nil {
return x.Prefixes
}
return nil
}
func (x *SearchRequest_FacetSpec_FacetKey) GetContains() []string {
if x != nil {
return x.Contains
}
return nil
}
func (x *SearchRequest_FacetSpec_FacetKey) GetCaseInsensitive() bool {
if x != nil {
return x.CaseInsensitive
}
return false
}
func (x *SearchRequest_FacetSpec_FacetKey) GetOrderBy() string {
if x != nil {
return x.OrderBy
}
return ""
}
func (x *SearchRequest_FacetSpec_FacetKey) GetQuery() string {
if x != nil {
return x.Query
}
return ""
}
func (x *SearchRequest_FacetSpec_FacetKey) GetReturnMinMax() bool {
if x != nil {
return x.ReturnMinMax
}
return false
}
// Boost applies to products which match a condition.
type SearchRequest_BoostSpec_ConditionBoostSpec struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// An expression which specifies a boost condition. The syntax and
// supported fields are the same as a filter expression. See
// [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter] for
// detail syntax and limitations.
//
// Examples:
//
// * To boost products with product ID "product_1" or "product_2", and
// color
//
// "Red" or "Blue":
// * (id: ANY("product_1", "product_2")) AND (colorFamilies:
// ANY("Red","Blue"))
Condition string `protobuf:"bytes,1,opt,name=condition,proto3" json:"condition,omitempty"`
// Strength of the condition boost, which should be in [-1, 1]. Negative
// boost means demotion. Default is 0.0.
//
// Setting to 1.0 gives the item a big promotion. However, it does not
// necessarily mean that the boosted item will be the top result at all
// times, nor that other items will be excluded. Results could still be
// shown even when none of them matches the condition. And results that
// are significantly more relevant to the search query can still trump
// your heavily favored but irrelevant items.
//
// Setting to -1.0 gives the item a big demotion. However, results that
// are deeply relevant might still be shown. The item will have an
// upstream battle to get a fairly high ranking, but it is not blocked out
// completely.
//
// Setting to 0.0 means no boost applied. The boosting condition is
// ignored.
Boost float32 `protobuf:"fixed32,2,opt,name=boost,proto3" json:"boost,omitempty"`
}
func (x *SearchRequest_BoostSpec_ConditionBoostSpec) Reset() {
*x = SearchRequest_BoostSpec_ConditionBoostSpec{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchRequest_BoostSpec_ConditionBoostSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest_BoostSpec_ConditionBoostSpec) ProtoMessage() {}
func (x *SearchRequest_BoostSpec_ConditionBoostSpec) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest_BoostSpec_ConditionBoostSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_BoostSpec_ConditionBoostSpec) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{0, 2, 0}
}
func (x *SearchRequest_BoostSpec_ConditionBoostSpec) GetCondition() string {
if x != nil {
return x.Condition
}
return ""
}
func (x *SearchRequest_BoostSpec_ConditionBoostSpec) GetBoost() float32 {
if x != nil {
return x.Boost
}
return 0
}
// Represents the search results.
type SearchResponse_SearchResult struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// [Product.id][google.cloud.retail.v2.Product.id] of the searched
// [Product][google.cloud.retail.v2.Product].
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// The product data snippet in the search response. Only
// [Product.name][google.cloud.retail.v2.Product.name] is guaranteed to be
// populated.
//
// [Product.variants][google.cloud.retail.v2.Product.variants] contains the
// product variants that match the search query. If there are multiple
// product variants matching the query, top 5 most relevant product variants
// are returned and ordered by relevancy.
//
// If relevancy can be deternmined, use
// [matching_variant_fields][google.cloud.retail.v2.SearchResponse.SearchResult.matching_variant_fields]
// to look up matched product variants fields. If relevancy cannot be
// determined, e.g. when searching "shoe" all products in a shoe product can
// be a match, 5 product variants are returned but order is meaningless.
Product *Product `protobuf:"bytes,2,opt,name=product,proto3" json:"product,omitempty"`
// The count of matched
// [variant][google.cloud.retail.v2.Product.Type.VARIANT]
// [Product][google.cloud.retail.v2.Product]s.
MatchingVariantCount int32 `protobuf:"varint,3,opt,name=matching_variant_count,json=matchingVariantCount,proto3" json:"matching_variant_count,omitempty"`
// If a [variant][google.cloud.retail.v2.Product.Type.VARIANT]
// [Product][google.cloud.retail.v2.Product] matches the search query, this
// map indicates which [Product][google.cloud.retail.v2.Product] fields are
// matched. The key is the
// [Product.name][google.cloud.retail.v2.Product.name], the value is a field
// mask of the matched [Product][google.cloud.retail.v2.Product] fields. If
// matched attributes cannot be determined, this map will be empty.
//
// For example, a key "sku1" with field mask
// "products.color_info" indicates there is a match between
// "sku1" [ColorInfo][google.cloud.retail.v2.ColorInfo] and the query.
MatchingVariantFields map[string]*field_mask.FieldMask `protobuf:"bytes,4,rep,name=matching_variant_fields,json=matchingVariantFields,proto3" json:"matching_variant_fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// The rollup matching
// [variant][google.cloud.retail.v2.Product.Type.VARIANT]
// [Product][google.cloud.retail.v2.Product] attributes. The key is one of
// the
// [SearchRequest.variant_rollup_keys][google.cloud.retail.v2.SearchRequest.variant_rollup_keys].
// The values are the merged and de-duplicated
// [Product][google.cloud.retail.v2.Product] attributes. Notice that the
// rollup values are respect filter. For example, when filtering by
// "colorFamilies:ANY(\"red\")" and rollup "colorFamilies", only "red" is
// returned.
//
// For textual and numerical attributes, the rollup values is a list of
// string or double values with type
// [google.protobuf.ListValue][google.protobuf.ListValue]. For example, if
// there are two variants with colors "red" and "blue", the rollup values
// are
//
// { key: "colorFamilies"
// value {
// list_value {
// values { string_value: "red" }
// values { string_value: "blue" }
// }
// }
// }
//
// For [FulfillmentInfo][google.cloud.retail.v2.FulfillmentInfo], the rollup
// values is a double value with type
// [google.protobuf.Value][google.protobuf.Value]. For example,
// `{key: "pickupInStore.store1" value { number_value: 10 }}` means a there
// are 10 variants in this product are available in the store "store1".
VariantRollupValues map[string]*_struct.Value `protobuf:"bytes,5,rep,name=variant_rollup_values,json=variantRollupValues,proto3" json:"variant_rollup_values,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// Specifies previous events related to this product for this user based on
// [UserEvent][google.cloud.retail.v2.UserEvent] with same
// [SearchRequest.visitor_id][google.cloud.retail.v2.SearchRequest.visitor_id]
// or [UserInfo.user_id][google.cloud.retail.v2.UserInfo.user_id].
//
// This is set only when
// [SearchRequest.PersonalizationSpec.mode][google.cloud.retail.v2.SearchRequest.PersonalizationSpec.mode]
// is
// [SearchRequest.PersonalizationSpec.Mode.AUTO][google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode.AUTO].
//
// Possible values:
//
// * `purchased`: Indicates that this product has been purchased before.
PersonalLabels []string `protobuf:"bytes,7,rep,name=personal_labels,json=personalLabels,proto3" json:"personal_labels,omitempty"`
}
func (x *SearchResponse_SearchResult) Reset() {
*x = SearchResponse_SearchResult{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchResponse_SearchResult) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchResponse_SearchResult) ProtoMessage() {}
func (x *SearchResponse_SearchResult) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchResponse_SearchResult.ProtoReflect.Descriptor instead.
func (*SearchResponse_SearchResult) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{1, 0}
}
func (x *SearchResponse_SearchResult) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *SearchResponse_SearchResult) GetProduct() *Product {
if x != nil {
return x.Product
}
return nil
}
func (x *SearchResponse_SearchResult) GetMatchingVariantCount() int32 {
if x != nil {
return x.MatchingVariantCount
}
return 0
}
func (x *SearchResponse_SearchResult) GetMatchingVariantFields() map[string]*field_mask.FieldMask {
if x != nil {
return x.MatchingVariantFields
}
return nil
}
func (x *SearchResponse_SearchResult) GetVariantRollupValues() map[string]*_struct.Value {
if x != nil {
return x.VariantRollupValues
}
return nil
}
func (x *SearchResponse_SearchResult) GetPersonalLabels() []string {
if x != nil {
return x.PersonalLabels
}
return nil
}
// A facet result.
type SearchResponse_Facet struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The key for this facet. E.g., "colorFamilies" or "price" or
// "attributes.attr1".
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
// The facet values for this field.
Values []*SearchResponse_Facet_FacetValue `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"`
// Whether the facet is dynamically generated.
DynamicFacet bool `protobuf:"varint,3,opt,name=dynamic_facet,json=dynamicFacet,proto3" json:"dynamic_facet,omitempty"`
}
func (x *SearchResponse_Facet) Reset() {
*x = SearchResponse_Facet{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchResponse_Facet) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchResponse_Facet) ProtoMessage() {}
func (x *SearchResponse_Facet) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchResponse_Facet.ProtoReflect.Descriptor instead.
func (*SearchResponse_Facet) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{1, 1}
}
func (x *SearchResponse_Facet) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *SearchResponse_Facet) GetValues() []*SearchResponse_Facet_FacetValue {
if x != nil {
return x.Values
}
return nil
}
func (x *SearchResponse_Facet) GetDynamicFacet() bool {
if x != nil {
return x.DynamicFacet
}
return false
}
// Information describing query expansion including whether expansion has
// occurred.
type SearchResponse_QueryExpansionInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Bool describing whether query expansion has occurred.
ExpandedQuery bool `protobuf:"varint,1,opt,name=expanded_query,json=expandedQuery,proto3" json:"expanded_query,omitempty"`
// Number of pinned results. This field will only be set when expansion
// happens and
// [SearchRequest.QueryExpansionSpec.pin_unexpanded_results][google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.pin_unexpanded_results]
// is set to true.
PinnedResultCount int64 `protobuf:"varint,2,opt,name=pinned_result_count,json=pinnedResultCount,proto3" json:"pinned_result_count,omitempty"`
}
func (x *SearchResponse_QueryExpansionInfo) Reset() {
*x = SearchResponse_QueryExpansionInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchResponse_QueryExpansionInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchResponse_QueryExpansionInfo) ProtoMessage() {}
func (x *SearchResponse_QueryExpansionInfo) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchResponse_QueryExpansionInfo.ProtoReflect.Descriptor instead.
func (*SearchResponse_QueryExpansionInfo) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{1, 2}
}
func (x *SearchResponse_QueryExpansionInfo) GetExpandedQuery() bool {
if x != nil {
return x.ExpandedQuery
}
return false
}
func (x *SearchResponse_QueryExpansionInfo) GetPinnedResultCount() int64 {
if x != nil {
return x.PinnedResultCount
}
return 0
}
// A facet value which contains value names and their count.
type SearchResponse_Facet_FacetValue struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A facet value which contains values.
//
// Types that are assignable to FacetValue:
//
// *SearchResponse_Facet_FacetValue_Value
// *SearchResponse_Facet_FacetValue_Interval
FacetValue isSearchResponse_Facet_FacetValue_FacetValue `protobuf_oneof:"facet_value"`
// Number of items that have this facet value.
Count int64 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"`
// The minimum value in the
// [FacetValue.interval][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.interval].
// Only supported on numerical facets and returned if
// [SearchRequest.FacetSpec.FacetKey.return_min_max][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.return_min_max]
// is true.
MinValue float64 `protobuf:"fixed64,5,opt,name=min_value,json=minValue,proto3" json:"min_value,omitempty"`
// The maximum value in the
// [FacetValue.interval][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.interval].
// Only supported on numerical facets and returned if
// [SearchRequest.FacetSpec.FacetKey.return_min_max][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.return_min_max]
// is true.
MaxValue float64 `protobuf:"fixed64,6,opt,name=max_value,json=maxValue,proto3" json:"max_value,omitempty"`
}
func (x *SearchResponse_Facet_FacetValue) Reset() {
*x = SearchResponse_Facet_FacetValue{}
if protoimpl.UnsafeEnabled {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SearchResponse_Facet_FacetValue) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchResponse_Facet_FacetValue) ProtoMessage() {}
func (x *SearchResponse_Facet_FacetValue) ProtoReflect() protoreflect.Message {
mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchResponse_Facet_FacetValue.ProtoReflect.Descriptor instead.
func (*SearchResponse_Facet_FacetValue) Descriptor() ([]byte, []int) {
return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{1, 1, 0}
}
func (m *SearchResponse_Facet_FacetValue) GetFacetValue() isSearchResponse_Facet_FacetValue_FacetValue {
if m != nil {
return m.FacetValue
}
return nil
}
func (x *SearchResponse_Facet_FacetValue) GetValue() string {
if x, ok := x.GetFacetValue().(*SearchResponse_Facet_FacetValue_Value); ok {
return x.Value
}
return ""
}
func (x *SearchResponse_Facet_FacetValue) GetInterval() *Interval {
if x, ok := x.GetFacetValue().(*SearchResponse_Facet_FacetValue_Interval); ok {
return x.Interval
}
return nil
}
func (x *SearchResponse_Facet_FacetValue) GetCount() int64 {
if x != nil {
return x.Count
}
return 0
}
func (x *SearchResponse_Facet_FacetValue) GetMinValue() float64 {
if x != nil {
return x.MinValue
}
return 0
}
func (x *SearchResponse_Facet_FacetValue) GetMaxValue() float64 {
if x != nil {
return x.MaxValue
}
return 0
}
type isSearchResponse_Facet_FacetValue_FacetValue interface {
isSearchResponse_Facet_FacetValue_FacetValue()
}
type SearchResponse_Facet_FacetValue_Value struct {
// Text value of a facet, such as "Black" for facet "colorFamilies".
Value string `protobuf:"bytes,1,opt,name=value,proto3,oneof"`
}
type SearchResponse_Facet_FacetValue_Interval struct {
// Interval value for a facet, such as [10, 20) for facet "price".
Interval *Interval `protobuf:"bytes,2,opt,name=interval,proto3,oneof"`
}
func (*SearchResponse_Facet_FacetValue_Value) isSearchResponse_Facet_FacetValue_FacetValue() {}
func (*SearchResponse_Facet_FacetValue_Interval) isSearchResponse_Facet_FacetValue_FacetValue() {}
var File_google_cloud_retail_v2_search_service_proto protoreflect.FileDescriptor
var file_google_cloud_retail_v2_search_service_proto_rawDesc = []byte{
0x0a, 0x2b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72,
0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
0x69, 0x6c, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62,
0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32,
0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61,
0x69, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x22, 0xda, 0x17, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65,
0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x70,
0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e,
0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xfa, 0x41, 0x1e, 0x0a, 0x1c, 0x72,
0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73,
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x06, 0x62, 0x72, 0x61,
0x6e, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x22, 0x0a, 0x0a, 0x76, 0x69, 0x73,
0x69, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0,
0x41, 0x02, 0x52, 0x09, 0x76, 0x69, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a,
0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e,
0x66, 0x6f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09,
0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67,
0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70,
0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73,
0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x61, 0x6e, 0x6f,
0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x1c, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0f, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x46, 0x69, 0x6c,
0x74, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18,
0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x50,
0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x0c, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74,
0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73,
0x12, 0x68, 0x0a, 0x12, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x61, 0x63, 0x65,
0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x46, 0x61, 0x63, 0x65, 0x74,
0x53, 0x70, 0x65, 0x63, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69,
0x63, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4e, 0x0a, 0x0a, 0x62, 0x6f,
0x6f, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52,
0x09, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x6a, 0x0a, 0x14, 0x71, 0x75,
0x65, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70,
0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76,
0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70,
0x65, 0x63, 0x52, 0x12, 0x71, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69,
0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e,
0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x11, 0x20,
0x03, 0x28, 0x09, 0x52, 0x11, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c,
0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x63,
0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x09, 0x52,
0x0e, 0x70, 0x61, 0x67, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12,
0x51, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x1f,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65,
0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x61, 0x72,
0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f,
0x64, 0x65, 0x12, 0x6c, 0x0a, 0x14, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c,
0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x13, 0x70, 0x65, 0x72,
0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63,
0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e,
0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x72, 0x0a, 0x15, 0x73,
0x70, 0x65, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x73, 0x70, 0x65, 0x63, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x2e, 0x53, 0x70, 0x65, 0x6c, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f,
0x6e, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x13, 0x73, 0x70, 0x65, 0x6c, 0x6c, 0x43, 0x6f,
0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x88, 0x01, 0x01, 0x1a,
0xb2, 0x04, 0x0a, 0x09, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x5a, 0x0a,
0x09, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65,
0x63, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52,
0x08, 0x66, 0x61, 0x63, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d,
0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12,
0x30, 0x0a, 0x14, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x65,
0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4b, 0x65, 0x79,
0x73, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x79, 0x6e, 0x61,
0x6d, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
0x28, 0x08, 0x52, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69,
0x63, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xc8, 0x02, 0x0a, 0x08, 0x46, 0x61,
0x63, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x15, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a,
0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76,
0x61, 0x6c, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x2b, 0x0a,
0x11, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69,
0x63, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72,
0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72,
0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x6e,
0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x61,
0x73, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a,
0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72,
0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x24,
0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78,
0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x4d, 0x69,
0x6e, 0x4d, 0x61, 0x78, 0x1a, 0x9c, 0x01, 0x0a, 0x10, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63,
0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4f, 0x0a, 0x04, 0x6d, 0x6f, 0x64,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44,
0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e,
0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x37, 0x0a, 0x04, 0x4d, 0x6f,
0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41,
0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45,
0x44, 0x10, 0x02, 0x1a, 0xae, 0x02, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65,
0x63, 0x12, 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62,
0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65,
0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x73, 0x74,
0x53, 0x70, 0x65, 0x63, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42,
0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x40, 0x0a, 0x1a, 0x73, 0x6b, 0x69,
0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x76, 0x61, 0x6c,
0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52,
0x17, 0x73, 0x6b, 0x69, 0x70, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x56, 0x61,
0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x1a, 0x48, 0x0a, 0x12, 0x43,
0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65,
0x63, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05,
0x62, 0x6f, 0x6f, 0x73, 0x74, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x62,
0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xec, 0x01, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78,
0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x60, 0x0a, 0x09, 0x63,
0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x42,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e,
0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a,
0x16, 0x70, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x5f,
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x70,
0x69, 0x6e, 0x55, 0x6e, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75,
0x6c, 0x74, 0x73, 0x22, 0x3e, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x19, 0x0a, 0x15, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e,
0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44,
0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54,
0x4f, 0x10, 0x03, 0x1a, 0x9f, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c,
0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x52, 0x0a, 0x04, 0x6d,
0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22,
0x34, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x45, 0x5f,
0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a,
0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42,
0x4c, 0x45, 0x44, 0x10, 0x02, 0x1a, 0xa6, 0x01, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6c, 0x6c, 0x43,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x52, 0x0a,
0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69,
0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x6c, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64,
0x65, 0x22, 0x3b, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44,
0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
0x13, 0x0a, 0x0f, 0x53, 0x55, 0x47, 0x47, 0x45, 0x53, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4f, 0x4e,
0x4c, 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x1a, 0x39,
0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5b, 0x0a, 0x0a, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x41, 0x52, 0x43,
0x48, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x5f,
0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x17, 0x0a,
0x13, 0x46, 0x41, 0x43, 0x45, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f,
0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x73, 0x70, 0x65, 0x6c, 0x6c,
0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63,
0x22, 0xd7, 0x0d, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65,
0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x73, 0x12, 0x44, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72,
0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74,
0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61,
0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f,
0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x72, 0x72, 0x65,
0x63, 0x74, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79,
0x12, 0x2b, 0x0a, 0x11, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x74, 0x74,
0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a,
0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65,
0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x6b, 0x0a, 0x14, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x65,
0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x51, 0x75, 0x65, 0x72,
0x79, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x12,
0x71, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e,
0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75,
0x72, 0x69, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65,
0x63, 0x74, 0x55, 0x72, 0x69, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64,
0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52,
0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73,
0x12, 0x85, 0x01, 0x0a, 0x1d, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e,
0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65,
0x63, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76,
0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74,
0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x1a, 0x69, 0x6e,
0x76, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f,
0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x1a, 0x8a, 0x05, 0x0a, 0x0c, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67,
0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03,
0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x61,
0x72, 0x69, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x86, 0x01, 0x0a, 0x17, 0x6d,
0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f,
0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e,
0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61,
0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x46, 0x69, 0x65,
0x6c, 0x64, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x15, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f,
0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72,
0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x52, 0x13, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70,
0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52,
0x0e, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a,
0x64, 0x0a, 0x1a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x72, 0x69, 0x61,
0x6e, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x18, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xd5, 0x02, 0x0a, 0x05, 0x46, 0x61, 0x63, 0x65, 0x74, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x4f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63,
0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x2e,
0x46, 0x61, 0x63, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x61,
0x63, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x79, 0x6e, 0x61, 0x6d,
0x69, 0x63, 0x46, 0x61, 0x63, 0x65, 0x74, 0x1a, 0xc3, 0x01, 0x0a, 0x0a, 0x46, 0x61, 0x63, 0x65,
0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e,
0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76,
0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14,
0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06,
0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0d,
0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x6b, 0x0a,
0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x5f,
0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x70,
0x61, 0x6e, 0x64, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x69,
0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x52,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xd8, 0x02, 0x0a, 0x0d, 0x53,
0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xfb, 0x01, 0x0a,
0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9a, 0x01,
0x22, 0x45, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74,
0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73,
0x2f, 0x2a, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x2a, 0x7d,
0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x5a, 0x4e, 0x22, 0x49, 0x2f, 0x76,
0x32, 0x2f, 0x7b, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f,
0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x73,
0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x2a, 0x7d,
0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x1a, 0x49, 0xca, 0x41, 0x15, 0x72,
0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73,
0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77,
0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f,
0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0xc7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69,
0x6c, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65,
0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69,
0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76,
0x32, 0x3b, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0xa2, 0x02, 0x06, 0x52, 0x45, 0x54, 0x41, 0x49,
0x4c, 0xaa, 0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64,
0x2e, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x16, 0x47, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c,
0x5c, 0x56, 0x32, 0xea, 0x02, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c,
0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x3a, 0x3a, 0x56, 0x32, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_google_cloud_retail_v2_search_service_proto_rawDescOnce sync.Once
file_google_cloud_retail_v2_search_service_proto_rawDescData = file_google_cloud_retail_v2_search_service_proto_rawDesc
)
func file_google_cloud_retail_v2_search_service_proto_rawDescGZIP() []byte {
file_google_cloud_retail_v2_search_service_proto_rawDescOnce.Do(func() {
file_google_cloud_retail_v2_search_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_retail_v2_search_service_proto_rawDescData)
})
return file_google_cloud_retail_v2_search_service_proto_rawDescData
}
var file_google_cloud_retail_v2_search_service_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
var file_google_cloud_retail_v2_search_service_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
var file_google_cloud_retail_v2_search_service_proto_goTypes = []interface{}{
(SearchRequest_SearchMode)(0), // 0: google.cloud.retail.v2.SearchRequest.SearchMode
(SearchRequest_DynamicFacetSpec_Mode)(0), // 1: google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.Mode
(SearchRequest_QueryExpansionSpec_Condition)(0), // 2: google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition
(SearchRequest_PersonalizationSpec_Mode)(0), // 3: google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode
(SearchRequest_SpellCorrectionSpec_Mode)(0), // 4: google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.Mode
(*SearchRequest)(nil), // 5: google.cloud.retail.v2.SearchRequest
(*SearchResponse)(nil), // 6: google.cloud.retail.v2.SearchResponse
(*SearchRequest_FacetSpec)(nil), // 7: google.cloud.retail.v2.SearchRequest.FacetSpec
(*SearchRequest_DynamicFacetSpec)(nil), // 8: google.cloud.retail.v2.SearchRequest.DynamicFacetSpec
(*SearchRequest_BoostSpec)(nil), // 9: google.cloud.retail.v2.SearchRequest.BoostSpec
(*SearchRequest_QueryExpansionSpec)(nil), // 10: google.cloud.retail.v2.SearchRequest.QueryExpansionSpec
(*SearchRequest_PersonalizationSpec)(nil), // 11: google.cloud.retail.v2.SearchRequest.PersonalizationSpec
(*SearchRequest_SpellCorrectionSpec)(nil), // 12: google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec
nil, // 13: google.cloud.retail.v2.SearchRequest.LabelsEntry
(*SearchRequest_FacetSpec_FacetKey)(nil), // 14: google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey
(*SearchRequest_BoostSpec_ConditionBoostSpec)(nil), // 15: google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec
(*SearchResponse_SearchResult)(nil), // 16: google.cloud.retail.v2.SearchResponse.SearchResult
(*SearchResponse_Facet)(nil), // 17: google.cloud.retail.v2.SearchResponse.Facet
(*SearchResponse_QueryExpansionInfo)(nil), // 18: google.cloud.retail.v2.SearchResponse.QueryExpansionInfo
nil, // 19: google.cloud.retail.v2.SearchResponse.SearchResult.MatchingVariantFieldsEntry
nil, // 20: google.cloud.retail.v2.SearchResponse.SearchResult.VariantRollupValuesEntry
(*SearchResponse_Facet_FacetValue)(nil), // 21: google.cloud.retail.v2.SearchResponse.Facet.FacetValue
(*UserInfo)(nil), // 22: google.cloud.retail.v2.UserInfo
(*Interval)(nil), // 23: google.cloud.retail.v2.Interval
(*Product)(nil), // 24: google.cloud.retail.v2.Product
(*field_mask.FieldMask)(nil), // 25: google.protobuf.FieldMask
(*_struct.Value)(nil), // 26: google.protobuf.Value
}
var file_google_cloud_retail_v2_search_service_proto_depIdxs = []int32{
22, // 0: google.cloud.retail.v2.SearchRequest.user_info:type_name -> google.cloud.retail.v2.UserInfo
7, // 1: google.cloud.retail.v2.SearchRequest.facet_specs:type_name -> google.cloud.retail.v2.SearchRequest.FacetSpec
8, // 2: google.cloud.retail.v2.SearchRequest.dynamic_facet_spec:type_name -> google.cloud.retail.v2.SearchRequest.DynamicFacetSpec
9, // 3: google.cloud.retail.v2.SearchRequest.boost_spec:type_name -> google.cloud.retail.v2.SearchRequest.BoostSpec
10, // 4: google.cloud.retail.v2.SearchRequest.query_expansion_spec:type_name -> google.cloud.retail.v2.SearchRequest.QueryExpansionSpec
0, // 5: google.cloud.retail.v2.SearchRequest.search_mode:type_name -> google.cloud.retail.v2.SearchRequest.SearchMode
11, // 6: google.cloud.retail.v2.SearchRequest.personalization_spec:type_name -> google.cloud.retail.v2.SearchRequest.PersonalizationSpec
13, // 7: google.cloud.retail.v2.SearchRequest.labels:type_name -> google.cloud.retail.v2.SearchRequest.LabelsEntry
12, // 8: google.cloud.retail.v2.SearchRequest.spell_correction_spec:type_name -> google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec
16, // 9: google.cloud.retail.v2.SearchResponse.results:type_name -> google.cloud.retail.v2.SearchResponse.SearchResult
17, // 10: google.cloud.retail.v2.SearchResponse.facets:type_name -> google.cloud.retail.v2.SearchResponse.Facet
18, // 11: google.cloud.retail.v2.SearchResponse.query_expansion_info:type_name -> google.cloud.retail.v2.SearchResponse.QueryExpansionInfo
15, // 12: google.cloud.retail.v2.SearchResponse.invalid_condition_boost_specs:type_name -> google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec
14, // 13: google.cloud.retail.v2.SearchRequest.FacetSpec.facet_key:type_name -> google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey
1, // 14: google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.mode:type_name -> google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.Mode
15, // 15: google.cloud.retail.v2.SearchRequest.BoostSpec.condition_boost_specs:type_name -> google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec
2, // 16: google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.condition:type_name -> google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition
3, // 17: google.cloud.retail.v2.SearchRequest.PersonalizationSpec.mode:type_name -> google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode
4, // 18: google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.mode:type_name -> google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.Mode
23, // 19: google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.intervals:type_name -> google.cloud.retail.v2.Interval
24, // 20: google.cloud.retail.v2.SearchResponse.SearchResult.product:type_name -> google.cloud.retail.v2.Product
19, // 21: google.cloud.retail.v2.SearchResponse.SearchResult.matching_variant_fields:type_name -> google.cloud.retail.v2.SearchResponse.SearchResult.MatchingVariantFieldsEntry
20, // 22: google.cloud.retail.v2.SearchResponse.SearchResult.variant_rollup_values:type_name -> google.cloud.retail.v2.SearchResponse.SearchResult.VariantRollupValuesEntry
21, // 23: google.cloud.retail.v2.SearchResponse.Facet.values:type_name -> google.cloud.retail.v2.SearchResponse.Facet.FacetValue
25, // 24: google.cloud.retail.v2.SearchResponse.SearchResult.MatchingVariantFieldsEntry.value:type_name -> google.protobuf.FieldMask
26, // 25: google.cloud.retail.v2.SearchResponse.SearchResult.VariantRollupValuesEntry.value:type_name -> google.protobuf.Value
23, // 26: google.cloud.retail.v2.SearchResponse.Facet.FacetValue.interval:type_name -> google.cloud.retail.v2.Interval
5, // 27: google.cloud.retail.v2.SearchService.Search:input_type -> google.cloud.retail.v2.SearchRequest
6, // 28: google.cloud.retail.v2.SearchService.Search:output_type -> google.cloud.retail.v2.SearchResponse
28, // [28:29] is the sub-list for method output_type
27, // [27:28] is the sub-list for method input_type
27, // [27:27] is the sub-list for extension type_name
27, // [27:27] is the sub-list for extension extendee
0, // [0:27] is the sub-list for field type_name
}
func init() { file_google_cloud_retail_v2_search_service_proto_init() }
func file_google_cloud_retail_v2_search_service_proto_init() {
if File_google_cloud_retail_v2_search_service_proto != nil {
return
}
file_google_cloud_retail_v2_common_proto_init()
file_google_cloud_retail_v2_product_proto_init()
if !protoimpl.UnsafeEnabled {
file_google_cloud_retail_v2_search_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest_FacetSpec); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest_DynamicFacetSpec); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest_BoostSpec); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest_QueryExpansionSpec); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest_PersonalizationSpec); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest_SpellCorrectionSpec); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest_FacetSpec_FacetKey); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchRequest_BoostSpec_ConditionBoostSpec); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchResponse_SearchResult); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchResponse_Facet); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchResponse_QueryExpansionInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchResponse_Facet_FacetValue); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_google_cloud_retail_v2_search_service_proto_msgTypes[0].OneofWrappers = []interface{}{}
file_google_cloud_retail_v2_search_service_proto_msgTypes[4].OneofWrappers = []interface{}{}
file_google_cloud_retail_v2_search_service_proto_msgTypes[16].OneofWrappers = []interface{}{
(*SearchResponse_Facet_FacetValue_Value)(nil),
(*SearchResponse_Facet_FacetValue_Interval)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_google_cloud_retail_v2_search_service_proto_rawDesc,
NumEnums: 5,
NumMessages: 17,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_google_cloud_retail_v2_search_service_proto_goTypes,
DependencyIndexes: file_google_cloud_retail_v2_search_service_proto_depIdxs,
EnumInfos: file_google_cloud_retail_v2_search_service_proto_enumTypes,
MessageInfos: file_google_cloud_retail_v2_search_service_proto_msgTypes,
}.Build()
File_google_cloud_retail_v2_search_service_proto = out.File
file_google_cloud_retail_v2_search_service_proto_rawDesc = nil
file_google_cloud_retail_v2_search_service_proto_goTypes = nil
file_google_cloud_retail_v2_search_service_proto_depIdxs = nil
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6
// SearchServiceClient is the client API for SearchService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type SearchServiceClient interface {
// Performs a search.
//
// This feature is only available for users who have Retail Search enabled.
// Please enable Retail Search on Cloud Console before using this feature.
Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error)
}
type searchServiceClient struct {
cc grpc.ClientConnInterface
}
func NewSearchServiceClient(cc grpc.ClientConnInterface) SearchServiceClient {
return &searchServiceClient{cc}
}
func (c *searchServiceClient) Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error) {
out := new(SearchResponse)
err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.SearchService/Search", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// SearchServiceServer is the server API for SearchService service.
type SearchServiceServer interface {
// Performs a search.
//
// This feature is only available for users who have Retail Search enabled.
// Please enable Retail Search on Cloud Console before using this feature.
Search(context.Context, *SearchRequest) (*SearchResponse, error)
}
// UnimplementedSearchServiceServer can be embedded to have forward compatible implementations.
type UnimplementedSearchServiceServer struct {
}
func (*UnimplementedSearchServiceServer) Search(context.Context, *SearchRequest) (*SearchResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Search not implemented")
}
func RegisterSearchServiceServer(s *grpc.Server, srv SearchServiceServer) {
s.RegisterService(&_SearchService_serviceDesc, srv)
}
func _SearchService_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SearchRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(SearchServiceServer).Search(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/google.cloud.retail.v2.SearchService/Search",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SearchServiceServer).Search(ctx, req.(*SearchRequest))
}
return interceptor(ctx, in, info, handler)
}
var _SearchService_serviceDesc = grpc.ServiceDesc{
ServiceName: "google.cloud.retail.v2.SearchService",
HandlerType: (*SearchServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Search",
Handler: _SearchService_Search_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "google/cloud/retail/v2/search_service.proto",
}