diff --git a/clientlib/src/main/proto/yelp/nrtsearch/analysis.proto b/clientlib/src/main/proto/yelp/nrtsearch/analysis.proto index 7f75a2499..fc9384dd5 100644 --- a/clientlib/src/main/proto/yelp/nrtsearch/analysis.proto +++ b/clientlib/src/main/proto/yelp/nrtsearch/analysis.proto @@ -10,34 +10,53 @@ option go_package = "github.com/Yelp/nrtsearch"; package luceneserver; +// Name of analysis component and its parameters message NameAndParams { + // Name of the analysis component string name = 1; + // Parameters for the analysis component map params = 2; } +// Used to specify a conditional token filter message ConditionalTokenFilter { + // Condition to apply the token filter NameAndParams condition = 1; + // Token filters to apply if the condition is met repeated NameAndParams tokenFilters = 2; } // Used to be able to check if a value was set message IntObject { + // Value of the int int32 int = 1; } +// Custom analyzer definition message CustomAnalyzer { - repeated NameAndParams charFilters = 1; // Available char filters as of Lucene 8.2.0: htmlstrip, mapping, persian, patternreplace - NameAndParams tokenizer = 2; // Specify a Lucene tokenizer (https://lucene.apache.org/core/8_2_0/core/org/apache/lucene/analysis/Tokenizer.html). Possible options as of Lucene 8.2.0: keyword, letter, whitespace, edgeNGram, nGram, pathHierarchy, pattern, simplePatternSplit, simplePattern, classic, standard, uax29UrlEmail, thai, wikipedia. - repeated NameAndParams tokenFilters = 3; // Specify a Lucene token filter (https://lucene.apache.org/core/8_2_0/core/org/apache/lucene/analysis/TokenFilter.html). The possible options can be seen at https://lucene.apache.org/core/8_2_0/analyzers-common/org/apache/lucene/analysis/util/TokenFilterFactory.html and subclasses of TokenFilter at https://lucene.apache.org/core/8_2_0/core/org/apache/lucene/analysis/package-tree.html or by calling TokenFilterFactory.availableTokenFilters(). - repeated ConditionalTokenFilter conditionalTokenFilters = 4; // TODO: this is not properly supported yet, the only impl requires a protected terms file. Can support this properly later if needed - string defaultMatchVersion = 5; // Lucene version as LUCENE_X_Y_Z or X.Y.Z, LATEST by default - IntObject positionIncrementGap = 6; // Must be >= 0 - IntObject offsetGap = 7; // Must be >= 0 + // Specify a Lucene character filters (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/CharFilter.html) + repeated NameAndParams charFilters = 1; + // Specify a Lucene tokenizer (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/Tokenizer.html) + NameAndParams tokenizer = 2; + // Specify a Lucene token filter (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/TokenFilter.html) + repeated NameAndParams tokenFilters = 3; + // TODO: this is not properly supported yet, the only impl requires a protected terms file. + repeated ConditionalTokenFilter conditionalTokenFilters = 4; + // Lucene version as LUCENE_X_Y_Z or X.Y.Z, LATEST by default + string defaultMatchVersion = 5; + // Must be >= 0 + IntObject positionIncrementGap = 6; + // Must be >= 0 + IntObject offsetGap = 7; } +// Analyzer definition message Analyzer { oneof AnalyzerType { - string predefined = 1; // Analyzers predefined in Lucene, apart from standard and classic there are en.English, bn.Bengali, eu.Basque, etc. (names derived from Lucene's analyzer class names) + // Analyzers predefined in Lucene, apart from standard and classic there are en.English, bn.Bengali, + // eu.Basque, etc. (names derived from Lucene's analyzer class names) + string predefined = 1; + // Custom analyzer CustomAnalyzer custom = 2; } } \ No newline at end of file diff --git a/clientlib/src/main/proto/yelp/nrtsearch/luceneserver.proto b/clientlib/src/main/proto/yelp/nrtsearch/luceneserver.proto index b082469e1..4cbd7881e 100644 --- a/clientlib/src/main/proto/yelp/nrtsearch/luceneserver.proto +++ b/clientlib/src/main/proto/yelp/nrtsearch/luceneserver.proto @@ -20,26 +20,28 @@ option go_package = "github.com/Yelp/nrtsearch"; package luceneserver; -// The LuceneServer service definition. +// The LuceneServer service definition service LuceneServer { - /* Create an Index */ + // Create an Index. Optionally, initial settings and live settings may be specified. The index is created + // in the stopped state, unless specified. rpc createIndex (CreateIndexRequest) returns (CreateIndexResponse) { option (google.api.http) = { - post: "/v1/create_index" - body: "*" - }; - + post: "/v1/create_index" + body: "*" + }; } - /* Change global offline or online settings for this index. */ + + // Change live settings for an index. These settings may be changed while the index is started. Pass no + // settings changes to retrieve current live settings. rpc liveSettings (LiveSettingsRequest) returns (LiveSettingsResponse) { option (google.api.http) = { - post: "/v1/live_settings" - body: "*" - }; - + post: "/v1/live_settings" + body: "*" + }; } - /* Change global offline or online settings for this index. */ + // Change live settings for an index. These settings may be changed while the index is started. Pass no + // settings changes to retrieve current live settings. rpc liveSettingsV2 (LiveSettingsV2Request) returns (LiveSettingsV2Response) { option (google.api.http) = { post: "/v2/live_settings" @@ -48,44 +50,38 @@ service LuceneServer { get: "/v2/live_settings/{indexName}" } }; - } - /* Registers one or more fields. Fields must be registered before they can be added in a document (via @addDocument). - Pass a list of Fields and an indexName. Any number of fields may be registered in a single request, - and once a field is registered it cannot be changed (write-once). - This returns the full set of fields currently registered. */ + + // Adds one or more fields. Fields must be registered before they can be added in a document (via @addDocument). + // Pass a list of Fields and an indexName. Any number of fields may be registered in a single request, + // and once a field is registered it cannot be changed (write-once). + // This returns the full set of fields currently registered. rpc registerFields (FieldDefRequest) returns (FieldDefResponse) { option (google.api.http) = { - post: "/v1/register_fields" - body: "*" - }; - + post: "/v1/register_fields" + body: "*" + }; } - /* Adds one or more fields. Fields must be registered before they can be added in a document (via @addDocument). - Pass a list of Fields and an indexName. Any number of fields may be registered in a single request, - and once a field is registered it cannot be changed (write-once). - This returns the full set of fields currently registered. */ + // Adds one or more fields to an index. The behavior is currently the same as registerFields. rpc updateFields (FieldDefRequest) returns (FieldDefResponse) { option (google.api.http) = { - post: "/v1/update_fields" - body: "*" - }; - + post: "/v1/update_fields" + body: "*" + }; } - /* Change global offline settings for this index. - This returns the currently set settings; pass no settings changes to retrieve current settings.*/ + // Change offline settings for an index. The index must be in a stopped state to make settings changes. + // This returns the currently set settings. Passing no settings changes retrieves the current settings. rpc settings (SettingsRequest) returns (SettingsResponse) { option (google.api.http) = { - post: "/v1/settings" - body: "*" - }; - + post: "/v1/settings" + body: "*" + }; } - /* Change global offline settings for this index. - This returns the currently set settings; pass no settings to retrieve current settings.*/ + // Change offline settings for an index. The index must be in a stopped state to make settings changes. + // This returns the currently set settings. Passing no settings changes retrieves the current settings. rpc settingsV2 (SettingsV2Request) returns (SettingsV2Response) { option (google.api.http) = { post: "/v2/settings" @@ -94,19 +90,17 @@ service LuceneServer { get: "/v2/settings/{indexName}" } }; - } - /* Starts an index */ + // Starts an index rpc startIndex (StartIndexRequest) returns (StartIndexResponse) { option (google.api.http) = { - post: "/v1/start_index" - body: "*" - }; - + post: "/v1/start_index" + body: "*" + }; } - /* Starts an index using configuration in IndexStartConfig */ + // Starts an index based on configuration in IndexStartConfig rpc startIndexV2 (StartIndexV2Request) returns (StartIndexResponse) { option (google.api.http) = { post: "/v2/start_index" @@ -114,183 +108,180 @@ service LuceneServer { }; } - /* Stops an index */ + // Stops an index rpc stopIndex (StopIndexRequest) returns (DummyResponse) { option (google.api.http) = { - post: "/v1/stop_index" - body: "*" - }; - + post: "/v1/stop_index" + body: "*" + }; } - /* Reload state from the backend */ + + // Reload state from the backend. When run on replicas, this processes state changes made by the primary. + // New indices are created/started, and existing indices state is updated as needed. rpc reloadState (ReloadStateRequest) returns (ReloadStateResponse) { option (google.api.http) = { - post: "/v1/reload_state" - body: "*" - }; - + post: "/v1/reload_state" + body: "*" + }; } - /* Adds a stream of Documents */ + + // Adds a stream of Documents to an index. Changes are not durable until after the next successful @commit call. rpc addDocuments (stream AddDocumentRequest) returns (AddDocumentResponse) { option (google.api.http) = { - post: "/v1/add_documents" - body: "*" - }; - + post: "/v1/add_documents" + body: "*" + }; } - /* Refresh the latest searcher for an index */ + + // Refresh the latest searcher for an index rpc refresh (RefreshRequest) returns (RefreshResponse) { option (google.api.http) = { - post: "/v1/refresh" - body: "*" - }; - + post: "/v1/refresh" + body: "*" + }; } - /* Commits all pending changes to durable storage*/ + + // Commits all pending index data changes to durable storage rpc commit (CommitRequest) returns (CommitResponse) { option (google.api.http) = { - post: "/v1/commit" - body: "*" - }; - + post: "/v1/commit" + body: "*" + }; } - /* Retrieve index statistics*/ + + // Retrieve index statistics rpc stats (StatsRequest) returns (StatsResponse) { option (google.api.http) = { - post: "/v1/stats" - body: "*" - additional_bindings { - get: "/v1/stats/{indexName}" - } - }; - + post: "/v1/stats" + body: "*" + additional_bindings { + get: "/v1/stats/{indexName}" + } + }; } - /* Search */ + + // Execute a search query against an index rpc search (SearchRequest) returns (SearchResponse) { option (google.api.http) = { - post: "/v1/search" - body: "*" - }; + post: "/v1/search" + body: "*" + }; } - /* Search V2 */ + // Execute a search query against an index. Return response as an Any gRPC message. Useful if the client does + // not need to process the response and wants to avoid some deserialization work. rpc searchV2 (SearchRequest) returns (google.protobuf.Any) { option (google.api.http) = { - post: "/v2/search" - body: "*" - }; + post: "/v2/search" + body: "*" + }; } - /* Delete documents */ + // Delete documents from an index. Changes are not durable until after the next successful @commit call. rpc delete (AddDocumentRequest) returns (AddDocumentResponse) { option (google.api.http) = { - post: "/v1/delete" - body: "*" - }; - + post: "/v1/delete" + body: "*" + }; } - /* Delete documents matching a query */ + + // Delete documents matching a query from an index. Changes are not durable until after the next successful + // @commit call. rpc deleteByQuery (DeleteByQueryRequest) returns (AddDocumentResponse) { option (google.api.http) = { - post: "/v1/delete_by_query" - body: "*" - }; - + post: "/v1/delete_by_query" + body: "*" + }; } - /* Delete all documents for index */ + + // Delete all documents for index. Changes are not durable until after the next successful @commit call. rpc deleteAll (DeleteAllDocumentsRequest) returns (DeleteAllDocumentsResponse) { option (google.api.http) = { - post: "/v1/delete_all" - body: "*" - }; - + post: "/v1/delete_all" + body: "*" + }; } - /* Delete index */ + + // Delete index and all of its local data rpc deleteIndex (DeleteIndexRequest) returns (DeleteIndexResponse) { option (google.api.http) = { - post: "/v1/delete_index" - body: "*" - }; - + post: "/v1/delete_index" + body: "*" + }; } - /* - Creates a snapshot in the index, which is saved point-in-time view of the last commit - in the index such that no files referenced by that snapshot will be deleted by ongoing - indexing until the snapshot is released with @releaseSnapshot. Note that this will - reference the last commit, so be sure to call commit first if you have pending changes - that you'd like to be included in the snapshot. - This can be used for backup purposes, i.e. after creating the snapshot you can copy - all referenced files to backup storage, and then release the snapshot once complete. - To restore the backup, just copy all the files back and restart the server. - It can also be used for transactional purposes, i.e. if you sometimes need to search a - specific snapshot instead of the current live index. Creating a snapshot is very fast - (does not require any file copying), but over time it will consume extra disk space as - old segments are merged in the index. Be sure to release the snapshot once you're done. - Snapshots survive shutdown and restart of the server. Returns all protected filenames - referenced by this snapshot: these files will not change and will not be deleted until - the snapshot is released. This returns the directories and files referenced by the snapshot. - */ + // Creates a snapshot in the index, which is saved point-in-time view of the last commit + // in the index such that no files referenced by that snapshot will be deleted by ongoing + // indexing until the snapshot is released with @releaseSnapshot. Note that this will + // reference the last commit, so be sure to call commit first if you have pending changes + // that you'd like to be included in the snapshot. + // This can be used for backup purposes, i.e. after creating the snapshot you can copy + // all referenced files to backup storage, and then release the snapshot once complete. + // To restore the backup, just copy all the files back and restart the server. + // It can also be used for transactional purposes, i.e. if you sometimes need to search a + // specific snapshot instead of the current live index. Creating a snapshot is very fast + // (does not require any file copying), but over time it will consume extra disk space as + // old segments are merged in the index. Be sure to release the snapshot once you're done. + // Snapshots survive shutdown and restart of the server. Returns all protected filenames + // referenced by this snapshot: these files will not change and will not be deleted until + // the snapshot is released. This returns the directories and files referenced by the snapshot. rpc createSnapshot (CreateSnapshotRequest) returns (CreateSnapshotResponse) { option (google.api.http) = { - post: "/v1/create_snapshot" - body: "*" - }; - + post: "/v1/create_snapshot" + body: "*" + }; } - /* releases a snapshot previously created with @createSnapshot. */ + // Releases a snapshot previously created with @createSnapshot. rpc releaseSnapshot (ReleaseSnapshotRequest) returns (ReleaseSnapshotResponse) { option (google.api.http) = { - post: "/v1/release_snapshot" - body: "*" - }; - + post: "/v1/release_snapshot" + body: "*" + }; } - /* Gets all unreleased index gens of snapshots previously created with @createSnapshot. */ + // Gets all unreleased index gens of snapshots previously created with @createSnapshot rpc getAllSnapshotIndexGen (GetAllSnapshotGenRequest) returns (GetAllSnapshotGenResponse) { option (google.api.http) = { - get: "/v1/get_all_snapshot_index_gen/{indexName}" - }; - + get: "/v1/get_all_snapshot_index_gen/{indexName}" + }; } - /* Backup warming queries to S3 */ + // Backup warming queries for an index to S3 rpc backupWarmingQueries (BackupWarmingQueriesRequest) returns (BackupWarmingQueriesResponse) { option (google.api.http) = { - post: "/v1/backup_warming_queries" - body: "*" - }; + post: "/v1/backup_warming_queries" + body: "*" + }; } - /** Get information about this node */ + // Get information about this node rpc nodeInfo (NodeInfoRequest) returns (NodeInfoResponse) { option (google.api.http) = { - get: "/v1/node_info" - }; + get: "/v1/node_info" + }; } - /* Get the global state of the cluster */ + // Get the global state of the cluster rpc globalState (GlobalStateRequest) returns (GlobalStateResponse) { option (google.api.http) = { - post: "/v1/global_state" - body: "*" - }; + post: "/v1/global_state" + body: "*" + }; } - /* Gets the state of a started index, includes settings, live_settings, search schema */ + // Gets the state of an index, includes settings, live_settings, search schema rpc state (StateRequest) returns (StateResponse) { option (google.api.http) = { - post: "/v1/state" - body: "*" - additional_bindings { - get: "/v1/state/{indexName}" - } - }; + post: "/v1/state" + body: "*" + additional_bindings { + get: "/v1/state/{indexName}" + } + }; } - /* Gets the state information for an index, includes settings, live_settings, search schema */ + // Gets the state information for an index, includes settings, live_settings, search schema rpc indexState (IndexStateRequest) returns (IndexStateResponse) { option (google.api.http) = { post: "/v1/index_state" @@ -301,72 +292,63 @@ service LuceneServer { }; } - //GET methods - /* healthcheck */ + // Basic healthcheck, successful if the server is running rpc status (HealthCheckRequest) returns (HealthCheckResponse) { option (google.api.http) = { - get: "/v1/status" - }; - + get: "/v1/status" + }; } - /* - Checks if a node is ready to receive traffic by checking if all the indices (which can be preloaded) - are started. Can specify comma-separated list of index name to only check specific indices if needed. - */ + // Checks if a node is ready to receive traffic by checking if all the indices configured to be started + // are started. Can specify comma-separated list of index names to only check specific indices if needed. rpc ready (ReadyCheckRequest) returns (HealthCheckResponse) { option (google.api.http) = { get: "/v1/ready" additional_bindings { - get: "/v1/ready/{indexNames}" - } + get: "/v1/ready/{indexNames}" + } }; } - /* metrics */ + // Get prometheus metrics rpc metrics (google.protobuf.Empty) returns (google.api.HttpBody) { option (google.api.http) = { - get: "/status/metrics" - }; + get: "/status/metrics" + }; } - /* indices */ + + // Get information for all created indices rpc indices (IndicesRequest) returns (IndicesResponse) { option (google.api.http) = { - get: "/v1/indices" - }; + get: "/v1/indices" + }; } - /* - Forces merge policy to merge segments until there are <= maxNumSegments. The actual - merges to be executed are determined by the MergePolicy. This call will merge those - segments present in the index when the call started. If other threads are still - adding documents and flushing segments, those newly created segments will not be - merged unless you call forceMerge again. - */ + // Forces merge policy to merge segments until there are <= maxNumSegments. The actual + // merges to be executed are determined by the MergePolicy. This call will merge those + // segments present in the index when the call started. If other threads are still + // adding documents and flushing segments, those newly created segments will not be + // merged unless you call forceMerge again. rpc forceMerge(ForceMergeRequest) returns (ForceMergeResponse) { option (google.api.http) = { - post: "/v1/force_merge" - body: "*" - }; + post: "/v1/force_merge" + body: "*" + }; } - /* - Forces merging of all segments that have deleted documents. The actual merges to be - executed are determined by the MergePolicy. For example, the default TieredMergePolicy - will only pick a segment if the percentage of deleted docs is over 10%. - This method first flushes a new segment (if there are indexed documents), and applies - all buffered deletes. - */ + // Forces merging of all segments that have deleted documents. The actual merges to be + // executed are determined by the MergePolicy. For example, the default TieredMergePolicy + // will only pick a segment if the percentage of deleted docs is over 10%. + // This method first flushes a new segment (if there are indexed documents), and applies + // all buffered deletes. rpc forceMergeDeletes(ForceMergeDeletesRequest) returns (ForceMergeDeletesResponse) { option (google.api.http) = { - post: "/v1/force_merge_deletes" - body: "*" - }; + post: "/v1/force_merge_deletes" + body: "*" + }; } - /* - Process request in a plugin which implements CustomRequestPlugin interface. - */ + // Process request in a plugin which implements CustomRequestPlugin interface. rpc custom(CustomRequest) returns (CustomResponse) { option (google.api.http) = { post: "/v1/custom/{id}/{path}" @@ -375,44 +357,58 @@ service LuceneServer { } } -//The ReplicationServer service definition. +// The ReplicationServer service definition. service ReplicationServer { - /* Issued by replica on primary node when it comes up */ + // Issued by replica on primary node when it comes up rpc addReplicas (AddReplicaRequest) returns (AddReplicaResponse) { } - /* Issued by replica to receive CopyState from primary */ + + // Issued by replica to receive CopyState from primary rpc recvCopyState (CopyStateRequest) returns (CopyState) { } - /* Send a file as a stream in chunks*/ + + // Send a file as a stream in chunks rpc sendRawFile (stream RawFileChunk) returns (TransferStatus) { } - /* Receives a file as a stream in chunks. Typically issued by replica on primary */ + + // Receives a file as a stream in chunks. Typically issued by replica on primary rpc recvRawFile (FileInfo) returns (stream RawFileChunk) { } + + // Receives a file as a stream in chunks. Uses bidirectional streaming for acks to control in flight data. rpc recvRawFileV2 (stream FileInfo) returns (stream RawFileChunk) { } - /* Issued by primary on replica to inform it to start copying files either pre-warming (new merged segments) or when replica comes up first time */ + + // Issued by primary on replica to inform it to start copying files either pre-warming (new merged segments) + // or when replica comes up first time rpc copyFiles (CopyFiles) returns (stream TransferStatus) { } - /* Invoked externally to replica, to notify it that a new NRT point was just created on the primary */ + + // Invoked externally to replica, to notify it that a new NRT point was just created on the primary rpc newNRTPoint (NewNRTPoint) returns (TransferStatus) { } - /** Invoked externally to primary, to make all recent index operations searchable on the primary and, once copying is done, on the replicas */ + + // Invoked externally to primary, to make all recent index operations searchable on the primary and, + // once copying is done, on the replicas rpc writeNRTPoint (IndexName) returns (SearcherVersion) { } - /** Invoked externally to replica, to get the current Searcher version on replica.*/ + + // Invoked externally to replica, to get the current Searcher version on replica rpc getCurrentSearcherVersion (IndexName) returns (SearcherVersion) { } - /** Invoked externally on primary to find the list of replica nodes this node is connected to for binary replication per index */ + + // Invoked externally on primary to find the list of replica nodes this node is connected to for binary + // replication for an index rpc getConnectedNodes (GetNodesRequest) returns (GetNodesResponse) { } - } -/* Input to createIndex */ +// Input to createIndex message CreateIndexRequest { - string indexName = 1; // name of the index to be created. [a-zA-Z0-9]* - // Set if state/data already exists in the data backend. Provides the yyyyMMddHHmmssSSS formatted date-time string to identify and load the index. + // Name of the index to be created. [a-zA-Z0-9_-]+ + string indexName = 1; + // Set if state/data already exists in the data backend. Provides the yyyyMMddHHmmssSSS formatted date-time + // string to identify and load the index data. string existsWithId = 2; // Optional initial index settings IndexSettings settings = 3; @@ -424,176 +420,253 @@ message CreateIndexRequest { bool start = 6; } -/* Response from Server to createIndex */ +// Response from Server to createIndex message CreateIndexResponse { + // Message confirming creation of the index string response = 1; } -/* Input to liveSettings */ +// Input to liveSettings message LiveSettingsRequest { - string indexName = 1; // name of index whose liveSettings are to be updated. - //Longest time to wait before reopening IndexSearcher (i.e., periodic background reopen). + // Name of index whose liveSettings are to be updated + string indexName = 1; + // Longest time to wait before reopening IndexSearcher (i.e., periodic background reopen) double maxRefreshSec = 2; - //Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen). + // Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen) double minRefreshSec = 3; - //Non-current searchers older than this are pruned. + // Non-current searchers older than this are pruned double maxSearcherAgeSec = 4; - //Size (in MB) of IndexWriter's RAM buffer. + // Size (in MB) of IndexWriter's RAM buffer double indexRamBufferSizeMB = 5; - //Max number of documents to add at a time. + // Max number of documents to add at a time int32 addDocumentsMaxBufferLen = 6; - //Maximum number of documents allowed in a parallel search slice. + // Maximum number of documents allowed in a parallel search slice int32 sliceMaxDocs = 7; - //Maximum number of segments allowed in a parallel search slice. + // Maximum number of segments allowed in a parallel search slice int32 sliceMaxSegments = 8; - //Number of virtual shards to use for this index. + // Number of virtual shards to use for this index int32 virtualShards = 9; - //Maximum sized segment to produce during normal merging + // Maximum sized segment to produce during normal merging int32 maxMergedSegmentMB = 10; - //Number of segments per tier used by TieredMergePolicy + // Number of segments per tier used by TieredMergePolicy int32 segmentsPerTier = 11; - //Timeout value to used when not specified in the search request. + // Timeout value to used when not specified in the search request double defaultSearchTimeoutSec = 12; - //Timeout check every value to use when not specified in the search request. + // Timeout check every value to use when not specified in the search request int32 defaultSearchTimeoutCheckEvery = 13; - //Terminate after value to use when not specified in the search request. + // Terminate after value to use when not specified in the search request int32 defaultTerminateAfter = 14; } -/* Response from Server to liveSettings */ +// Response from Server to liveSettings message LiveSettingsResponse { + // Json string of updated IndexLiveSettings string response = 1; } +// Input to liveSettingsV2 message LiveSettingsV2Request { - // Index name + // Name of index whose liveSettings are to be updated string indexName = 1; // Live settings to merge into existing live settings, or unset to get current live settings IndexLiveSettings liveSettings = 2; - // When set to true, live settings changes are only applied to the local node. These changes are ephemeral, so will not persist through a restart. Also, the live settings returned in the response will contain the local overrides only when this flag is true. + // When set to true, live settings changes are only applied to the local node. These changes are ephemeral, + // so will not persist through a restart. Also, the live settings returned in the response will contain the + // local overrides only when this flag is true. bool local = 3; } +// Response from Server to liveSettingsV2 message LiveSettingsV2Response { // Current live settings, including default values IndexLiveSettings liveSettings = 1; } -//Type of the field +// Type of a Field enum FieldType { - ATOM = 0; // Text that's indexed as a single token, with DOCS_ONLY and omitting norms. - TEXT = 1; // Text that's tokenized and indexed, with the index-time analyzer. - BOOLEAN = 2; // Boolean value. - LONG = 3; //Long value. - INT = 4; // Int value. - DOUBLE = 5; //Double value. - FLOAT = 6; // Float value. - LAT_LON = 7; // A latitude/longitude point. - DATE_TIME = 8; // Date and optional time. - // TODO name this "dynamic" instead of "virtual"? - VIRTUAL = 9; // Virtual field defined with a JavaScript expression. - // TODO need tests for internal: - INTERNAL = 10; //Internal field, currently only for holding indexed facets data. - CUSTOM = 11; // Field type specified by name. - _ID = 12; // Field which will be used as document IDs - POLYGON = 13; // Geojson string for polygon - OBJECT = 14; // JSON + // Text that's indexed as a single token, with DOCS_ONLY and omitting norms + ATOM = 0; + // Text that's tokenized and indexed, with the index-time analyzer + TEXT = 1; + // Boolean value + BOOLEAN = 2; + // Long value + LONG = 3; + // Int value + INT = 4; + // Double value + DOUBLE = 5; + // Float value + FLOAT = 6; + // A latitude/longitude point + LAT_LON = 7; + // Date and optional time + DATE_TIME = 8; + // Virtual field defined with a Script + VIRTUAL = 9; + // Internal field, not currently used + INTERNAL = 10; + // Field type specified by name + CUSTOM = 11; + // Field type for document ID + _ID = 12; + // Geojson defined polygon + POLYGON = 13; + // Json object with child fields for each key + OBJECT = 14; // List of float values VECTOR = 15; - CONTEXT_SUGGEST = 16; //Field used for contextual suggest fields + // Field used for contextual suggest fields + CONTEXT_SUGGEST = 16; // Runtime fields RUNTIME = 17; } -//How the tokens should be indexed. +// How text tokens should be indexed enum IndexOptions { - DEFAULT = 0; // Use field default index options: ATOM=DOCS, TEXT=DOCS_FREQS_POSITIONS - DOCS = 1; // Index only doc ids (for binary search). - DOCS_FREQS = 2; // Index doc ids and term frequencies. - DOCS_FREQS_POSITIONS = 3; // Index doc ids, term frequencies and positions. - DOCS_FREQS_POSITIONS_OFFSETS = 4; // Index doc ids, term frequencies, positions and offsets. -} - -//Whether/how term vectors should be indexed. + // Use field default index options: ATOM=DOCS, TEXT=DOCS_FREQS_POSITIONS + DEFAULT = 0; + // Index only doc ids + DOCS = 1; + // Index doc ids and term frequencies + DOCS_FREQS = 2; + // Index doc ids, term frequencies and positions + DOCS_FREQS_POSITIONS = 3; + // Index doc ids, term frequencies, positions and offsets + DOCS_FREQS_POSITIONS_OFFSETS = 4; +} + +// Whether/how term vectors should be indexed enum TermVectors { - NO_TERMVECTORS = 0; // no term vectors are indexed - TERMS = 1; // Index terms and freqs only. - TERMS_POSITIONS = 2; // Index terms, freqs and positions. - TERMS_POSITIONS_OFFSETS = 3; // Index terms, freqs, positions and offsets. - TERMS_POSITIONS_OFFSETS_PAYLOADS = 4; // Index terms, freqs, positions, offsets and payloads -} - -//Whether/How this field should index facets, and how. + // No term vectors are indexed + NO_TERMVECTORS = 0; + // Index terms only + TERMS = 1; + // Index terms and positions + TERMS_POSITIONS = 2; + // Index terms, positions and offsets + TERMS_POSITIONS_OFFSETS = 3; + // Index terms, positions, offsets and payloads + TERMS_POSITIONS_OFFSETS_PAYLOADS = 4; +} + +// Whether/how facets should be indexed enum FacetType { - NO_FACETS = 0; //No facets are indexed. - FLAT = 1; //Facets are indexed with no hierarchy. - HIERARCHY = 2; //Facets are indexed and are hierarchical. - NUMERIC_RANGE = 3; //Compute facet counts for custom numeric ranges - SORTED_SET_DOC_VALUES = 4; //Uses SortedSetDocValuesFacetCounts, which must be flat but don't require a taxonomy index -} - + // No facets are indexed + NO_FACETS = 0; + // Facets are indexed with no hierarchy + FLAT = 1; + // Facets are indexed and are hierarchical + HIERARCHY = 2; + // Compute facet counts for custom numeric ranges + NUMERIC_RANGE = 3; + // Uses SortedSetDocValuesFacetCounts, which must be flat but don't require a taxonomy index + SORTED_SET_DOC_VALUES = 4; +} + +// Type of doc values to use for storing text values enum TextDocValuesType { + // Unspecified doc values type, use field default TEXT_DOC_VALUES_TYPE_UNSPECIFIED = 0; - // Binary docvalues support text longer than 32766 bytes and are good when most values are unique or you need to use aggregations on the field. + // Binary doc values support text longer than 32766 bytes and are good when most values are unique or + // you don't need to use sorting/aggregations on the field. TEXT_DOC_VALUES_TYPE_BINARY = 1; - // Sorted docvalues only store values shorter than 32766 bytes and are better when most values are not unique. + // Sorted doc values only store values shorter than 32766 bytes and are better when many values are not unique. TEXT_DOC_VALUES_TYPE_SORTED = 2; } +// Definition of a field in an index message Field { - string name = 1; // name of the field + // Name of the field + string name = 1; + // Type of the field FieldType type = 2; - bool search = 3; // True if the value should be available for searching (or numeric range searching, for a numeric field). - bool store = 4; // True if the value should be stored. - bool storeDocValues = 5; // Whether to index the value into doc values. - bool sort = 6 [deprecated = true]; // True if the value should be indexed into doc values for sorting. - bool tokenize = 7 [deprecated = true]; // This is now determined from the field type - bool group = 8 [deprecated = true]; // True if the value should be indexed into doc values for grouping. - bool multiValued = 9; // True if this field may sometimes have more than one value. - bool highlight = 10 [deprecated = true]; // This parameter would be ignored - bool omitNorms = 11; // True if norms are omitted. - string dateTimeFormat = 12; // Format string used to parse datetime fields, supported values are: 1) DateTimeFormatter format 2) "epoch_millis" (datetime value is epoch timestamp) 3) "strict_date_optional_time" (date with optional time in pattern of "yyyy-MM-dd['T'HH:mm:ss[.SSS]]") - string postingsFormat = 13; // Which PostingsFormat should be used to index this field. - string docValuesFormat = 14; // Which DocValuesFormat should be used to index this field. - IndexOptions indexOptions = 15; //How the tokens should be indexed. - Script script = 16; // The script definition defining a virtual field's value (only used with type=virtual). - //TODO make analyzers message types i.e. StandardAnalyzer, EnglishAnalyzer, CustomAnalyzer etc - Analyzer analyzer = 17; // Analyzer to use for this field during indexing and searching. - Analyzer indexAnalyzer = 18; // Analyzer to use for this field during indexing. - Analyzer searchAnalyzer = 19; //Analyzer to use for this field during searching. - TermVectors termVectors = 20; // Whether/how term vectors should be indexed. - //TODO make similarity message types i.d. DefaultSimilarity, CustomSimilarity, BM25Similarity; - string similarity = 21; // Which Similarity implementation to use for this field. - FacetType facet = 22; // Whether this field should index facets, and how. - string facetIndexFieldName = 23; // "Which underlying Lucene index field is used to hold any indexed taxonomy or sorted set doc values facets - google.protobuf.Struct additionalProperties = 24; // Additional info needed to configure field, used for CUSTOM types. - google.protobuf.Struct similarityParams = 25; // Parameters for similarity implementation. - repeated Field childFields = 26; // Child fields accessible by dot notation, index same data as parent - - bool eagerGlobalOrdinals = 27; // Compute facet global ordinals for this field up front, otherwise this is done lazily on first query. Currently only for SORTED_SET_DOC_VALUES facet type. - bool nestedDoc = 28; // True if object data should be indexed as child documents - int32 vectorDimensions = 29; // Dimensions for vector field type - // If field based global ordinals should be built up front, otherwise this is done lazily on first access. Currently only for fields with text doc values (TEXT/ATOM). + // True if the value should be available for searching (or numeric range searching, for a numeric fields) + bool search = 3; + // True if the value should be stored in the index + bool store = 4; + // True if the value should be indexed into doc values + bool storeDocValues = 5; + // No longer used + bool sort = 6 [deprecated = true]; + // No longer used + bool tokenize = 7 [deprecated = true]; + // No longer used + bool group = 8 [deprecated = true]; + // True if this field may have more than one value + bool multiValued = 9; + // No longer used + bool highlight = 10 [deprecated = true]; + // True if norms are omitted for text fields + bool omitNorms = 11; + // Format string used to parse datetime fields, supported values are: + // 1) DateTimeFormatter format + // 2) "epoch_millis" (datetime value is epoch timestamp) + // 3) "strict_date_optional_time" (date with optional time in pattern of "yyyy-MM-dd['T'HH:mm:ss[.SSS]]") + string dateTimeFormat = 12; + // Which PostingsFormat should be used to index this field, defaults to Lucene codec default + string postingsFormat = 13; + // Which DocValuesFormat should be used to index this field, defaults to Lucene codec default + string docValuesFormat = 14; + // How the tokens should be indexed for text fields + IndexOptions indexOptions = 15; + // The script definition defining a virtual field's value (only used with type=virtual) + Script script = 16; + // Analyzer to use for this field during indexing and searching, defaults to Lucene standard analyzer + Analyzer analyzer = 17; + // Analyzer to use for this field during indexing, if different from analyzer + Analyzer indexAnalyzer = 18; + // Analyzer to use for this field during searching, if different from analyzer + Analyzer searchAnalyzer = 19; + // Whether/how term vectors should be indexed + TermVectors termVectors = 20; + // Which Similarity implementation to use for this field, defaults to BM25Similarity + string similarity = 21; + // Whether/how facets should be indexed + FacetType facet = 22; + // Which underlying Lucene index field is used to hold any indexed taxonomy or sorted set doc values facets, + // defaults to '$_' + string facetIndexFieldName = 23; + // Additional info needed to configure field, used for CUSTOM types + google.protobuf.Struct additionalProperties = 24; + // Parameters for similarity implementation + google.protobuf.Struct similarityParams = 25; + // Child fields accessible by dot notation. For standard fields, this indexes the same data as the parent field. + // For object fields, this represents the subfields within the object. + repeated Field childFields = 26; + // Compute facet global ordinals for this field up front, otherwise this is done lazily on first query. + // Currently only for SORTED_SET_DOC_VALUES facet type. + bool eagerGlobalOrdinals = 27; + // True if object data should be indexed as child documents + bool nestedDoc = 28; + // Dimensions for vector field types + int32 vectorDimensions = 29; + // If field based global ordinals should be built up front, otherwise this is done lazily on first access. + // Currently only for fields with text doc values (TEXT/ATOM). bool eagerFieldGlobalOrdinals = 30; // Similarity type for search enabled VECTOR fields. This is a required option when search=true. // Accepts built in types: // 'l2_norm' : (1 / (1 + l2_norm(query, vector)^2)) // 'dot_product' : Float vector: ((1 + dot_product(query, vector)) / 2) (all vectors must be unit length) - // Byte vector : 0.5 + (dot_product(query, vector) / (32768 * dims)) (all vectors must have the same length) + // Byte vector : 0.5 + (dot_product(query, vector) / (32768 * dims)) + // (all vectors must have the same length) // 'cosine' : ((1 + cosine(query, vector)) / 2) // 'max_inner_product': when < 0 : 1 / (1 + -1 * max_inner_product(query, vector)) // when >= 0: max_inner_product(query, vector) + 1 string vectorSimilarity = 31; - // Indexing options for search enabled VECTOR field type. This is optional, defaulting to HNSW with m=16, ef_construction=100 when not set. + // Indexing options for search enabled VECTOR field type. This is optional, defaulting to HNSW with m=16, + // ef_construction=100 when not set. VectorIndexingOptions vectorIndexingOptions = 32; - // Specify docvalues type for TEXT/ATOM field types. This is optional, defaulting to SORTED when not set. Multivalued fields will always use SORTED_SET. + // Specify doc values type for TEXT/ATOM field types. This is optional, defaulting to SORTED when not set. + // Multivalued fields will always use SORTED_SET. TextDocValuesType textDocValuesType = 33; - // Element type for vector field, defaulting to FLOAT when not set. + // Element type for vector field, defaulting to FLOAT when not set VectorElementType vectorElementType = 34; // Position increment gap for indexing multi valued TEXT fields. Must be >= 0, defaulting to 100 when not set. optional int32 positionIncrementGap = 35; - // For arrays of strings, ignoreAbove will be applied for each array element separately and string elements longer than ignore_above will not be indexed or stored. - // This option is also useful for protecting against Lucene’s term byte-length limit of 32766 + // For arrays of strings, ignoreAbove will be applied for each array element separately and string elements longer + // than ignore_above will not be indexed or stored. This option is useful for protecting against Lucene’s + // term byte-length limit of 32766 optional int32 ignoreAbove = 36; } @@ -615,52 +688,73 @@ message VectorIndexingOptions { optional int32 hnsw_ef_construction = 3; // Number of threads to use for merging vector data, default: 1 optional int32 merge_workers = 4; - // The confidenceInterval for scalar quantizing the vectors. When unset, it is calculated based on the vector dimension. - // When `0`, the quantiles are dynamically determined by sampling many confidence intervals and determining the most accurate pair. - // Otherwise, the value must be between 0.9 and 1.0 (both inclusive). default: unset + // The confidenceInterval for scalar quantizing the vectors. When unset, it is calculated based on the + // vector dimension. When `0`, the quantiles are dynamically determined by sampling many confidence intervals and + // determining the most accurate pair. Otherwise, the value must be between 0.9 and 1.0 (both inclusive). + // default: unset optional float quantized_confidence_interval = 5; // The number of bits to use for quantizing the vectors. It can have the following values: // 4 - half byte // 7 - signed byte (default) optional int32 quantized_bits = 6; // Whether to compress the vectors, if true, the vectors that are quantized with <= 4 bits will be compressed into - // a single byte. If false, the vectors will be stored as is. This provides a trade-off of memory usage and speed. default: false + // a single byte. If false, the vectors will be stored as is. This provides a trade-off of memory usage and speed. + // default: false optional bool quantized_compress = 7; } -/* Input to registerFields */ +// Input to registerFields message FieldDefRequest { - string indexName = 1; // name of the index against which the field is to be created + // Name of index to add fields to + string indexName = 1; + // List of fields to add repeated Field field = 2; } -/* Response from Server for registerFields */ +// Response from Server for registerFields message FieldDefResponse { + // Json string of object containing all index fields (including newly added fields) string response = 1; } -/* Input to settings */ +// Input to settings message SettingsRequest { - string indexName = 1; // Index name - double mergeMaxMBPerSec = 2; // Rate limit merges to at most this many MB/sec - double nrtCachingDirectoryMaxMergeSizeMB = 3; // Largest merged segment size to cache in RAMDirectory, default: 5.0MB - double nrtCachingDirectoryMaxSizeMB = 4; // Largest overall size for all files cached in NRTCachingDirectory; set to -1 to disable NRTCachingDirectory default: 60.0MB - int32 concurrentMergeSchedulerMaxThreadCount = 5; // How many merge threads to allow at once - int32 concurrentMergeSchedulerMaxMergeCount = 6; // Maximum backlog of pending merges before indexing threads are stalled - SortFields indexSort = 7; // Index time sorting; can only be written once", SearchHandler.SORT_TYPE - bool indexVerbose = 8 [deprecated = true]; // Deprecated, moved to lucene config. Turn on IndexWriter's infoStream (to stdout) - bool indexMergeSchedulerAutoThrottle = 9; // Turn on/off the merge scheduler's auto throttling - string normsFormat = 10; // Which NormsFormat should be used for all indexed fields. default: Lucene80NormsFormat - // Base Directory implementation to use (NRTCachingDirectory will wrap this) either one of the core implementations (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory implementation that has a public constructor taking a single File argument default: FSDirectory + // Name of index whose settings are to be updated + string indexName = 1; + // No longer used + double mergeMaxMBPerSec = 2 [deprecated = true]; + // Largest merged segment size to cache in RAMDirectory, default: 5.0MB + double nrtCachingDirectoryMaxMergeSizeMB = 3; + // Largest overall size for all files cached in NRTCachingDirectory; set to -1 to disable NRTCachingDirectory, + // default: 60.0MB + double nrtCachingDirectoryMaxSizeMB = 4; + // How many merge threads to allow at once + int32 concurrentMergeSchedulerMaxThreadCount = 5; + // Maximum backlog of pending merges before indexing threads are stalled + int32 concurrentMergeSchedulerMaxMergeCount = 6; + // Index time sorting; can only be written once, default: no sorting + SortFields indexSort = 7; + // Deprecated, moved to lucene config. Turn on IndexWriter's infoStream (to stdout) + bool indexVerbose = 8 [deprecated = true]; + // Turn on/off the merge scheduler's auto throttling + bool indexMergeSchedulerAutoThrottle = 9; + // No longer used + string normsFormat = 10 [deprecated = true]; + // Base Directory implementation to use either one of the core implementations + // (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory + // implementation that has a public constructor taking a single File argument default: FSDirectory. + // This implementation will be wrapped by NRTCachingDirectory, if enabled and not using MMappedDirectory. string directory = 11; } -/* Settings Response returned from Server */ +// Settings Response returned from Server message SettingsResponse { + // Json string of updated IndexSettings string response = 1; } +// Input to settingsV2 message SettingsV2Request { // Index name string indexName = 1; @@ -668,353 +762,496 @@ message SettingsV2Request { IndexSettings settings = 2; } +// Response from Server for settingsV2 message SettingsV2Response { // Current index settings, including default values IndexSettings settings = 1; } -/* Start the index */ +// Input to startIndex message StartIndexRequest { - string indexName = 1; //index name - Mode mode = 2; //Standalone, NRT primary or replica mode to start this index. - int64 primaryGen = 3; //primary, the generation of this primary (should increment each time a new primary starts for this index) - string primaryAddress = 4; //replica, the IP address or host name of the remote primary - int32 port = 5; //replica, the TCP port of the remote primary - RestoreIndex restore = 6; // restore index from backup - // replica, location of discovery file containing primary host/port. Used if primaryAddress is empty. If port is specified in this request, it overrides the value in the file + // Index name + string indexName = 1; + // Mode to start this index: Standalone, NRT primary or replica + Mode mode = 2; + // Generation of this primary (should increase each time a new primary starts for this index). + // Pass -1 use generation based on epoch time. + int64 primaryGen = 3; //primary, + // Replica config: the IP address or host name of the remote primary + string primaryAddress = 4; + // Replica config: the TCP port of the remote primary + int32 port = 5; + // Restore index from backup + RestoreIndex restore = 6; + // Replica config: location of discovery file containing primary host/port. Used if primaryAddress is empty. + // If port is specified in this request, it overrides the port value in the file. string primaryDiscoveryFile = 7; } -/* Start the index using IndexStartConfig configuration */ +// Start the index using IndexStartConfig configuration message StartIndexV2Request { - // index name + // Index name string indexName = 1; } +// Index start mode enum Mode { + // Standalone index with no replication STANDALONE = 0; + // Primary index in an nrt cluster setup PRIMARY = 1; + // Replica index in an nrt cluster setup REPLICA = 2; } +// Response from Server for startIndex message StartIndexResponse { - int32 maxDoc = 1; //one greater than the largest possible document number - int32 numDocs = 2; //the number of documents in this index. - string segments = 3; //string representation of the IndexReader implementation - double startTimeMS = 4; //time taken to start the index + // One greater than the largest possible document number + int32 maxDoc = 1; + // Number of documents in this index + int32 numDocs = 2; + // String representation of the IndexReader implementation + string segments = 3; + // Time taken to start the index + double startTimeMS = 4; } +// Message representing a document to index message AddDocumentRequest { - string indexName = 1; //name of the index - //we use this wrapper object to represent each field as a multivalued field. + // Index name + string indexName = 1; + // Wrapper object to represent each field as a multivalued field. message MultiValuedField { - repeated string value = 1; //list of values for this field - //Facet paths/hierarchy to bucket these values by, if indexed field is of type Facet.HIERARCHY + // List of values for this field + repeated string value = 1; + // Facet paths/hierarchy to bucket these values by, if indexed field is of type Facet.HIERARCHY repeated FacetHierarchyPath faceHierarchyPaths = 2; } - map fields = 3; //map of field name to a list of string values. + // Map of field name to a list of string values + map fields = 3; } +// Path for hierarchical facets message FacetHierarchyPath { + // Facet path repeated string value = 1; } +// Response from Server for addDocument message AddDocumentResponse { + // Lucene index sequence number after adding the documents string genId = 1; // Unique identifier for the primary instance that processed the request string primaryId = 2; } +// Input to refresh message RefreshRequest { - string indexName = 1; //index name to be refreshed + // Index name to be refreshed + string indexName = 1; } +// Response from Server for refresh message RefreshResponse { - double refreshTimeMS = 1; //time taken in milliseconds to refresh the index + // Time taken in milliseconds to refresh the index + double refreshTimeMS = 1; } +// Input to commit message CommitRequest { - string indexName = 1; //index to commit + // Index name to commit + string indexName = 1; } +// Response from Server for commit message CommitResponse { - /* sequence number of the last operation in the commit. All sequence numbers less than this value - will be reflected in the commit, and all others will not.*/ + // Sequence number of the last operation in the commit. All sequence numbers less than this value + // will be reflected in the commit, and all others will not. int64 gen = 1; // Unique identifier for the primary instance that processed the request string primaryId = 2; } +// Input to stats message StatsRequest { - string indexName = 1; //retrieve stats of the index + // Index name to retrieve stats + string indexName = 1; } +// Response from Server for stats message StatsResponse { - int32 ord = 1; //shard ordinal - /* The total number of docs in this index, including docs not yet flushed (still in the RAM buffer), - not counting deletions.*/ + // Shard ordinal + int32 ord = 1; + // The total number of docs in this index, including docs not yet flushed (still in the RAM buffer), + // not counting deletions. int32 maxDoc = 2; - /** - * The total number of docs in this index, including - * docs not yet flushed (still in the RAM buffer), and - * including deletions. NOTE: buffered deletions - * are not counted. If you really need these to be - * counted you should call {@link IndexWriter#commit()} first. - */ + // The total number of docs in this index, including docs not yet flushed (still in the RAM buffer), and + // including deletions. NOTE: buffered deletions are not counted. If you really need these to be + // counted you should call {@link IndexWriter#commit()} first. int32 numDocs = 3; - int64 dirSize = 4; //size of the this indexDir - string state = 5; //state of the index - Taxonomy taxonomy = 6; //Taxonomy(facets) stats - repeated Searcher searchers = 7; //Searcher stats - Searcher currentSearcher = 8; //Current Searcher stats -} - + // The total size of this indexDir + int64 dirSize = 4; + // The state of the index + string state = 5; + // Taxonomy(facets) stats + Taxonomy taxonomy = 6; + // Searcher stats + repeated Searcher searchers = 7; + // Current Searcher stats + Searcher currentSearcher = 8; +} + +// Taxonomy stats message Taxonomy { - int32 numOrds = 1; //number of docs in this taxonomy reader - string segments = 2; //string representation of segments + // Number of docs in this taxonomy reader + int32 numOrds = 1; + // String representation of segments + string segments = 2; } +// Index searcher stats message Searcher { - /* the version recorded in the commit that the reader opened. - This version is advanced every time a change is made with IndexWriter.*/ + // Version recorded in the commit that the reader opened. This version is advanced every time a change + // is made with IndexWriter. int64 version = 1; - int32 numDocs = 2; //total number of docs in this index - string segments = 3; //string representation of segments - double staleAgeSeconds = 4; //how much time has passed since this searcher was the current (live) searcher - int32 numSegments = 5; // number of segments, filled only if Searcher has StandardDirectoryReader + // Total number of docs in this index + int32 numDocs = 2; + // String representation of segments + string segments = 3; + // How much time has passed since this searcher was the current (live) searcher + double staleAgeSeconds = 4; + // Number of segments, filled only if Searcher has StandardDirectoryReader + int32 numSegments = 5; } +// Input to deleteAllDocuments message DeleteAllDocumentsRequest { - string indexName = 1; //index to delete all documents from + // Index name to delete all documents from + string indexName = 1; } +// Response from Server for deleteAllDocuments message DeleteAllDocumentsResponse { - string genId = 1; //Returns the index generation (indexGen) that reflects the deletion. + // Lucene index sequence number after deleting all documents + string genId = 1; } +// Input to deleteIndex message DeleteIndexRequest { - string indexName = 1; //index to delete + // Index name to delete + string indexName = 1; } +// Response from Server for deleteIndex message DeleteIndexResponse { - string ok = 1; //Returns "ok" string on success + // Returns "ok" string on success + string ok = 1; } +// Response with no content message DummyResponse { - string ok = 1; // returns "ok" string on success + // Returns "ok" string on success + string ok = 1; } +// Input to stopIndex message StopIndexRequest { - string indexName = 1; //index name to stop + // Index name to stop + string indexName = 1; } +// Input to reloadState message ReloadStateRequest { } +// Response from Server for reloadState message ReloadStateResponse { } -/* -Creates a snapshot in the index, which is saved point-in-time view of the last commit in the -index such that no files referenced by that snapshot will be deleted by ongoing indexing until -the snapshot is released with @releaseSnapshot. Note that this will reference the last commit, - so be sure to call commit first if you have pending changes that you'd like to be included in - the snapshot.

This can be used for backup purposes, i.e. after creating the snapshot you can - copy all referenced files to backup storage, and then release the snapshot once complete. - To restore the backup, just copy all the files back and restart the server. It can also - be used for transactional purposes, i.e. if you sometimes need to search a specific snapshot - instead of the current live index.

Creating a snapshot is very fast (does not require any - file copying), but over time it will consume extra disk space as old segments are merged in - the index. Be sure to release the snapshot once you're done. Snapshots survive shutdown - and restart of the server. Returns all protected filenames referenced by this snapshot: - these files will not change and will not be deleted until the snapshot is released. - This returns the directories and files referenced by the snapshot. - */ +// Creates a snapshot in the index, which is saved point-in-time view of the last commit in the +// index such that no files referenced by that snapshot will be deleted by ongoing indexing until +// the snapshot is released with @releaseSnapshot. Note that this will reference the last commit, +// so be sure to call commit first if you have pending changes that you'd like to be included in +// the snapshot.

This can be used for backup purposes, i.e. after creating the snapshot you can +// copy all referenced files to backup storage, and then release the snapshot once complete. +// To restore the backup, just copy all the files back and restart the server. It can also +// be used for transactional purposes, i.e. if you sometimes need to search a specific snapshot +// instead of the current live index.

Creating a snapshot is very fast (does not require any +// file copying), but over time it will consume extra disk space as old segments are merged in +// the index. Be sure to release the snapshot once you're done. Snapshots survive shutdown +// and restart of the server. Returns all protected filenames referenced by this snapshot: +// these files will not change and will not be deleted until the snapshot is released. +// This returns the directories and files referenced by the snapshot. message CreateSnapshotRequest { - string indexName = 1; //name of the index to snapshot; - bool openSearcher = 2; //Pass true if you intend to do searches against this snapshot, by passing searcher: {snapshot: X} to @search + // Name of the index to snapshot + string indexName = 1; + // Pass true if you intend to do searches against this snapshot, by passing searcher: {snapshot: X} to @search + bool openSearcher = 2; } +// Response from Server for createSnapshot message CreateSnapshotResponse { + // List of index files referenced by this snapshot repeated string indexFiles = 1; + // List of taxonomy index files referenced by this snapshot repeated string taxonomyFiles = 2; + // List of state index files referenced by this snapshot repeated string stateFiles = 3; + // Snapshot id SnapshotId snapshotId = 4; } +// Snapshot id message SnapshotId { + // Index generation int64 indexGen = 1; + // Taxonomy index generation int64 taxonomyGen = 2; + // State generation int64 stateGen = 3; } +// Input to releaseSnapshot message ReleaseSnapshotRequest { - string indexName = 1; // name of snapshotted index to be released - SnapshotId snapshotId = 2; //The id for this snapshot; this must have been previously created via @createSnapshot. + // Name of the index to release snapshot + string indexName = 1; + // Id of snapshot to release, previously returned by @createSnapshot + SnapshotId snapshotId = 2; } +// Response from Server for releaseSnapshot message ReleaseSnapshotResponse { - bool success = 1; //true if successful + // True if successful + bool success = 1; } +// Input to getAllSnapshotGen message GetAllSnapshotGenRequest { - string indexName = 1; // name of index whose snapshotted index gens are needed + // Name of the index to get snapshot gens + string indexName = 1; } +// Response from Server for getAllSnapshotGen message GetAllSnapshotGenResponse { - repeated int64 indexGens = 1; // list of snapshotted index gens + // List of snapshot gens + repeated int64 indexGens = 1; } +// Input to backupWarmingQueries message BackupWarmingQueriesRequest { - string index = 1; // Index whose warming queries to backup - string serviceName = 2; // remote storage namespace qualifier for service - int32 numQueriesThreshold = 3; // optional; minimum # of queries required to backup warming queries - int32 uptimeMinutesThreshold = 4; // optional; minimum # of minutes uptime to backup warming queries + // Index whose warming queries to backup + string index = 1; + // Remote storage namespace qualifier for service + string serviceName = 2; + // Optional; minimum # of queries required to backup warming queries + int32 numQueriesThreshold = 3; + // Optional; minimum # of minutes uptime to backup warming queries + int32 uptimeMinutesThreshold = 4; } +// Response from Server for backupWarmingQueries message BackupWarmingQueriesResponse { } +// Input to indices message IndicesRequest { } +// Response from Server for indices message IndicesResponse { - repeated IndexStatsResponse indicesResponse = 1; //list of IndexStatsResponse + // List of index stats + repeated IndexStatsResponse indicesResponse = 1; } +// Index stats response message IndexStatsResponse { - string indexName = 1; //index name - StatsResponse statsResponse = 2; //stats for an index + // Index name + string indexName = 1; + // Index stats + StatsResponse statsResponse = 2; } +// Index restore information message RestoreIndex { - string serviceName = 1; // remote storage namespace qualifier for service - string resourceName = 2; //remote storage namespace qualifier for resource e.g. indexName - bool deleteExistingData = 3; // delete any existing data for the index + // Remote storage namespace qualifier for service + string serviceName = 1; + // Remote storage namespace qualifier for resource e.g. indexName + string resourceName = 2; + // Delete any existing local data for the index + bool deleteExistingData = 3; } +// Input to nodeInfo message NodeInfoRequest { } +// Response from Server for nodeInfo message NodeInfoResponse { - // node name + // Node name string node_name = 1; - // service name + // Service name string service_name = 2; - // host name + // Host name string host_name = 3; - // nrtsearch version + // Nrtsearch version string version = 4; - // node ephemeral id + // Node ephemeral id string ephemeral_id = 5; } +// Input to globalState message GlobalStateRequest { } +// Response from Server for globalState message GlobalStateResponse { - // cluster global state + // Cluster global state GlobalStateInfo global_state = 1; } +// Input to state message StateRequest { - string indexName = 1; //index name + // Index name to retrieve state + string indexName = 1; } +// Response from Server for state message StateResponse { - string response = 1; //json string of the current index state + // Json string of the current index state + string response = 1; } +// Input to indexState message IndexStateRequest { - // index name + // Index name string index_name = 1; } +// Response from Server for indexState message IndexStateResponse { - // index state + // Index state IndexStateInfo index_state = 1; } +// Input to addReplica message AddReplicaRequest { - int32 magicNumber = 1; //magic number send on all requests since these are meant for internal communication only - string indexName = 2; //index name - int32 replicaId = 3 [deprecated = true]; //replica Id - string hostName = 4; // replica host name - int32 port = 5; // replica port number - // index id + // Magic number send on all requests since these are meant for internal communication only + int32 magicNumber = 1; + // Index name + string indexName = 2; + // No longer used + int32 replicaId = 3 [deprecated = true]; + // Replica host name + string hostName = 4; + // Replica port number + int32 port = 5; + // Index id string indexId = 6; - // node name + // Node name string nodeName = 7; } +// Response from Server for addReplica message AddReplicaResponse { - string ok = 1; //Returns "ok" string on success + // Returns "ok" string on success + string ok = 1; } -/* Holds incRef'd file level details for one point-in-time segment infos on the primary node. */ +// Holds incRef'd file level details for one point-in-time segment infos on the primary node message CopyState { - int32 infoBytesLength = 1; // infoBytes len - bytes infoBytes = 2; //infoBytes - int64 gen = 3; //gen - int64 version = 4; //versiom - FilesMetadata filesMetadata = 5; //fileMetadata - int32 completedMergeFilesSize = 6; //completed merged files - repeated string completedMergeFiles = 7; //names of files that finished merge - int64 primaryGen = 8; //primary Gen -} - + // InfoBytes length + int32 infoBytesLength = 1; + // InfoBytes + bytes infoBytes = 2; + // Index generation + int64 gen = 3; + // Index version + int64 version = 4; + // Index file metadata + FilesMetadata filesMetadata = 5; + // Completed merged files size + int32 completedMergeFilesSize = 6; + // Completed merged files + repeated string completedMergeFiles = 7; + // Primary generation + int64 primaryGen = 8; +} + +// Metadata for multiple index files message FilesMetadata { int32 numFiles = 1; //number of files int this set repeated FileMetadata fileMetadata = 2; //list of metadata for each file } +// Metadata for a single index file message FileMetadata { - string fileName = 1; //file Name - int64 len = 2; //file checksum - int64 checksum = 3; //file checksum - int32 headerLength = 4; //file header length; - bytes header = 5; //file header; - int32 footerLength = 6; //file header length; - bytes footer = 7; //file header; -} - -/** Primary invokes this on a replica to ask it to copy files */ + // File name + string fileName = 1; + // File length + int64 len = 2; + // File checksum + int64 checksum = 3; + // File header length + int32 headerLength = 4; + // File header + bytes header = 5; + // File footer length + int32 footerLength = 6; + // File footer + bytes footer = 7; +} + +// Primary invokes this on a replica to ask it to copy files message CopyFiles { - int32 magicNumber = 1; //magic number send on all requests since these are meant for internal communication only - string indexName = 2; //index name - int64 primaryGen = 3; //primary, the generation of this primary (should increment each time a new primary starts for this index) - FilesMetadata filesMetadata = 4; //file metadata to copy - // index id + // Magic number send on all requests since these are meant for internal communication only + int32 magicNumber = 1; + // Index name + string indexName = 2; + // Primary generation + int64 primaryGen = 3; + // Files metadata to copy + FilesMetadata filesMetadata = 4; + // Index id string indexId = 5; } -/** Replica invokes this on a primary to let primary know it needs the CopyState */ +// Replica invokes this on a primary to let primary know it needs the CopyState message CopyStateRequest { - int32 magicNumber = 1; //magic number send on all requests since these are meant for internal communication only - string indexName = 2; //index name - int32 replicaId = 3; //replica Id - // index id + // Magic number send on all requests since these are meant for internal communication only + int32 magicNumber = 1; + // Index name + string indexName = 2; + // Replica id + int32 replicaId = 3; + // Index id string indexId = 4; } +// Request to receive file data from primary message FileInfo { - string fileName = 1; // Name of the file the replica wants primary to send - int64 fpStart = 2; // Starting offset in the file primary should start sending bytes from: - string indexName = 3; //index name these files belong to - // sequence number to ack, only used for acked file copy + // Name of the file the replica wants primary to send + string fileName = 1; + // Starting offset in the file primary should start sending bytes from + int64 fpStart = 2; + // Index name these files belong to + string indexName = 3; + // Sequence number to ack, only used for acked file copy int32 ackSeqNum = 4; - // index id + // Index id string indexId = 5; } +// Chunk of file data message RawFileChunk { - bytes content = 1; //raw contents of file - // sequence number for this chunk, only used for acked file copy + // Raw contents of file + bytes content = 1; + // Sequence number for this chunk, only used for acked file copy int32 seqNum = 2; - // if this chunk should be acked, only used for acked file copy + // If this chunk should be acked, only used for acked file copy bool ack = 3; } +// Status of file copy enum TransferStatusCode { Unknown = 0; Done = 1; @@ -1022,88 +1259,134 @@ enum TransferStatusCode { Ongoing = 3; } +// Input to healthCheck message HealthCheckRequest { - bool check = 1; //healthcheck request + // Healthcheck request + bool check = 1; } +// Response from Server for healthCheck message HealthCheckResponse { - TransferStatusCode health = 1; //enum response of healthcheck; + // Response of healthcheck + TransferStatusCode health = 1; } +// Input to readyCheck message ReadyCheckRequest { string indexNames = 1; } +// Response with transfer status message TransferStatus { + // Response message string Message = 1; + // Transfer status code TransferStatusCode Code = 2; } +// Input to newNRTPoint message NewNRTPoint { - int32 magicNumber = 1; //magic number send on all requests since these are meant for internal communication only - string indexName = 2; //index name - int64 primaryGen = 3; //primary, the generation of this primary (should increment each time a new primary starts for this index) - int64 version = 4; //version number when this SegmentInfos was generated - // index id + // Magic number send on all requests since these are meant for internal communication only + int32 magicNumber = 1; + // Index name + string indexName = 2; + // Primary generation + int64 primaryGen = 3; + // Version number when this SegmentInfos was generated + int64 version = 4; + // Index id string indexId = 5; } +// Index name with magic number message IndexName { - int32 magicNumber = 1; //magic number send on all requests since these are meant for internal communication only - string indexName = 2; //index name + // Magic number send on all requests since these are meant for internal communication only + int32 magicNumber = 1; + // Index name + string indexName = 2; } +// Index searcher version message SearcherVersion { - int64 version = 1; //returns the version recorded in the commit that the reader opened. This version is advanced every time a change is made with IndexWriter - bool didRefresh = 2; //true if refresh happened + // Version recorded in the commit that the reader opened. This version is advanced every time a change + // is made with IndexWriter. + int64 version = 1; + // True if refresh happened + bool didRefresh = 2; } +// Input to getNodes message GetNodesRequest { + // Index name string indexName = 1; //name of the started index whose binary connections we wish to see } +// Response from Server for getNodes message GetNodesResponse { repeated NodeInfo nodes = 2; //list of NodeInfo } +// Node information message NodeInfo { - string hostname = 1; //name or ip address of the remote host that this node is connected to for binary replication - int32 port = 2; //port number of the remote host that this node is connected to for binary replication - string nodeName = 3; //name of the remote node + // Name or ip address of the remote host that this node is connected to for binary replication + string hostname = 1; + // Port number of the remote host that this node is connected to for binary replication + int32 port = 2; + // Name of the remote node + string nodeName = 3; } +// Input to deleteByQuery message DeleteByQueryRequest { - string indexName = 1; // Index to delete documents from - repeated Query query = 2; // Queries to match documents to be deleted + // Index name to delete documents from + string indexName = 1; + // Queries to match documents to be deleted + repeated Query query = 2; } +// Input to forceMerge message ForceMergeRequest { - string indexName = 1; // Index whose segments must be force merged - int32 maxNumSegments = 2; // Maximum number of segments after force merge - bool doWait = 3; // If true, waits until the force merge is completed before returning a response. Otherwise starts force merging in async and returns a response. + // Index name whose segments must be force merged + string indexName = 1; + // Maximum number of segments after force merge + int32 maxNumSegments = 2; + // If true, waits until the force merge is completed before returning a response. Otherwise starts force + // merging in async and returns a response. + bool doWait = 3; } +// Response from Server for forceMerge message ForceMergeResponse { + // Status of force merge enum Status { FORCE_MERGE_COMPLETED = 0; FORCE_MERGE_SUBMITTED = 1; } + // Status of force merge Status status = 1; } +// Input to forceMergeDeletes message ForceMergeDeletesRequest { - string indexName = 1; // Index whose segments having deletes must be force merged - bool doWait = 2; // If true, waits until the force merge is completed before returning a response. Otherwise starts force merging in async and returns a response. + // Index name whose segments having deletes must be force merged + string indexName = 1; + // If true, waits until the force merge is completed before returning a response. Otherwise starts force + // merging in async and returns a response. + bool doWait = 2; } +// Response from Server for forceMergeDeletes message ForceMergeDeletesResponse { + // Status of force merge deletes enum Status { FORCE_MERGE_DELETES_COMPLETED = 0; FORCE_MERGE_DELETES_SUBMITTED = 1; } + // Status of force merge deletes Status status = 1; } +// Index offline settings message IndexSettings { // Largest merged segment size to cache in RAMDirectory, default: 5.0MB google.protobuf.DoubleValue nrtCachingDirectoryMaxMergeSizeMB = 1; @@ -1117,15 +1400,20 @@ message IndexSettings { SortFields indexSort = 5; // Turn on/off the merge scheduler's auto throttling, default: off google.protobuf.BoolValue indexMergeSchedulerAutoThrottle = 6; - // Base Directory implementation to use (NRTCachingDirectory will wrap this) either one of the core implementations (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory implementation that has a public constructor taking a single File argument default: FSDirectory + // Base Directory implementation to use either one of the core implementations + // (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory + // implementation that has a public constructor taking a single File argument default: FSDirectory. + // This implementation will be wrapped by NRTCachingDirectory, if enabled and not using MMappedDirectory. google.protobuf.StringValue directory = 7; } +// Index live settings message IndexLiveSettings { // Longest time to wait before reopening IndexSearcher (i.e., periodic background reopen), default: 1.0 google.protobuf.DoubleValue maxRefreshSec = 1; - // Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen), default: 0.05 + // Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen), + // default: 0.05 google.protobuf.DoubleValue minRefreshSec = 2; // Non-current searchers older than this are pruned, default: 60.0 google.protobuf.DoubleValue maxSearcherAgeSec = 3; @@ -1151,7 +1439,8 @@ message IndexLiveSettings { google.protobuf.Int32Value defaultTerminateAfter = 13; // Merge precopy would be stopped after this time, or 0 for no checks, default: 0 google.protobuf.UInt64Value maxMergePreCopyDurationSec = 14; - // Collect and publish additional index metrics, which may be more expensive in terms of volume, memory and/or compute, default: false + // Collect and publish additional index metrics, which may be more expensive in terms of volume, memory + // and/or compute, default: false google.protobuf.BoolValue verboseMetrics = 15; // If fetch parallelism should be done by groups of fields instead of document, default: false google.protobuf.BoolValue parallelFetchByField = 16; @@ -1159,6 +1448,7 @@ message IndexLiveSettings { google.protobuf.Int32Value parallelFetchChunkSize = 17; } +// Index state message IndexStateInfo { // Name of the index string indexName = 1; @@ -1174,6 +1464,7 @@ message IndexStateInfo { map fields = 6; } +// Per index information stored in global state message IndexGlobalState { // Unique identifier for index (yyyyMMddHHmmssSSS formatted date-time string) string id = 1; @@ -1181,6 +1472,7 @@ message IndexGlobalState { bool started = 2; } +// Cluster global state message GlobalStateInfo { // State version generation int64 gen = 1; @@ -1188,12 +1480,17 @@ message GlobalStateInfo { map indices = 2; } +// Input to custom message CustomRequest { - string id = 1; // ID defined for custom requests in a plugin - string path = 2; // Custom path that is defined in a plugin that maps to a route - map params = 3; // Parameters that can be processed by the plugin at the specified path + // ID defined for custom requests in a plugin + string id = 1; + // Custom path that is defined in a plugin that maps to a route + string path = 2; + // Parameters that can be processed by the plugin at the specified path + map params = 3; } +// Response from Server for custom message CustomResponse { map response = 1; // Custom response sent by the plugin } diff --git a/clientlib/src/main/proto/yelp/nrtsearch/search.proto b/clientlib/src/main/proto/yelp/nrtsearch/search.proto index aca107b17..c97729b68 100644 --- a/clientlib/src/main/proto/yelp/nrtsearch/search.proto +++ b/clientlib/src/main/proto/yelp/nrtsearch/search.proto @@ -26,70 +26,100 @@ message BooleanClause { MUST_NOT = 3; } - Query query = 1; // The Query for the clause. - Occur occur = 2; // Specifies how this clause must occur in a matching document. SHOULD by default. + // The Query for the clause + Query query = 1; + // Specifies how this clause must occur in a matching document. SHOULD by default. + Occur occur = 2; } +// Type of match operator used in MatchQuery enum MatchOperator { + // Or operation SHOULD = 0; + // And operation MUST = 1; } // Method used to rewrite a MultiTermQuery enum RewriteMethod { - // Uses the CONSTANT_SCORE_BOOLEAN method for fewer matching terms. Otherwise, this method finds all matching terms in sequence and returns matching documents using a bit set. + // Uses the CONSTANT_SCORE_BOOLEAN method for fewer matching terms. Otherwise, this method finds all matching + // terms in sequence and returns matching documents using a bit set. CONSTANT_SCORE = 0; - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. CONSTANT_SCORE_BOOLEAN = 1; - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates the relevance score for each matching document. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. Calculates the relevance score for each matching document. SCORING_BOOLEAN = 2; - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates a relevance score for each matching document as if all terms had the same frequency, the maximum frequency of all matching terms. The final BooleanQuery query only includes Term queries for the top N (specified separately) scoring terms. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. Calculates a relevance score for each matching document as if all terms had the same frequency, + // the maximum frequency of all matching terms. The final BooleanQuery query only includes Term queries for + // the top N (specified separately) scoring terms. TOP_TERMS_BLENDED_FREQS = 3; - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Assigns each matching document a relevance score equal to the boost parameter. The final BooleanQuery query only includes Term queries for the top N (specified separately) terms. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. Assigns each matching document a relevance score equal to the boost parameter. The final + // BooleanQuery query only includes Term queries for the top N (specified separately) terms. TOP_TERMS_BOOST = 4; - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates a relevance score for each matching document. The final BooleanQuery query only includes Term queries for the top N (specified separately) scoring terms. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. Calculates a relevance score for each matching document. The final BooleanQuery query only + // includes Term queries for the top N (specified separately) scoring terms. TOP_TERMS = 5; } +// Parameters for fuzzy queries message FuzzyParams { - int32 maxEdits = 1; // The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. Either set this or auto. - int32 prefixLength = 2; // Length of common (non-fuzzy) prefix - int32 maxExpansions = 3; // The maximum number of terms to match. - bool transpositions = 4; // True if transpositions should be treated as a primitive edit operation. If this is false, comparisons will implement the classic Levenshtein algorithm. Default is true. - AutoFuzziness auto = 5; // Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting. Either set this or maxEdits. - - // Optional low and high values for auto fuzziness. Defaults to low: 3 and high: 6 if both are unset. Valid values are low >= 0 and low < high + // The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. + // Either set this or auto. + int32 maxEdits = 1; + // Length of common (non-fuzzy) prefix + int32 prefixLength = 2; + // The maximum number of terms to match + int32 maxExpansions = 3; + // True if transpositions should be treated as a primitive edit operation. If this is false, comparisons + // will implement the classic Levenshtein algorithm. Default is true. + bool transpositions = 4; + // Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting. + // Either set this or maxEdits. + AutoFuzziness auto = 5; + + // Optional low and high values for auto fuzziness. Defaults to low: 3 and high: 6 if both are unset. + // Valid values are low >= 0 and low < high message AutoFuzziness { - int32 low = 6; // Optional low distance argument. - int32 high = 7; // Optional high distance argument. + // Optional low distance argument + int32 low = 6; + // Optional high distance argument + int32 high = 7; } } -// A query that matches documents using boolean combinations of other queries. +// A query that matches documents using boolean combinations of other queries message BooleanQuery { - repeated BooleanClause clauses = 1; // Clauses for a boolean query. - int32 minimumNumberShouldMatch = 2; // Minimum number of optional clauses that must match. + // Clauses for a boolean query + repeated BooleanClause clauses = 1; + // Minimum number of optional clauses that must match + int32 minimumNumberShouldMatch = 2; } -// A Query that matches documents containing a particular sequence of terms. +// A Query that matches documents containing a particular sequence of terms message PhraseQuery { - /* Edit distance between respective positions of terms as defined in this PhraseQuery and the positions - of terms in a document. - */ + // Edit distance between respective positions of terms as defined in this PhraseQuery and the positions + // of terms in a document int32 slop = 1; - string field = 2; // The field in the index that this query applies to. - repeated string terms = 3; // Terms to match. + // Field in the document to query + string field = 2; + // Terms to match + repeated string terms = 3; } -// A query that matches documents that contain a specific prefix in a provided field. +// A query that matches documents that contain a specific prefix in a provided field message PrefixQuery { - // Document field name. + // Document field name string field = 1; - // Prefix to search for. + // Prefix to search for string prefix = 2; - // Method used to rewrite the query. + // Method used to rewrite the query RewriteMethod rewrite = 3; - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods int32 rewriteTopTermsSize = 4; } @@ -105,25 +135,29 @@ message TermRangeQuery { bool include_lower = 4; // Whether to include the upper bound in the range bool include_upper = 5; - // Method used to rewrite the query. + // Method used to rewrite the query RewriteMethod rewrite = 6; - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods int32 rewriteTopTermsSize = 7; } -// A query that wraps another query and uses custom scoring logic to compute the wrapped query's score. +// A query that wraps another query and uses custom scoring logic to compute the wrapped query's score message FunctionScoreQuery { - Query query = 1; // Input query - Script script = 2; // script definition to compute a custom document score + // Input query + Query query = 1; + // Script definition to compute a custom document score + Script script = 2; } // A query that retrieves all documents with a positive score calculated by the script message FunctionFilterQuery { - Script script = 1; // script definition to compute a custom document score + // Script definition to compute a custom document score + Script script = 1; } -// +// Query that matches nested documents message NestedQuery { + // How child documents score affects final score enum ScoreMode { NONE = 0; AVG = 1; @@ -131,91 +165,122 @@ message NestedQuery { MIN = 3; SUM = 4; } - Query query = 1; // query for the child documents - string path = 2; // field name of the nested - ScoreMode scoreMode = 3; // how child documents score affects final score + // Query for the child documents + Query query = 1; + // Path to the child document + string path = 2; + // How child documents score affects final score + ScoreMode scoreMode = 3; } -// A query that matches documents containing a term. +// A query that matches documents containing a term message TermQuery { - // Field in the document to query. + // Field in the document to query string field = 1; oneof TermTypes { - // TEXT FieldType term to search for. + // TEXT FieldType term to search for string textValue = 2; - // INT FieldType term to search for. + // INT FieldType term to search for int32 intValue = 3; - // LONG FieldType term to search for. + // LONG FieldType term to search for int64 longValue = 4; - // FLOAT FieldType term to search for. + // FLOAT FieldType term to search for float floatValue = 5; - // DOUBLE FieldType term to search for. + // DOUBLE FieldType term to search for double doubleValue = 6; - // BOOLEAN FieldType term to search for. + // BOOLEAN FieldType term to search for bool booleanValue = 7; } } -// Specialization for a disjunction over many terms that behaves like a ConstantScoreQuery over a BooleanQuery containing only BooleanClause.Occur.SHOULD clauses. Only ONE of the types of terms needs to be provided - the one that matches the type of the field. +// Specialization for a disjunction over many terms that behaves like a ConstantScoreQuery over a BooleanQuery +// containing only BooleanClause.Occur.SHOULD clauses. Only ONE of the types of terms needs to be provided - the +// one that matches the type of the field. message TermInSetQuery { - // Field in the document to query. + // Field in the document to query string field = 1; message TextTerms { + // TEXT field terms repeated string terms = 1; } message IntTerms { + // INT field terms repeated int32 terms = 1; } message LongTerms { + // LONG field terms repeated int64 terms = 1; } message FloatTerms { + // FLOAT field terms repeated float terms = 1; } message DoubleTerms { + // DOUBLE field terms repeated double terms = 1; } oneof TermTypes { - // Text terms to search for. + // TEXT terms to search for. TextTerms textTerms = 2; - // Int terms to search for. + // INT terms to search for. IntTerms intTerms = 3; - // Long terms to search for. + // LONG terms to search for. LongTerms longTerms = 4; - // Float terms to search for. + // FLOAT terms to search for. FloatTerms floatTerms = 5; - // Double terms to search for. + // DOUBLE terms to search for. DoubleTerms doubleTerms = 6; } } // A query that generates the union of documents produced by its subqueries, and that scores each document with the -// maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. +// maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional +// matching subqueries. message DisjunctionMaxQuery { - repeated Query disjuncts = 1; // A list of all the disjuncts to add - float tieBreakerMultiplier = 2; // The score of each non-maximum disjunct for a document is multiplied by this weight and added into the final score. + // A list of all the disjuncts to add + repeated Query disjuncts = 1; + // The score of each non-maximum disjunct for a document is multiplied by this weight and added into the + // final score + float tieBreakerMultiplier = 2; } -// A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are combined using term queries in boolean clauses. +// A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are +// combined using term queries in boolean clauses. message MatchQuery { - string field = 1; // Field in the document to query. - string query = 2; // The text to query with. - MatchOperator operator = 3; // Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST. - int32 minimumNumberShouldMatch = 4; // Minimum number of optional clauses that must match. - Analyzer analyzer = 5; // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead. - FuzzyParams fuzzyParams = 6; // Parameters to set the fuzziness of the query -} - -// A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are combined into a PhraseQuery. + // Field in the document to query + string field = 1; + // The text to query with + string query = 2; + // Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST. + MatchOperator operator = 3; + // Minimum number of optional clauses that must match + int32 minimumNumberShouldMatch = 4; + // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be + // used instead. + Analyzer analyzer = 5; + // Parameters to set the fuzziness of the query + FuzzyParams fuzzyParams = 6; +} + +// A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are +// combined into a PhraseQuery. message MatchPhraseQuery { - string field = 1; // Field in the document to query. - string query = 2; // The text to query with. - int32 slop = 3; // Edit distance between respective positions of tokens generated by analyzing this query and the positions of terms in a document. - Analyzer analyzer = 4; // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead. - ZeroTerms zeroTermsQuery = 5; // Indicates whether none or all documents are returned if the analyzer removes all tokens. Valid values are NONE_ZERO_TERMS and ALL_ZERO_TERMS. + // Field in the document to query + string field = 1; + // The text to query with + string query = 2; + // Edit distance between respective positions of tokens generated by analyzing this query and the positions of + // terms in a document + int32 slop = 3; + // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be + // used instead. + Analyzer analyzer = 4; + // Indicates whether none or all documents are returned if the analyzer removes all tokens. Valid values + // are NONE_ZERO_TERMS and ALL_ZERO_TERMS. + ZeroTerms zeroTermsQuery = 5; // Zero Terms options when analyzer removes all tokens. enum ZeroTerms { @@ -226,80 +291,112 @@ message MatchPhraseQuery { } } -// A query that matches documents containing terms in the same order as those in the analyzed query string. The final analyzed token is treated as a prefix +// A query that matches documents containing terms in the same order as those in the analyzed query string. +// The final analyzed token is treated as a prefix message MatchPhrasePrefixQuery { - // Field in the document to query. + // Field in the document to query string field = 1; - // The text to query with. + // The text to query with string query = 2; - // Edit distance between respective positions of tokens generated by analyzing this query and the positions of terms in a document. + // Edit distance between respective positions of tokens generated by analyzing this query and the positions + // of terms in a document int32 slop = 3; - // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead. + // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would + // be used instead. Analyzer analyzer = 4; // Maximum number of terms to which the last provided term of the query value will expand. Defaults to 50. int32 max_expansions = 5; } -// A query that creates a match query for each field provided and wraps all the match queries in a disjunction max query. +// A query that creates a match query for each field provided and wraps all the match queries in a +// disjunction max query. message MultiMatchQuery { - // Type defining the execution behavior of the match. + // Type defining the execution behavior of the match enum MatchType { - // Finds documents which match any field, but uses the _score from the best field. + // Finds documents which match any field, but uses the _score from the best field BEST_FIELDS = 0; - // Runs a MatchPhrasePrefixQuery query on each field and uses the _score from the best field. + // Runs a MatchPhrasePrefixQuery query on each field and uses the _score from the best field PHRASE_PREFIX = 1; - // Finds documents that match across multiple fields, as if they were a single field. + // Finds documents that match across multiple fields, as if they were a single field CROSS_FIELDS = 2; } - repeated string fields = 1; // Fields in the document to query. - string query = 2; // The text to query with. - map fieldBoosts = 3; // Boosts for each field, if any. - MatchOperator operator = 4; // Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST. - int32 minimumNumberShouldMatch = 5; // Minimum number of optional clauses that must match. - Analyzer analyzer = 6; // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead. - FuzzyParams fuzzyParams = 7; // Parameters to set the fuzziness of the query - float tieBreakerMultiplier = 8; // The score of each non-maximum match query disjunct for a document will be multiplied by this weight and added into the final score. - // Type defining match behavior of query. + // Fields in the document to query + repeated string fields = 1; + // The text to query with + string query = 2; + // Boosts for each field, if any + map fieldBoosts = 3; + // Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST. + MatchOperator operator = 4; + // Minimum number of optional clauses that must match + int32 minimumNumberShouldMatch = 5; + // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would + // be used instead. + Analyzer analyzer = 6; + // Parameters to set the fuzziness of the query + FuzzyParams fuzzyParams = 7; + // The score of each non-maximum match query disjunct for a document will be multiplied by this weight + // and added into the final score + float tieBreakerMultiplier = 8; + // Type defining match behavior of query MatchType type = 9; - // Edit distance between respective positions of tokens generated by analyzing this query and the positions of terms in a document, applies to PHRASE_PREFIX type matching. + // Edit distance between respective positions of tokens generated by analyzing this query and the positions + // of terms in a document, applies to PHRASE_PREFIX type matching int32 slop = 10; // Maximum number of terms to which the prefix token will expand when using PHRASE_PREFIX matching. Defaults to 50. int32 maxExpansions = 11; } -// A query that matches documents with values within the specified range. The lower and upper values though provided as strings will be converted to the type of the field. This works with INT, LONG, FLOAT, DOUBLE and DATE_TIME field types. +// A query that matches documents with values within the specified range. The lower and upper values though provided +// as strings will be converted to the type of the field. This works with INT, LONG, FLOAT, DOUBLE and DATE_TIME +// field types. message RangeQuery { - string field = 1; // Field in the document to query - string lower = 2; // Lower bound, inclusive by default - string upper = 3; // Upper bound, inclusive by default - bool lowerExclusive = 4; // Set true to make lower bound exclusive - bool upperExclusive = 5; // Set true to make upper bound exclusive + // Field in the document to query + string field = 1; + // Lower bound, inclusive by default + string lower = 2; + // Upper bound, inclusive by default + string upper = 3; + // Set true to make lower bound exclusive + bool lowerExclusive = 4; + // Set true to make upper bound exclusive + bool upperExclusive = 5; } -// A query that matches documents with geopoint within the geo box. +// A query that matches documents with geopoint within the geo box message GeoBoundingBoxQuery { - string field = 1; // Field in the document to query - google.type.LatLng topLeft = 2; // top left corner of the geo box - google.type.LatLng bottomRight = 3; // bottom right corner of the geo box + // Field in the document to query + string field = 1; + // Top left corner of the geo box + google.type.LatLng topLeft = 2; + // Bottom right corner of the geo box + google.type.LatLng bottomRight = 3; } // A query that matches documents with geo point within the radius of target geo point message GeoRadiusQuery { - string field = 1; // Field in the document to query - google.type.LatLng center = 2; // target center geo point to calculate distance - string radius = 3; // distance radius like "12 km". supports m, km and mi, default to m + // Field in the document to query + string field = 1; + // Target center geo point to calculate distance + google.type.LatLng center = 2; + // Distance radius like "12 km". supports m, km and mi, default to m + string radius = 3; } -// A query that matches documents with polygon that contains the geo point. +// A query that matches documents with polygon that contains the geo point message GeoPointQuery { - string field = 1; // Field in the document to query - google.type.LatLng point = 2; // point used to query whether the polygon contains it. + // Field in the document to query + string field = 1; + // Point to check if the polygon contains + google.type.LatLng point = 2; } // Polygon defined by a list of geo points message Polygon { - // Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be self-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian. Instead, use two polygons: one on each side. + // Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be + // self-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian. + // Instead, use two polygons: one on each side. repeated google.type.LatLng points = 1; // Specify holes in the polygon. Hole polygons cannot themselves contain holes. repeated Polygon holes = 2; @@ -313,11 +410,13 @@ message GeoPolygonQuery { repeated Polygon polygons = 2; } -// A query that matches documents which contain a value for a field. +// A query that matches documents which contain a value for a field message ExistsQuery { - string field = 1; // Field in the document to query + // Field in the document to query + string field = 1; } +// Type of completion query enum CompletionQueryType { // PrefixCompletionQuery within ContextCompletionQuery PREFIX_QUERY = 0; @@ -365,14 +464,18 @@ message MultiFunctionScoreQuery { google.type.LatLng geoPoint = 3; } // Currently only distance based scale and offset units are supported - // Distance from origin + offset at which computed score will be equal to decay. Scale should be distance, unit (m, km, mi) with space is optional. Default unit will be meters. Ex: "10", "15 km", "5 m", "7 mi" + // Distance from origin + offset at which computed score will be equal to decay. Scale should be distance, + // unit (m, km, mi) with space is optional. Default unit will be meters. Ex: "10", "15 km", "5 m", "7 mi" string scale = 4; - // Compute decay function for docs with a distance greater than offset, will be 0.0 if none is set. Offset should be distance, unit (m, km, mi) with space is optional. Default unit will be meters. Ex: "10", "15 km", "5 m", "7 mi" + // Compute decay function for docs with a distance greater than offset, will be 0.0 if none is set. Offset + // should be distance, unit (m, km, mi) with space is optional. Default unit will be meters. + // Ex: "10", "15 km", "5 m", "7 mi" string offset = 5; // Defines decay rate for scoring. Should be between (0, 1) float decay = 6; } + // Decay function types enum DecayType { // Exponential decay function DECAY_TYPE_EXPONENTIAL = 0; @@ -410,11 +513,11 @@ message MultiFunctionScoreQuery { BoostMode boost_mode = 4; // Optional minimal score to match a document. By default, it's 0. float min_score = 5; - // Determine minimal score is excluded or not. By default, it's false; + // Determine minimal score is excluded or not. By default, it's false. bool min_excluded = 6; } -// Query that produces a score of 1.0 (modifiable by query boost value) for documents that match the filter query. +// Query that produces a score of 1.0 (modifiable by query boost value) for documents that match the filter query message ConstantScoreQuery { // Query to determine matching documents Query filter = 1; @@ -429,33 +532,41 @@ message SpanQuery { } } -// A query that matches documents containing terms matching a pattern. +// A query that matches documents containing terms matching a pattern message WildcardQuery { + // Field in the document to query string field = 1; + // Pattern to search for string text = 2; - // Method used to rewrite the query. + // Method used to rewrite the query RewriteMethod rewrite = 3; - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods int32 rewriteTopTermsSize = 4; } -// A query that matches documents containing terms similar to the specified term. +// A query that matches documents containing terms similar to the specified term message FuzzyQuery { + // Field in the document to query string field = 1; + // Term to search for string text = 2; - // The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. Either set this or auto. Default is 2. + // The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. + // Either set this or auto. Default is 2. optional int32 maxEdits = 3; // Length of common (non-fuzzy) prefix. Default is 0. optional int32 prefixLength = 4; // The maximum number of terms to match. Default is 50. optional int32 maxExpansions = 5; - // True if transpositions should be treated as a primitive edit operation. If this is false, comparisons will implement the classic Levenshtein algorithm. Default is true. + // True if transpositions should be treated as a primitive edit operation. If this is false, comparisons will + // implement the classic Levenshtein algorithm. Default is true. optional bool transpositions = 6; - // Method used to rewrite the query. + // Method used to rewrite the query RewriteMethod rewrite = 7; - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods int32 rewriteTopTermsSize = 8; - FuzzyParams.AutoFuzziness auto = 9; // Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting. Either set this or maxEdits. + // Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting. + // Either set this or maxEdits. + FuzzyParams.AutoFuzziness auto = 9; } // Message for a SpanMultiTermQuery @@ -472,45 +583,48 @@ message SpanMultiTermQuery{ // Enum for RegexpQuery flags enum RegexpFlag { - // Syntax flag, enables all optional regexp syntax. + // Syntax flag, enables all optional regexp syntax REGEXP_ALL = 0; - // Syntax flag, enables anystring (@). + // Syntax flag, enables anystring (@) REGEXP_ANYSTRING = 1; - // Syntax flag, enables named automata (). + // Syntax flag, enables named automata () REGEXP_AUTOMATON = 2; - // Syntax flag, enables complement (~). + // Syntax flag, enables complement (~) REGEXP_COMPLEMENT = 3; - // Syntax flag, enables empty language (#). + // Syntax flag, enables empty language (#) REGEXP_EMPTY = 4; - // Syntax flag, enables intersection (&). + // Syntax flag, enables intersection (&) REGEXP_INTERSECTION = 5; - // Syntax flag, enables numerical intervals ( ). + // Syntax flag, enables numerical intervals () REGEXP_INTERVAL = 6; - // Syntax flag, enables no optional regexp syntax. + // Syntax flag, enables no optional regexp syntax REGEXP_NONE = 7; } // Message for RegexpQuery message RegexpQuery { + // Field in the document to query string field = 1; + // Regular expression to search for string text = 2; // Optional flags for the regular expression RegexpFlag flag = 3; - // maximum number of states that compiling the automaton for the regexp can result in. Set higher to allow more complex queries and lower to prevent memory exhaustion. Default is 10000. + // Maximum number of states that compiling the automaton for the regexp can result in. Set higher to allow more + // complex queries and lower to prevent memory exhaustion. Default is 10000. optional int32 maxDeterminizedStates = 4; - // Method used to rewrite the query. + // Method used to rewrite the query RewriteMethod rewrite = 5; - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods int32 rewriteTopTermsSize = 6; } -// A query that matches documents containing terms within a specified range. +// A query that matches documents containing terms within a specified range message SpanNearQuery { - // Clauses for a span near query. + // Clauses for a span near query repeated SpanQuery clauses = 1; - // Maximum number of positions between matching terms. + // Maximum number of positions between matching terms int32 slop = 2; - // True if the matching terms must be in the same order as the query. + // True if the matching terms must be in the same order as the query bool inOrder = 3; } @@ -518,7 +632,7 @@ message SpanNearQuery { message MatchAllQuery { } -// Defines different types of QueryNodes. +// Deprecated: Defines different types of QueryNodes enum QueryType { NONE = 0; BOOLEAN_QUERY = 1; @@ -545,10 +659,14 @@ enum QueryType { SPAN_QUERY = 22; } -// Defines a full query consisting of a QueryNode which may be one of several types. +// Defines a full query consisting of a QueryNode which may be one of several types message Query { - QueryType queryType = 1 [deprecated = true]; // no longer needed, type inferred from set QueryNode - float boost = 2; // Boost values that are less than one will give less importance to this query compared to other ones while values that are greater than one will give more importance to the scores returned by this query. Boost value of zero will do nothing (default). Boost less than 0 is invalid. + // No longer needed, type inferred from set QueryNode + QueryType queryType = 1 [deprecated = true]; + // Boost values that are less than one will give less importance to this query compared to other ones while + // values that are greater than one will give more importance to the scores returned by this query. Boost + // value of zero will do nothing (default). Boost less than 0 is invalid. + float boost = 2; oneof QueryNode { BooleanQuery booleanQuery = 3; @@ -578,38 +696,65 @@ message Query { } } +// Search query request message SearchRequest { - string indexName = 1; //index to search against - int32 startHit = 2; // Which hit to start from (for pagination); default: 0 - int32 topHits = 3; // How many top hits to retrieve; default: 10. It limits the hits returned, starting from index 0. For pagination: set it to startHit + window_size. - /* Maximum number of seconds spent on each collection phase; note that for - * multi-pass searches (e.g. query-time grouping), this timeout applies to each phase. */ + // Index to search against + string indexName = 1; + // Which hit to start from (for pagination); default: 0 + int32 startHit = 2; + // How many top hits to retrieve; default: 10. It limits the hits returned, starting from index 0. + // For pagination: set it to startHit + window_size. + int32 topHits = 3; + // Maximum number of seconds spent on each collection phase; note that for + // multi-pass searches (e.g. query-time grouping), this timeout applies to each phase. double timeoutSec = 4; - repeated string retrieveFields = 5; //Which fields to highlight or retrieve. - string queryText = 6; //Query text to parse using the specified QueryParser. - repeated VirtualField virtualFields = 7; //Defines virtual fields (name'd dynamic expressions) for this query. - Query query = 8; // Full query to execute using QueryNodes - QuerySortField querySort = 9; //Sort hits by field (default is by relevance). + // Which fields to retrieve + repeated string retrieveFields = 5; + // Query text to parse using the specified QueryParser. If query is provided, this is ignored. + string queryText = 6; + // Defines virtual fields (named dynamic expressions) for this query + repeated VirtualField virtualFields = 7; + // Full query to execute + Query query = 8; + // Sort hits by field (default is by relevance) + QuerySortField querySort = 9; oneof Searcher { - int64 indexGen = 10; //Search a generation previously returned by an indexing operation such as #addDocument. Use this to search a non-committed (near-real-time) view of the index. - int64 version = 11; //Search a specific searcher version. This is typically used by follow-on searches (e.g., user clicks next page, drills down, or changes sort, etc.) to get the same searcher used by the original search. - string snapshot = 12; //Search a snapshot previously created with #createSnapshot + // Search a generation previously returned by an indexing operation such as #addDocument. + // Use this to search a non-committed (near-real-time) view of the index. + int64 indexGen = 10; + // Search a specific searcher version. This is typically used by follow-on searches + // (e.g., user clicks next page, drills down, or changes sort, etc.) to get the same searcher used by + // the original search. + int64 version = 11; + // Search a snapshot previously created with #createSnapshot + string snapshot = 12; } - int32 totalHitsThreshold = 13; //By default we count hits accurately up to 1000. This makes sure that we don't spend most time on computing hit counts - repeated Facet facets = 14; // Which facets to retrieve - repeated FetchTask fetchTasks = 15; //Any custom tasks that should be performed on top documents after ranking - bool disallowPartialResults = 16; //Should partial result be a failure condition. Applies when a search request times out. If false, the top documents ranking at the point of timeout are used and the request continues. Also, hitTimeout is set to true in the response. - string queryNestedPath = 17; //nested path we want to query by if we want to query child documents. - repeated Rescorer rescorers = 18; // Rescorers which are executed in-order after the first pass - //If detailed request execution profiling should be included in the response + // By default we count hits accurately up to 1000. This makes sure that we don't spend most time on + // computing hit counts. + int32 totalHitsThreshold = 13; + // Which facets to retrieve + repeated Facet facets = 14; + // Any custom tasks that should be performed on top documents after ranking + repeated FetchTask fetchTasks = 15; + // Should partial result be a failure condition. Applies when a search request times out. If false, the top + // documents ranking at the point of timeout are used and the request continues. Also, hitTimeout is set to + // true in the response. + bool disallowPartialResults = 16; + // Nested path we want to query by if we want to query child documents + string queryNestedPath = 17; + // Rescorers which are executed in-order after the first pass + repeated Rescorer rescorers = 18; + // If detailed request execution profiling should be included in the response bool profile = 19; - //Check the search timeout condition after each collection of n documents in a segment. If 0, timeout is only checked on the segment boundary. + // Check the search timeout condition after each collection of n documents in a segment. + // If 0, timeout is only checked on the segment boundary. int32 timeoutCheckEvery = 20; - //Additional document collectors. Provides support for operations such as aggregation. + // Additional document collectors. Provides support for operations such as aggregation. map collectors = 21; - //Stop document collection in search phase after this many documents, 0 for unlimited. + // Stop document collection in search phase after this many documents, 0 for unlimited int32 terminateAfter = 22; - //Set gRPC compression codec to use for response message. If value is unset or invalid, falls back to uncompressed. Valid codecs: identity, gzip, lz4 + // Set gRPC compression codec to use for response message. If value is unset or invalid, falls back to + // uncompressed. Valid codecs: identity, gzip, lz4 string responseCompression = 23; // Specify how to highlight matched text Highlight highlight = 24; @@ -619,60 +764,71 @@ message SearchRequest { map inner_hits = 26; // Defines runtime fields for this query repeated RuntimeField runtimeFields = 27; - //Stop document collection in search phase after this many recalled documents, after terminateAfter docs will be counted but not scored upto terminateAfterMaxRecallCount. + // Stop document collection in search phase after this many recalled documents, after terminateAfter docs + // will be counted but not scored upto terminateAfterMaxRecallCount int32 terminateAfterMaxRecallCount = 28; // Any custom logging that should log hits after ranking LoggingHits loggingHits = 29; // Keeps tracks of last hit for search after LastHitInfo searchAfter = 30; - // Request kNN vector search queries, results will be combined with the standard query (if provided) using the boolean query SHOULD logic + // Request kNN vector search queries, results will be combined with the standard query (if provided) using + // the boolean query SHOULD logic repeated KnnQuery knn = 31; } -/* Last Hit info for search after */ +// Last Hit info for search after message LastHitInfo { + // Last hit sort field values repeated string lastFieldValues = 1; + // Last hit Lucene doc id int32 lastDocId = 2; + // Last hit score float lastScore = 3; } -/* Inner Hit search request */ +// Inner Hit search request message InnerHit { - // Nested path to search against assuming same index as the parent Query. + // Nested path to search against assuming same index as the parent Query string query_nested_path = 1; // Which hit to start from (for pagination); default: 0 int32 start_hit = 2; - // How many top hits to retrieve; default: 3. It limits the hits returned, starting from index 0. For pagination: set it to startHit + window_size. + // How many top hits to retrieve; default: 3. It limits the hits returned, starting from index 0. + // For pagination: set it to startHit + window_size. int32 top_hits = 3; - // InnerHit query to query against the nested documents specified by queryNestedPath. + // InnerHit query to query against the nested documents specified by queryNestedPath Query inner_query = 4; - // Fields to retrieve; Parent's fields except its id field are unavailable in the innerHit. + // Fields to retrieve; Parent's fields except its id field are unavailable in the innerHit repeated string retrieve_fields = 5; - // Sort hits by field (default is by relevance). + // Sort hits by field (default is by relevance) QuerySortField query_sort = 6; - // Highlight the children documents. + // Highlight the children documents Highlight highlight = 7; } -/* Virtual field used during search */ +// Virtual field used during search message VirtualField { - Script script = 1; // Script defining this field's values. - string name = 2; // Virtual field's name. Must be different from registered fields and any other virtual fields. + // Script defining this field's values + Script script = 1; + // Virtual field's name. Must be different from registered fields and any other virtual fields. + string name = 2; } -/* Runtime field used during search */ +// Runtime field used during search message RuntimeField { - // Script defining this field's values. + // Script defining this field's values Script script = 1; // Runtime field's name. Must be different from registered fields and any other runtime fields. string name = 2; } +// Definition of user-defined script message Script { - string lang = 1; // script language - string source = 2; // script source + // Script language + string lang = 1; + // Script source + string source = 2; - // script parameter entry + // Script parameter entry message ParamValue { oneof ParamValues { string textValue = 1; @@ -688,47 +844,60 @@ message Script { } } - // null parameter value + // Null parameter value enum ParamNullValue { NULL_VALUE = 0; } - // map parameter value + // Map parameter value message ParamStructValue { + // Parameter values map map fields = 1; } - // list parameter value + // List parameter value message ParamListValue { + // Parameter values list repeated ParamValue values = 1; } + // Float vector parameter value message ParamFloatVectorValue { + // Float vector value repeated float values = 1; } - map params = 7; // parameters passed into script execution + // Parameters passed into script execution + map params = 7; } +// Definition doing ranking by sorting on fields message QuerySortField { - bool doDocScores = 1; //Compute the doc score for each collected (costs added CPU); default:false - bool doMaxScore = 2; //Compute the max score across all hits (costs added CPU); default: false - SortFields fields = 3; //List of Fields to sort on. + // Compute the doc score for each collected (costs added CPU); default:false + bool doDocScores = 1; + // Compute the max score across all hits (costs added CPU); default: false + bool doMaxScore = 2; + // List of Fields to sort on + SortFields fields = 3; } -/* Fields to sort on either during index time or search time*/ +// Fields to sort on either during index time or search time message SortFields { + // Fields to sort on repeated SortType sortedFields = 1; } -/* "The field to sort on. Pass docid for index order and score for relevance sort. */ +// The field to sort on. Pass 'docid' for index order and 'score' for relevance sort. message SortType { - string fieldName = 1; // name of field to sort - Selector selector = 2; // For multi valued fields, how to select which value is used for sorting - Point origin = 3; // For distance sort, the point that we measure distance from - /* Whether missing values should sort last instead of first. - Note that this runs \"before\" reverse, so if you sort missing first and reverse=true then missing values will - be at the end.*/ + // Name of field to sort on + string fieldName = 1; + // For multi valued fields, how to select which value is used for sorting + Selector selector = 2; + // For distance sort, the point that we measure distance from + Point origin = 3; + // Whether missing values should sort last instead of first. + // Note that this runs \"before\" reverse, so if you sort missing first and reverse=true then missing values will + // be at the end. bool missingLast = 4; // Sort in reverse of the field's natural order bool reverse = 5; @@ -736,33 +905,41 @@ message SortType { string unit = 6; } -/* For multi valued fields, how to select which value is used for sorting */ +// For multi valued fields, how to select which value is used for sorting enum Selector { - MIN = 0; // Minimum value - MAX = 1; // Maximum value - MIDDLE_MIN = 2; // Middle value of the set; if there are an even number of values, the lower of the middle two is chosen - MIDDLE_MAX = 3; // Middle value of the set; if there are an even number of values, the upper of the middle two is chosen + // Minimum value + MIN = 0; + // Maximum value + MAX = 1; + // Middle value of the set; if there are an even number of values, the lower of the middle two is chosen + MIDDLE_MIN = 2; + // Middle value of the set; if there are an even number of values, the upper of the middle two is chosen + MIDDLE_MAX = 3; } +// Query total hits message TotalHits { - /** How the {TotalHits#value} should be interpreted. */ + // How the {TotalHits#value} should be interpreted enum Relation { - /* The total hit count is equal to {@link TotalHits#value}. */ + // The total hit count is equal to {@link TotalHits#value} EQUAL_TO = 0; - /* The total hit count is greater than or equal to {@link TotalHits#value}. */ + // The total hit count is greater than or equal to {@link TotalHits#value} GREATER_THAN_OR_EQUAL_TO = 1; } Relation relation = 1; - /** The value of the total hit count. Must be interpreted in the context of * {#relation}.*/ + // The value of the total hit count. Must be interpreted in the context of {#relation}. int64 value = 2; } -/* Point representation */ +// Point representation message Point { - double latitude = 1; // Latitude of the point - double longitude = 2; // Longitude of the point + // Latitude of the point + double latitude = 1; + // Longitude of the point + double longitude = 2; } +// Response to a search request message SearchResponse { message Diagnostics { // Diagnostic info related kNN vector search queries @@ -776,32 +953,54 @@ message SearchResponse { string parsedQuery = 1 [deprecated = true]; string rewrittenQuery = 2 [deprecated = true]; string drillDownQuery = 3 [deprecated = true]; + // Time for initial recall and ranking double firstPassSearchTimeMs = 4; + // Time for highlighting double highlightTimeMs = 5; + // Time to fetch fields and perform other fetch tasks double getFieldsTimeMs = 6; + // Time to open a new snapshot searcher double newSnapshotSearcherOpenMs = 7; + // Time waiting for nrt replication double nrtWaitTimeMs = 8; + // Time to execute facets map facetTimeMs = 9; + // Time to execute rescorers double rescoreTimeMs = 10; + // Time to execute each rescorer map rescorersTimeMs = 11; + // Inner hits diagnostics map innerHitsDiagnostics = 12; + // Diagnostic info related to kNN vector search queries repeated VectorDiagnostics vectorDiagnostics = 13; + // Amount of gRPC request deadline remaining at the start of search processing double initialDeadlineMs = 14; } + // Message for query document hit message Hit { + // Field value for a hit message FieldValue { oneof FieldValues { - string textValue = 1; // Value for ATOM and TEXT FieldType - bool booleanValue = 2; // Value for BOOLEAN FieldType - int32 intValue = 3; // Value for INT FieldType - int64 longValue = 4; // Value for LONG and DATE_TIME (as milliseconds since epoch in UTC zone) FieldType - float floatValue = 5; // Value for FLOAT FieldType - double doubleValue = 6; // Value for DOUBLE FieldType - google.type.LatLng latLngValue = 7; // Value for LAT_LON FieldType - google.protobuf.Struct structValue = 8; // Value for structured data + // Value for ATOM and TEXT FieldType + string textValue = 1; + // Value for BOOLEAN FieldType + bool booleanValue = 2; + // Value for INT FieldType + int32 intValue = 3; + // Value for LONG and DATE_TIME (as milliseconds since epoch in UTC zone) FieldType + int64 longValue = 4; + // Value for FLOAT FieldType + float floatValue = 5; + // Value for DOUBLE FieldType + double doubleValue = 6; + // Value for LAT_LON FieldType + google.type.LatLng latLngValue = 7; + // Value for structured data + google.protobuf.Struct structValue = 8; // Value for VECTOR FieldType Vector vectorValue = 9; + // List of values google.protobuf.ListValue listValue = 10; } @@ -813,19 +1012,26 @@ message SearchResponse { } } + // Field with multiple values message CompositeFieldValue { + // Field values repeated FieldValue fieldValue = 3; } + // Highlighted text result message Highlights { // Highlighted text fragments repeated string fragments = 1; } + // Lucene document id int32 luceneDocId = 1; + // Document score double score = 2; - map fields = 3; // Field name to value - map sortedFields = 4; // Sorted field name to value + // Retrieved field data + map fields = 3; + // When using query sorting, sorted field names to values + map sortedFields = 4; // Field name to highlighted text fragments map highlights = 5; // Lucene explanation of the hit @@ -834,21 +1040,34 @@ message SearchResponse { map innerHits = 7; } + // State for use in subsequent searches (search after) message SearchState { + // Query time int64 timestamp = 1; + // Index searcher version int64 searcherVersion = 2; - int32 lastDocId = 3 [deprecated = true]; // replaced by lastHitInfo - repeated string lastFieldValues = 4 [deprecated = true]; // replaced by lastHitInfo - float lastScore = 5 [deprecated = true]; // replaced by lastHitInfo + // replaced by lastHitInfo + int32 lastDocId = 3 [deprecated = true]; + // replaced by lastHitInfo + repeated string lastFieldValues = 4 [deprecated = true]; + // replaced by lastHitInfo + float lastScore = 5 [deprecated = true]; + // Last hit info for search after LastHitInfo lastHitInfo = 6; } + // Query diagnostics Diagnostics diagnostics = 1; - bool hitTimeout = 2; // Set to true if search times out and a degraded response is returned + // Set to true if search times out and a degraded response is returned + bool hitTimeout = 2; + // Total hits for the query TotalHits totalHits = 3; + // Ranked top hits repeated Hit hits = 4; + // State for use in subsequent searches (search after) SearchState searchState = 5; - repeated FacetResult facetResult = 6; ////Counts or aggregates for a single dimension + // Counts or aggregates for a single dimension + repeated FacetResult facetResult = 6; // Detailed stats returned when profile=true in request ProfileResult profileResult = 7; // Results from any additional document collectors @@ -857,64 +1076,99 @@ message SearchResponse { bool terminatedEarly = 9; } +// Define numeric range for facet message NumericRangeType { - string label = 1; //Label for this range - int64 min = 2; //Min value for the range - bool minInclusive = 3; //True if the min value is inclusive - int64 max = 4; //Max value for the range - bool maxInclusive = 5; //True if the max value is inclusive -} - + // Label for this range + string label = 1; + // Min value for the range + int64 min = 2; + // True if the min value is inclusive + bool minInclusive = 3; + // Max value for the range + int64 max = 4; + // True if the max value is inclusive + bool maxInclusive = 5; +} + +// Facet request definition message Facet { - string dim = 1; //Dimension (field) - repeated string paths = 2; //Prefix path to facet 'under' - repeated NumericRangeType numericRange = 3; //Custom numeric ranges. Field must be indexed with facet=numericRange. - bool useOrdsCache = 4 [deprecated = true]; // True if the ordinals cache should be used - repeated string labels = 5; // Specific facet labels to retrieve - int32 topN = 6; //How many top facets to return - Script script = 7; //FacetScript definition to use in place of index facet - int32 sampleTopDocs = 8; //Facet over the top N ranked documents, instead of all hits. Only works with field doc values. - string name = 9; //Name for this facet -} - - + // Dimension (field) + string dim = 1; + // Prefix path to facet 'under' + repeated string paths = 2; + // Custom numeric ranges. Field must be indexed with facet=numericRange. + repeated NumericRangeType numericRange = 3; + // No longer used + bool useOrdsCache = 4 [deprecated = true]; + // Specific facet labels to retrieve + repeated string labels = 5; + // How many top facets to return + int32 topN = 6; + // FacetScript definition to use in place of index facet + Script script = 7; + // Facet over the top N ranked documents, instead of all hits. Only works with field doc values. + int32 sampleTopDocs = 8; + //Name for this facet + string name = 9; +} + +// Result of facet collection message FacetResult { - string dim = 1; //Dimension that was requested - repeated string path = 2; //Path whose children were requested. - double value = 3; //Total value for this path (sum of all child counts, or sum of all child values), even those not included in the topN. - repeated LabelAndValue labelValues = 4; // Child counts. - int64 childCount = 5; //How many child labels were encountered. - string name = 6; //Name for this facet -} - + // Dimension that was requested + string dim = 1; + // Path whose children were requested + repeated string path = 2; + // Total value for this path (sum of all child counts, or sum of all child values), even those not included + // in the topN + double value = 3; + // Child counts + repeated LabelAndValue labelValues = 4; + // How many child labels were encountered + int64 childCount = 5; + // Name for this facet + string name = 6; +} + +// Facet result label and value message LabelAndValue { string label = 1; //Facet's label. double value = 2; // Value associated with this label. } +// Define additional task to perform in the fetch phase message FetchTask { - string name = 1; //Name of task, as registered by a FetchTaskPlugin - google.protobuf.Struct params = 2; //Optional task parameters + // Name of task, as registered by a FetchTaskPlugin + string name = 1; + // Optional task parameters + google.protobuf.Struct params = 2; } // Defines an entry point for using a rescorer from plugin message PluginRescorer { + // Rescorer name registered by plugin string name = 1; - google.protobuf.Struct params = 2; // arguments passed to the plugin + // Arguments passed to the plugin rescorer + google.protobuf.Struct params = 2; } // Defines a rescorer which uses query to rescore documents in the second pass message QueryRescorer { + // Query to rescore documents Query rescoreQuery = 1; + // Weight to multiply with original query score double queryWeight = 2; + // Weight to multiply with rescore query score double rescoreQueryWeight = 3; } // Defines a rescorer which is executed after the first search pass message Rescorer { + // Maximum number of hits from previous phase to rescore int32 windowSize = 1; oneof Rescorers { + // Rescore with Lucene query QueryRescorer queryRescorer = 2; + // Rescore with plugin registered rescorer PluginRescorer pluginRescorer = 3; } // Must be unique for each Rescorer @@ -923,14 +1177,17 @@ message Rescorer { // Defines detailed profiling stats for queries that set profile=true message ProfileResult { + // Stats for aggregating collector message AdditionalCollectorStats { // Sum of all collection time double collectTimeMs = 1; } + // Stats for parallel search collector message CollectorStats { - // If collection for this index slice was terminated early, such as by a timeout. + // If collection for this index slice was terminated early, such as by a timeout bool terminated = 1; + // Stats for each collector segment repeated SegmentStats segmentStats = 2; // Total docs collected by this collector int32 totalCollectedCount = 3; @@ -940,6 +1197,7 @@ message ProfileResult { map additionalCollectorStats = 5; } + // Stats for a single collector segment message SegmentStats { // Total docs in segment int32 maxDoc = 1; @@ -953,160 +1211,180 @@ message ProfileResult { double collectTimeMs = 5; } + // Stats for search phase message SearchStats { // Total time for all document collection double totalCollectTimeMs = 1; // Total time to reduce results from all parallel search slices double totalReduceTimeMs = 2; + // Stats for each collector repeated CollectorStats collectorStats = 3; } + // Stats for search phase SearchStats searchStats = 1; + // Parsed query string string parsedQuery = 2; + // Rewritten query string string rewrittenQuery = 3; + // Drill down query string string drillDownQuery = 4; } -//Definition of additional document collector. +// Definition of additional document collector message Collector { oneof Collectors { - //Collector for aggregating based on term values. + // Collector for aggregating based on term values TermsCollector terms = 1; PluginCollector pluginCollector = 2; - //Collector for getting top hits based on score or sorting. + // Collector for getting top hits based on score or sorting TopHitsCollector topHitsCollector = 4; - //Collector that filters documents to nested collectors + // Collector that filters documents to nested collectors FilterCollector filter = 5; - //Collector for finding a max double value from collected documents. + // Collector for finding a max double value from collected documents MaxCollector max = 6; - //Collector for finding a min double value from collected documents. + // Collector for finding a min double value from collected documents MinCollector min = 7; } - //Nested collectors that define sub-aggregations per bucket, supported by bucket based collectors. + // Nested collectors that define sub-aggregations per bucket, supported by bucket based collectors map nestedCollectors = 3; } // Defines an entry point for using a collector from a plugin message PluginCollector { + // Name of plugin registered collector string name = 1; - google.protobuf.Struct params = 2; // arguments passed to the plugin + // Arguments passed to the plugin collector + google.protobuf.Struct params = 2; } -//Definition of term aggregating collector. +// Definition of term aggregating collector message TermsCollector { oneof TermsSource { - //Use field values for terms. + // Use field values for terms string field = 1; - //Use FacetScript definition to produce terms. + // Use FacetScript definition to produce terms Script script = 2; } - //Maximum number of top terms to return. + // Maximum number of top terms to return int32 size = 3; - //How results Buckets should be ordered, defaults to descending Bucket _count. + // How results Buckets should be ordered, defaults to descending Bucket _count BucketOrder order = 4; } -//Definition of top hits based collector. +// Definition of top hits based collector message TopHitsCollector { - //Offset for retrieval of top hits. + // Offset for retrieval of top hits int32 startHit = 1; - //Total hits to collect, note that the number of hits returned is (topHits - startHit). + // Total hits to collect, note that the number of hits returned is (topHits - startHit) int32 topHits = 2; - //When specified, collector does sort based collection. Otherwise, relevance score is used. + // When specified, collector does sort based collection. Otherwise, relevance score is used QuerySortField querySort = 3; - //Which fields to retrieve. + // Which fields to retrieve repeated string retrieveFields = 4; // If Lucene explanation should be included in the collector response bool explain = 5; } -//Definition of filtering collector, there must be at least one nested collector specified in the Collector message. +// Definition of filtering collector, there must be at least one nested collector specified in the Collector message message FilterCollector { oneof Filter { - // Only propagate documents that match the given query. + // Only propagate documents that match the given query Query query = 1; - // Specialized implementation for set queries, checks if field doc values are in the provided set. This can be useful for large set sizes with lower recall, where building the scorer would be expensive. + // Specialized implementation for set queries, checks if field doc values are in the provided set. + // This can be useful for large set sizes with lower recall, where building the scorer would be expensive. TermInSetQuery setQuery = 2; } } -//Definition of collector to find a max double value over documents. Currently only allows for script based value production. +// Definition of collector to find a max double value over documents. Currently only allows for script based +// value production. message MaxCollector { oneof ValueSource { - //Script to produce a double value + // Script to produce a double value Script script = 1; } } -//Definition of collector to find a min double value over documents. Currently only allows for script based value production. +// Definition of collector to find a min double value over documents. Currently only allows for script based +// value production. message MinCollector { oneof ValueSource { - //Script to produce a double value + // Script to produce a double value Script script = 1; } } +// Result of aggregating collector message CollectorResult { oneof CollectorResults { - //Result of collector that produces buckets and counts. + // Result of collector that produces buckets and counts BucketResult bucketResult = 1; - //Flexible collector result for additional document collectors + // Flexible collector result for additional document collectors google.protobuf.Any anyResult = 2; - //Result of collector that returns document hits. + // Result of collector that returns document hits HitsResult hitsResult = 4; - //Result of collector that filters documents. + // Result of collector that filters documents FilterResult filterResult = 5; - //Result of collector that produces a single double value. + // Result of collector that produces a single double value google.protobuf.DoubleValue doubleResult = 6; } } -//Defines how Buckets should be ordered in BucketResult. +// Defines how Buckets should be ordered in BucketResult message BucketOrder { - //Sorting order type + // Sorting order type enum OrderType { DESC = 0; ASC = 1; } - //What to use for sorting. This can be _count for Bucket count, or the name of a nested collector that supports ordering. + // What to use for sorting. This can be _count for Bucket count, or the name of a nested collector that + // supports ordering. string key = 1; - //Sorting order + // Sorting order OrderType order = 2; } +// Results from bucketing collector message BucketResult { message Bucket { + // Bucket key string key = 1; + // Bucket item count int32 count = 2; - //Nested collector results for sub-aggregations of this bucket. + // Nested collector results for sub-aggregations of this bucket map nestedCollectorResults = 8; } + // Buckets repeated Bucket buckets = 1; - //Number of unique buckets, including those not in the buckets list. + // Number of unique buckets, including those not in the buckets list int32 totalBuckets = 2; - //Number of other collected counts not represented in the buckets' counts. + // Number of other collected counts not represented in the buckets' counts int32 totalOtherCounts = 3; } +// Result from top hits collector message HitsResult { - //Total hit information. + // Total hit information TotalHits totalHits = 3; - //Ordered hits with scoring/sorting info and retrieved fields. + // Ordered hits with scoring/sorting info and retrieved fields repeated SearchResponse.Hit hits = 4; } +// Result from filter collector message FilterResult { - //Number of documents that passed the filter. + // Number of documents that passed the filter int32 docCount = 1; - //Results from nested collectors. + // Results from nested collectors map nestedCollectorResults = 2; } +// Defines logger for search hits message LoggingHits { - // name of the hits logger to be called, as registered by a HitsLoggerPlugin + // Name of the hits logger to be called, as registered by a HitsLoggerPlugin string name = 1; - //Optional logging parameters + // Optional logging parameters google.protobuf.Struct params = 2; } @@ -1114,7 +1392,8 @@ message LoggingHits { message Highlight { enum Type { - // When DEFAULT is set in global setting, use fast vector highlighter; when set for field setting, use the type from the global setting. + // When DEFAULT is set in global setting, use fast vector highlighter; when set for field setting, + // use the type from the global setting. DEFAULT = 0; FAST_VECTOR = 1; // not supported yet @@ -1125,33 +1404,40 @@ message Highlight { message Settings { // Specify type of highlighter to use. Ignored right now in nrtsearch. Type highlighter_type = 1; - // Used along with post_tags to specify how to wrap the highlighted text. + // Used along with post_tags to specify how to wrap the highlighted text repeated string pre_tags = 2; - // Used along with pre_tags to specify how to wrap the highlighted text. + // Used along with pre_tags to specify how to wrap the highlighted text repeated string post_tags = 3; // Number of characters in highlighted fragment, 100 by default. Set it to be 0 to fetch the entire field. google.protobuf.UInt32Value fragment_size = 4; - // Maximum number of highlight fragments to return, 5 by default. If set to 0 returns entire text as a single fragment ignoring fragment_size. + // Maximum number of highlight fragments to return, 5 by default. If set to 0 returns entire text as a single + // fragment ignoring fragment_size. google.protobuf.UInt32Value max_number_of_fragments = 5; - // Specify a query here if highlighting is desired against a different query than the search query. + // Specify a query here if highlighting is desired against a different query than the search query Query highlight_query = 6; - // Set to true to highlight fields only if specified in the search query. + // Set to true to highlight fields only if specified in the search query google.protobuf.BoolValue field_match = 7; - // Sorts highlighted fragments by score when set to true. By default, fragments will be output in the order they appear in the field. (Default is true) + // Sorts highlighted fragments by score when set to true. By default, fragments will be output in the order + // they appear in the field. (Default is true) google.protobuf.BoolValue score_ordered = 8; // Select Fragmenter between span (default) and simple. This is only applicable for plain highlighters. google.protobuf.StringValue fragmenter = 9; - // Let the fragment builder respect the multivalue fields. Each fragment won't cross multiple value fields if set true. (Default is false) + // Let the fragment builder respect the multivalue fields. Each fragment won't cross multiple value fields + // if set true. (Default is false) google.protobuf.BoolValue discrete_multivalue = 10; - // When highlighter_type is CUSTOM, use this string identifier to specify the highlighter. It is ignored for any other highlighter_types. + // When highlighter_type is CUSTOM, use this string identifier to specify the highlighter. It is ignored for + // any other highlighter_types. string custom_highlighter_name = 11; - // Optional Custom parameters for custom highlighters. If a field overriding is present, the global setting will be omitted for this field, and no merge will happen. + // Optional Custom parameters for custom highlighters. If a field overriding is present, the global setting + // will be omitted for this field, and no merge will happen. google.protobuf.Struct custom_highlighter_params = 12; - // Define the boundary decision when creating fragments. Options are "simple" (default in fast vector highlighter), "word" or "sentence". + // Define the boundary decision when creating fragments. Options are "simple" (default in fast vector + // highlighter), "word" or "sentence". google.protobuf.StringValue boundary_scanner = 13; - // Terminating chars when using "simple" boundary_scanner. The default is ".,!? \t\n". + // Terminating chars when using "simple" boundary_scanner. The default is ".,!? \t\n" google.protobuf.StringValue boundary_chars = 14; - // Number of chars to scan before finding the boundary_chars if using "simple" boundary scanner; If "boundary_chars" is not found after max scan, fragments will start/end at the original place. Default is 20. + // Number of chars to scan before finding the boundary_chars if using "simple" boundary scanner; If + // "boundary_chars" is not found after max scan, fragments will start/end at the original place. Default is 20. google.protobuf.UInt32Value boundary_max_scan = 15; // Locale used in boundary scanner when using "word" or "sentence" boundary_scanner. Examples: "en-US", "ch-ZH". google.protobuf.StringValue boundary_scanner_locale = 16; @@ -1173,7 +1459,8 @@ message KnnQuery { Query filter = 2; // Number of top nearest neighbor documents to collect, must be <= num_candidates int32 k = 3; - // Number of nearest neighbors to consider per segment. A larger value produces a more accurate top k. Must be <= 10000. + // Number of nearest neighbors to consider per segment. A larger value produces a more accurate top k. + // Must be <= 10000. int32 num_candidates = 4; // Vector value to use for query vector, for fields with float element type repeated float query_vector = 5; diff --git a/grpc-gateway/analysis.pb.go b/grpc-gateway/analysis.pb.go index d9fe17db5..8a1f252de 100644 --- a/grpc-gateway/analysis.pb.go +++ b/grpc-gateway/analysis.pb.go @@ -22,12 +22,15 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Name of analysis component and its parameters type NameAndParams struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Name of the analysis component + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Parameters for the analysis component Params map[string]string `protobuf:"bytes,2,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -77,12 +80,15 @@ func (x *NameAndParams) GetParams() map[string]string { return nil } +// Used to specify a conditional token filter type ConditionalTokenFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Condition *NameAndParams `protobuf:"bytes,1,opt,name=condition,proto3" json:"condition,omitempty"` + // Condition to apply the token filter + Condition *NameAndParams `protobuf:"bytes,1,opt,name=condition,proto3" json:"condition,omitempty"` + // Token filters to apply if the condition is met TokenFilters []*NameAndParams `protobuf:"bytes,2,rep,name=tokenFilters,proto3" json:"tokenFilters,omitempty"` } @@ -138,6 +144,7 @@ type IntObject struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Value of the int Int int32 `protobuf:"varint,1,opt,name=int,proto3" json:"int,omitempty"` } @@ -180,18 +187,26 @@ func (x *IntObject) GetInt() int32 { return 0 } +// Custom analyzer definition type CustomAnalyzer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - CharFilters []*NameAndParams `protobuf:"bytes,1,rep,name=charFilters,proto3" json:"charFilters,omitempty"` // Available char filters as of Lucene 8.2.0: htmlstrip, mapping, persian, patternreplace - Tokenizer *NameAndParams `protobuf:"bytes,2,opt,name=tokenizer,proto3" json:"tokenizer,omitempty"` // Specify a Lucene tokenizer (https://lucene.apache.org/core/8_2_0/core/org/apache/lucene/analysis/Tokenizer.html). Possible options as of Lucene 8.2.0: keyword, letter, whitespace, edgeNGram, nGram, pathHierarchy, pattern, simplePatternSplit, simplePattern, classic, standard, uax29UrlEmail, thai, wikipedia. - TokenFilters []*NameAndParams `protobuf:"bytes,3,rep,name=tokenFilters,proto3" json:"tokenFilters,omitempty"` // Specify a Lucene token filter (https://lucene.apache.org/core/8_2_0/core/org/apache/lucene/analysis/TokenFilter.html). The possible options can be seen at https://lucene.apache.org/core/8_2_0/analyzers-common/org/apache/lucene/analysis/util/TokenFilterFactory.html and subclasses of TokenFilter at https://lucene.apache.org/core/8_2_0/core/org/apache/lucene/analysis/package-tree.html or by calling TokenFilterFactory.availableTokenFilters(). - ConditionalTokenFilters []*ConditionalTokenFilter `protobuf:"bytes,4,rep,name=conditionalTokenFilters,proto3" json:"conditionalTokenFilters,omitempty"` // TODO: this is not properly supported yet, the only impl requires a protected terms file. Can support this properly later if needed - DefaultMatchVersion string `protobuf:"bytes,5,opt,name=defaultMatchVersion,proto3" json:"defaultMatchVersion,omitempty"` // Lucene version as LUCENE_X_Y_Z or X.Y.Z, LATEST by default - PositionIncrementGap *IntObject `protobuf:"bytes,6,opt,name=positionIncrementGap,proto3" json:"positionIncrementGap,omitempty"` // Must be >= 0 - OffsetGap *IntObject `protobuf:"bytes,7,opt,name=offsetGap,proto3" json:"offsetGap,omitempty"` // Must be >= 0 + // Specify a Lucene character filters (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/CharFilter.html) + CharFilters []*NameAndParams `protobuf:"bytes,1,rep,name=charFilters,proto3" json:"charFilters,omitempty"` + // Specify a Lucene tokenizer (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/Tokenizer.html) + Tokenizer *NameAndParams `protobuf:"bytes,2,opt,name=tokenizer,proto3" json:"tokenizer,omitempty"` + // Specify a Lucene token filter (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/TokenFilter.html) + TokenFilters []*NameAndParams `protobuf:"bytes,3,rep,name=tokenFilters,proto3" json:"tokenFilters,omitempty"` + // TODO: this is not properly supported yet, the only impl requires a protected terms file. + ConditionalTokenFilters []*ConditionalTokenFilter `protobuf:"bytes,4,rep,name=conditionalTokenFilters,proto3" json:"conditionalTokenFilters,omitempty"` + // Lucene version as LUCENE_X_Y_Z or X.Y.Z, LATEST by default + DefaultMatchVersion string `protobuf:"bytes,5,opt,name=defaultMatchVersion,proto3" json:"defaultMatchVersion,omitempty"` + // Must be >= 0 + PositionIncrementGap *IntObject `protobuf:"bytes,6,opt,name=positionIncrementGap,proto3" json:"positionIncrementGap,omitempty"` + // Must be >= 0 + OffsetGap *IntObject `protobuf:"bytes,7,opt,name=offsetGap,proto3" json:"offsetGap,omitempty"` } func (x *CustomAnalyzer) Reset() { @@ -275,6 +290,7 @@ func (x *CustomAnalyzer) GetOffsetGap() *IntObject { return nil } +// Analyzer definition type Analyzer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -345,10 +361,13 @@ type isAnalyzer_AnalyzerType interface { } type Analyzer_Predefined struct { - Predefined string `protobuf:"bytes,1,opt,name=predefined,proto3,oneof"` // Analyzers predefined in Lucene, apart from standard and classic there are en.English, bn.Bengali, eu.Basque, etc. (names derived from Lucene's analyzer class names) + // Analyzers predefined in Lucene, apart from standard and classic there are en.English, bn.Bengali, + // eu.Basque, etc. (names derived from Lucene's analyzer class names) + Predefined string `protobuf:"bytes,1,opt,name=predefined,proto3,oneof"` } type Analyzer_Custom struct { + // Custom analyzer Custom *CustomAnalyzer `protobuf:"bytes,2,opt,name=custom,proto3,oneof"` } diff --git a/grpc-gateway/luceneserver.pb.go b/grpc-gateway/luceneserver.pb.go index 400cc1427..efc03946b 100644 --- a/grpc-gateway/luceneserver.pb.go +++ b/grpc-gateway/luceneserver.pb.go @@ -32,30 +32,44 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Type of the field +// Type of a Field type FieldType int32 const ( - FieldType_ATOM FieldType = 0 // Text that's indexed as a single token, with DOCS_ONLY and omitting norms. - FieldType_TEXT FieldType = 1 // Text that's tokenized and indexed, with the index-time analyzer. - FieldType_BOOLEAN FieldType = 2 // Boolean value. - FieldType_LONG FieldType = 3 //Long value. - FieldType_INT FieldType = 4 // Int value. - FieldType_DOUBLE FieldType = 5 //Double value. - FieldType_FLOAT FieldType = 6 // Float value. - FieldType_LAT_LON FieldType = 7 // A latitude/longitude point. - FieldType_DATE_TIME FieldType = 8 // Date and optional time. - // TODO name this "dynamic" instead of "virtual"? - FieldType_VIRTUAL FieldType = 9 // Virtual field defined with a JavaScript expression. - // TODO need tests for internal: - FieldType_INTERNAL FieldType = 10 //Internal field, currently only for holding indexed facets data. - FieldType_CUSTOM FieldType = 11 // Field type specified by name. - FieldType__ID FieldType = 12 // Field which will be used as document IDs - FieldType_POLYGON FieldType = 13 // Geojson string for polygon - FieldType_OBJECT FieldType = 14 // JSON + // Text that's indexed as a single token, with DOCS_ONLY and omitting norms + FieldType_ATOM FieldType = 0 + // Text that's tokenized and indexed, with the index-time analyzer + FieldType_TEXT FieldType = 1 + // Boolean value + FieldType_BOOLEAN FieldType = 2 + // Long value + FieldType_LONG FieldType = 3 + // Int value + FieldType_INT FieldType = 4 + // Double value + FieldType_DOUBLE FieldType = 5 + // Float value + FieldType_FLOAT FieldType = 6 + // A latitude/longitude point + FieldType_LAT_LON FieldType = 7 + // Date and optional time + FieldType_DATE_TIME FieldType = 8 + // Virtual field defined with a Script + FieldType_VIRTUAL FieldType = 9 + // Internal field, not currently used + FieldType_INTERNAL FieldType = 10 + // Field type specified by name + FieldType_CUSTOM FieldType = 11 + // Field type for document ID + FieldType__ID FieldType = 12 + // Geojson defined polygon + FieldType_POLYGON FieldType = 13 + // Json object with child fields for each key + FieldType_OBJECT FieldType = 14 // List of float values - FieldType_VECTOR FieldType = 15 - FieldType_CONTEXT_SUGGEST FieldType = 16 //Field used for contextual suggest fields + FieldType_VECTOR FieldType = 15 + // Field used for contextual suggest fields + FieldType_CONTEXT_SUGGEST FieldType = 16 // Runtime fields FieldType_RUNTIME FieldType = 17 ) @@ -131,15 +145,20 @@ func (FieldType) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{0} } -// How the tokens should be indexed. +// How text tokens should be indexed type IndexOptions int32 const ( - IndexOptions_DEFAULT IndexOptions = 0 // Use field default index options: ATOM=DOCS, TEXT=DOCS_FREQS_POSITIONS - IndexOptions_DOCS IndexOptions = 1 // Index only doc ids (for binary search). - IndexOptions_DOCS_FREQS IndexOptions = 2 // Index doc ids and term frequencies. - IndexOptions_DOCS_FREQS_POSITIONS IndexOptions = 3 // Index doc ids, term frequencies and positions. - IndexOptions_DOCS_FREQS_POSITIONS_OFFSETS IndexOptions = 4 // Index doc ids, term frequencies, positions and offsets. + // Use field default index options: ATOM=DOCS, TEXT=DOCS_FREQS_POSITIONS + IndexOptions_DEFAULT IndexOptions = 0 + // Index only doc ids + IndexOptions_DOCS IndexOptions = 1 + // Index doc ids and term frequencies + IndexOptions_DOCS_FREQS IndexOptions = 2 + // Index doc ids, term frequencies and positions + IndexOptions_DOCS_FREQS_POSITIONS IndexOptions = 3 + // Index doc ids, term frequencies, positions and offsets + IndexOptions_DOCS_FREQS_POSITIONS_OFFSETS IndexOptions = 4 ) // Enum value maps for IndexOptions. @@ -187,15 +206,20 @@ func (IndexOptions) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{1} } -// Whether/how term vectors should be indexed. +// Whether/how term vectors should be indexed type TermVectors int32 const ( - TermVectors_NO_TERMVECTORS TermVectors = 0 // no term vectors are indexed - TermVectors_TERMS TermVectors = 1 // Index terms and freqs only. - TermVectors_TERMS_POSITIONS TermVectors = 2 // Index terms, freqs and positions. - TermVectors_TERMS_POSITIONS_OFFSETS TermVectors = 3 // Index terms, freqs, positions and offsets. - TermVectors_TERMS_POSITIONS_OFFSETS_PAYLOADS TermVectors = 4 // Index terms, freqs, positions, offsets and payloads + // No term vectors are indexed + TermVectors_NO_TERMVECTORS TermVectors = 0 + // Index terms only + TermVectors_TERMS TermVectors = 1 + // Index terms and positions + TermVectors_TERMS_POSITIONS TermVectors = 2 + // Index terms, positions and offsets + TermVectors_TERMS_POSITIONS_OFFSETS TermVectors = 3 + // Index terms, positions, offsets and payloads + TermVectors_TERMS_POSITIONS_OFFSETS_PAYLOADS TermVectors = 4 ) // Enum value maps for TermVectors. @@ -243,15 +267,20 @@ func (TermVectors) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{2} } -// Whether/How this field should index facets, and how. +// Whether/how facets should be indexed type FacetType int32 const ( - FacetType_NO_FACETS FacetType = 0 //No facets are indexed. - FacetType_FLAT FacetType = 1 //Facets are indexed with no hierarchy. - FacetType_HIERARCHY FacetType = 2 //Facets are indexed and are hierarchical. - FacetType_NUMERIC_RANGE FacetType = 3 //Compute facet counts for custom numeric ranges - FacetType_SORTED_SET_DOC_VALUES FacetType = 4 //Uses SortedSetDocValuesFacetCounts, which must be flat but don't require a taxonomy index + // No facets are indexed + FacetType_NO_FACETS FacetType = 0 + // Facets are indexed with no hierarchy + FacetType_FLAT FacetType = 1 + // Facets are indexed and are hierarchical + FacetType_HIERARCHY FacetType = 2 + // Compute facet counts for custom numeric ranges + FacetType_NUMERIC_RANGE FacetType = 3 + // Uses SortedSetDocValuesFacetCounts, which must be flat but don't require a taxonomy index + FacetType_SORTED_SET_DOC_VALUES FacetType = 4 ) // Enum value maps for FacetType. @@ -299,13 +328,16 @@ func (FacetType) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{3} } +// Type of doc values to use for storing text values type TextDocValuesType int32 const ( + // Unspecified doc values type, use field default TextDocValuesType_TEXT_DOC_VALUES_TYPE_UNSPECIFIED TextDocValuesType = 0 - // Binary docvalues support text longer than 32766 bytes and are good when most values are unique or you need to use aggregations on the field. + // Binary doc values support text longer than 32766 bytes and are good when most values are unique or + // you don't need to use sorting/aggregations on the field. TextDocValuesType_TEXT_DOC_VALUES_TYPE_BINARY TextDocValuesType = 1 - // Sorted docvalues only store values shorter than 32766 bytes and are better when most values are not unique. + // Sorted doc values only store values shorter than 32766 bytes and are better when many values are not unique. TextDocValuesType_TEXT_DOC_VALUES_TYPE_SORTED TextDocValuesType = 2 ) @@ -399,12 +431,16 @@ func (VectorElementType) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{5} } +// Index start mode type Mode int32 const ( + // Standalone index with no replication Mode_STANDALONE Mode = 0 - Mode_PRIMARY Mode = 1 - Mode_REPLICA Mode = 2 + // Primary index in an nrt cluster setup + Mode_PRIMARY Mode = 1 + // Replica index in an nrt cluster setup + Mode_REPLICA Mode = 2 ) // Enum value maps for Mode. @@ -448,6 +484,7 @@ func (Mode) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{6} } +// Status of file copy type TransferStatusCode int32 const ( @@ -500,6 +537,7 @@ func (TransferStatusCode) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{7} } +// Status of force merge type ForceMergeResponse_Status int32 const ( @@ -546,6 +584,7 @@ func (ForceMergeResponse_Status) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{78, 0} } +// Status of force merge deletes type ForceMergeDeletesResponse_Status int32 const ( @@ -598,8 +637,10 @@ type CreateIndexRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // name of the index to be created. [a-zA-Z0-9]* - // Set if state/data already exists in the data backend. Provides the yyyyMMddHHmmssSSS formatted date-time string to identify and load the index. + // Name of the index to be created. [a-zA-Z0-9_-]+ + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Set if state/data already exists in the data backend. Provides the yyyyMMddHHmmssSSS formatted date-time + // string to identify and load the index data. ExistsWithId string `protobuf:"bytes,2,opt,name=existsWithId,proto3" json:"existsWithId,omitempty"` // Optional initial index settings Settings *IndexSettings `protobuf:"bytes,3,opt,name=settings,proto3" json:"settings,omitempty"` @@ -691,6 +732,7 @@ type CreateIndexResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Message confirming creation of the index Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` } @@ -739,32 +781,33 @@ type LiveSettingsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // name of index whose liveSettings are to be updated. - // Longest time to wait before reopening IndexSearcher (i.e., periodic background reopen). + // Name of index whose liveSettings are to be updated + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Longest time to wait before reopening IndexSearcher (i.e., periodic background reopen) MaxRefreshSec float64 `protobuf:"fixed64,2,opt,name=maxRefreshSec,proto3" json:"maxRefreshSec,omitempty"` - // Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen). + // Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen) MinRefreshSec float64 `protobuf:"fixed64,3,opt,name=minRefreshSec,proto3" json:"minRefreshSec,omitempty"` - // Non-current searchers older than this are pruned. + // Non-current searchers older than this are pruned MaxSearcherAgeSec float64 `protobuf:"fixed64,4,opt,name=maxSearcherAgeSec,proto3" json:"maxSearcherAgeSec,omitempty"` - // Size (in MB) of IndexWriter's RAM buffer. + // Size (in MB) of IndexWriter's RAM buffer IndexRamBufferSizeMB float64 `protobuf:"fixed64,5,opt,name=indexRamBufferSizeMB,proto3" json:"indexRamBufferSizeMB,omitempty"` - // Max number of documents to add at a time. + // Max number of documents to add at a time AddDocumentsMaxBufferLen int32 `protobuf:"varint,6,opt,name=addDocumentsMaxBufferLen,proto3" json:"addDocumentsMaxBufferLen,omitempty"` - // Maximum number of documents allowed in a parallel search slice. + // Maximum number of documents allowed in a parallel search slice SliceMaxDocs int32 `protobuf:"varint,7,opt,name=sliceMaxDocs,proto3" json:"sliceMaxDocs,omitempty"` - // Maximum number of segments allowed in a parallel search slice. + // Maximum number of segments allowed in a parallel search slice SliceMaxSegments int32 `protobuf:"varint,8,opt,name=sliceMaxSegments,proto3" json:"sliceMaxSegments,omitempty"` - // Number of virtual shards to use for this index. + // Number of virtual shards to use for this index VirtualShards int32 `protobuf:"varint,9,opt,name=virtualShards,proto3" json:"virtualShards,omitempty"` // Maximum sized segment to produce during normal merging MaxMergedSegmentMB int32 `protobuf:"varint,10,opt,name=maxMergedSegmentMB,proto3" json:"maxMergedSegmentMB,omitempty"` // Number of segments per tier used by TieredMergePolicy SegmentsPerTier int32 `protobuf:"varint,11,opt,name=segmentsPerTier,proto3" json:"segmentsPerTier,omitempty"` - // Timeout value to used when not specified in the search request. + // Timeout value to used when not specified in the search request DefaultSearchTimeoutSec float64 `protobuf:"fixed64,12,opt,name=defaultSearchTimeoutSec,proto3" json:"defaultSearchTimeoutSec,omitempty"` - // Timeout check every value to use when not specified in the search request. + // Timeout check every value to use when not specified in the search request DefaultSearchTimeoutCheckEvery int32 `protobuf:"varint,13,opt,name=defaultSearchTimeoutCheckEvery,proto3" json:"defaultSearchTimeoutCheckEvery,omitempty"` - // Terminate after value to use when not specified in the search request. + // Terminate after value to use when not specified in the search request DefaultTerminateAfter int32 `protobuf:"varint,14,opt,name=defaultTerminateAfter,proto3" json:"defaultTerminateAfter,omitempty"` } @@ -904,6 +947,7 @@ type LiveSettingsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Json string of updated IndexLiveSettings Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` } @@ -946,16 +990,19 @@ func (x *LiveSettingsResponse) GetResponse() string { return "" } +// Input to liveSettingsV2 type LiveSettingsV2Request struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Index name + // Name of index whose liveSettings are to be updated IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // Live settings to merge into existing live settings, or unset to get current live settings LiveSettings *IndexLiveSettings `protobuf:"bytes,2,opt,name=liveSettings,proto3" json:"liveSettings,omitempty"` - // When set to true, live settings changes are only applied to the local node. These changes are ephemeral, so will not persist through a restart. Also, the live settings returned in the response will contain the local overrides only when this flag is true. + // When set to true, live settings changes are only applied to the local node. These changes are ephemeral, + // so will not persist through a restart. Also, the live settings returned in the response will contain the + // local overrides only when this flag is true. Local bool `protobuf:"varint,3,opt,name=local,proto3" json:"local,omitempty"` } @@ -1012,6 +1059,7 @@ func (x *LiveSettingsV2Request) GetLocal() bool { return false } +// Response from Server to liveSettingsV2 type LiveSettingsV2Response struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1060,68 +1108,111 @@ func (x *LiveSettingsV2Response) GetLiveSettings() *IndexLiveSettings { return nil } +// Definition of a field in an index type Field struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // name of the field - Type FieldType `protobuf:"varint,2,opt,name=type,proto3,enum=luceneserver.FieldType" json:"type,omitempty"` - Search bool `protobuf:"varint,3,opt,name=search,proto3" json:"search,omitempty"` // True if the value should be available for searching (or numeric range searching, for a numeric field). - Store bool `protobuf:"varint,4,opt,name=store,proto3" json:"store,omitempty"` // True if the value should be stored. - StoreDocValues bool `protobuf:"varint,5,opt,name=storeDocValues,proto3" json:"storeDocValues,omitempty"` // Whether to index the value into doc values. + // Name of the field + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Type of the field + Type FieldType `protobuf:"varint,2,opt,name=type,proto3,enum=luceneserver.FieldType" json:"type,omitempty"` + // True if the value should be available for searching (or numeric range searching, for a numeric fields) + Search bool `protobuf:"varint,3,opt,name=search,proto3" json:"search,omitempty"` + // True if the value should be stored in the index + Store bool `protobuf:"varint,4,opt,name=store,proto3" json:"store,omitempty"` + // True if the value should be indexed into doc values + StoreDocValues bool `protobuf:"varint,5,opt,name=storeDocValues,proto3" json:"storeDocValues,omitempty"` + // No longer used + // // Deprecated: Do not use. - Sort bool `protobuf:"varint,6,opt,name=sort,proto3" json:"sort,omitempty"` // True if the value should be indexed into doc values for sorting. + Sort bool `protobuf:"varint,6,opt,name=sort,proto3" json:"sort,omitempty"` + // No longer used + // // Deprecated: Do not use. - Tokenize bool `protobuf:"varint,7,opt,name=tokenize,proto3" json:"tokenize,omitempty"` // This is now determined from the field type + Tokenize bool `protobuf:"varint,7,opt,name=tokenize,proto3" json:"tokenize,omitempty"` + // No longer used + // // Deprecated: Do not use. - Group bool `protobuf:"varint,8,opt,name=group,proto3" json:"group,omitempty"` // True if the value should be indexed into doc values for grouping. - MultiValued bool `protobuf:"varint,9,opt,name=multiValued,proto3" json:"multiValued,omitempty"` // True if this field may sometimes have more than one value. + Group bool `protobuf:"varint,8,opt,name=group,proto3" json:"group,omitempty"` + // True if this field may have more than one value + MultiValued bool `protobuf:"varint,9,opt,name=multiValued,proto3" json:"multiValued,omitempty"` + // No longer used + // // Deprecated: Do not use. - Highlight bool `protobuf:"varint,10,opt,name=highlight,proto3" json:"highlight,omitempty"` // This parameter would be ignored - OmitNorms bool `protobuf:"varint,11,opt,name=omitNorms,proto3" json:"omitNorms,omitempty"` // True if norms are omitted. - DateTimeFormat string `protobuf:"bytes,12,opt,name=dateTimeFormat,proto3" json:"dateTimeFormat,omitempty"` // Format string used to parse datetime fields, supported values are: 1) DateTimeFormatter format 2) "epoch_millis" (datetime value is epoch timestamp) 3) "strict_date_optional_time" (date with optional time in pattern of "yyyy-MM-dd['T'HH:mm:ss[.SSS]]") - PostingsFormat string `protobuf:"bytes,13,opt,name=postingsFormat,proto3" json:"postingsFormat,omitempty"` // Which PostingsFormat should be used to index this field. - DocValuesFormat string `protobuf:"bytes,14,opt,name=docValuesFormat,proto3" json:"docValuesFormat,omitempty"` // Which DocValuesFormat should be used to index this field. - IndexOptions IndexOptions `protobuf:"varint,15,opt,name=indexOptions,proto3,enum=luceneserver.IndexOptions" json:"indexOptions,omitempty"` //How the tokens should be indexed. - Script *Script `protobuf:"bytes,16,opt,name=script,proto3" json:"script,omitempty"` // The script definition defining a virtual field's value (only used with type=virtual). - // TODO make analyzers message types i.e. StandardAnalyzer, EnglishAnalyzer, CustomAnalyzer etc - Analyzer *Analyzer `protobuf:"bytes,17,opt,name=analyzer,proto3" json:"analyzer,omitempty"` // Analyzer to use for this field during indexing and searching. - IndexAnalyzer *Analyzer `protobuf:"bytes,18,opt,name=indexAnalyzer,proto3" json:"indexAnalyzer,omitempty"` // Analyzer to use for this field during indexing. - SearchAnalyzer *Analyzer `protobuf:"bytes,19,opt,name=searchAnalyzer,proto3" json:"searchAnalyzer,omitempty"` //Analyzer to use for this field during searching. - TermVectors TermVectors `protobuf:"varint,20,opt,name=termVectors,proto3,enum=luceneserver.TermVectors" json:"termVectors,omitempty"` // Whether/how term vectors should be indexed. - // TODO make similarity message types i.d. DefaultSimilarity, CustomSimilarity, BM25Similarity; - Similarity string `protobuf:"bytes,21,opt,name=similarity,proto3" json:"similarity,omitempty"` // Which Similarity implementation to use for this field. - Facet FacetType `protobuf:"varint,22,opt,name=facet,proto3,enum=luceneserver.FacetType" json:"facet,omitempty"` // Whether this field should index facets, and how. - FacetIndexFieldName string `protobuf:"bytes,23,opt,name=facetIndexFieldName,proto3" json:"facetIndexFieldName,omitempty"` // "Which underlying Lucene index field is used to hold any indexed taxonomy or sorted set doc values facets - AdditionalProperties *structpb.Struct `protobuf:"bytes,24,opt,name=additionalProperties,proto3" json:"additionalProperties,omitempty"` // Additional info needed to configure field, used for CUSTOM types. - SimilarityParams *structpb.Struct `protobuf:"bytes,25,opt,name=similarityParams,proto3" json:"similarityParams,omitempty"` // Parameters for similarity implementation. - ChildFields []*Field `protobuf:"bytes,26,rep,name=childFields,proto3" json:"childFields,omitempty"` // Child fields accessible by dot notation, index same data as parent - EagerGlobalOrdinals bool `protobuf:"varint,27,opt,name=eagerGlobalOrdinals,proto3" json:"eagerGlobalOrdinals,omitempty"` // Compute facet global ordinals for this field up front, otherwise this is done lazily on first query. Currently only for SORTED_SET_DOC_VALUES facet type. - NestedDoc bool `protobuf:"varint,28,opt,name=nestedDoc,proto3" json:"nestedDoc,omitempty"` // True if object data should be indexed as child documents - VectorDimensions int32 `protobuf:"varint,29,opt,name=vectorDimensions,proto3" json:"vectorDimensions,omitempty"` // Dimensions for vector field type - // If field based global ordinals should be built up front, otherwise this is done lazily on first access. Currently only for fields with text doc values (TEXT/ATOM). + Highlight bool `protobuf:"varint,10,opt,name=highlight,proto3" json:"highlight,omitempty"` + // True if norms are omitted for text fields + OmitNorms bool `protobuf:"varint,11,opt,name=omitNorms,proto3" json:"omitNorms,omitempty"` + // Format string used to parse datetime fields, supported values are: + // 1. DateTimeFormatter format + // 2. "epoch_millis" (datetime value is epoch timestamp) + // 3. "strict_date_optional_time" (date with optional time in pattern of "yyyy-MM-dd['T'HH:mm:ss[.SSS]]") + DateTimeFormat string `protobuf:"bytes,12,opt,name=dateTimeFormat,proto3" json:"dateTimeFormat,omitempty"` + // Which PostingsFormat should be used to index this field, defaults to Lucene codec default + PostingsFormat string `protobuf:"bytes,13,opt,name=postingsFormat,proto3" json:"postingsFormat,omitempty"` + // Which DocValuesFormat should be used to index this field, defaults to Lucene codec default + DocValuesFormat string `protobuf:"bytes,14,opt,name=docValuesFormat,proto3" json:"docValuesFormat,omitempty"` + // How the tokens should be indexed for text fields + IndexOptions IndexOptions `protobuf:"varint,15,opt,name=indexOptions,proto3,enum=luceneserver.IndexOptions" json:"indexOptions,omitempty"` + // The script definition defining a virtual field's value (only used with type=virtual) + Script *Script `protobuf:"bytes,16,opt,name=script,proto3" json:"script,omitempty"` + // Analyzer to use for this field during indexing and searching, defaults to Lucene standard analyzer + Analyzer *Analyzer `protobuf:"bytes,17,opt,name=analyzer,proto3" json:"analyzer,omitempty"` + // Analyzer to use for this field during indexing, if different from analyzer + IndexAnalyzer *Analyzer `protobuf:"bytes,18,opt,name=indexAnalyzer,proto3" json:"indexAnalyzer,omitempty"` + // Analyzer to use for this field during searching, if different from analyzer + SearchAnalyzer *Analyzer `protobuf:"bytes,19,opt,name=searchAnalyzer,proto3" json:"searchAnalyzer,omitempty"` + // Whether/how term vectors should be indexed + TermVectors TermVectors `protobuf:"varint,20,opt,name=termVectors,proto3,enum=luceneserver.TermVectors" json:"termVectors,omitempty"` + // Which Similarity implementation to use for this field, defaults to BM25Similarity + Similarity string `protobuf:"bytes,21,opt,name=similarity,proto3" json:"similarity,omitempty"` + // Whether/how facets should be indexed + Facet FacetType `protobuf:"varint,22,opt,name=facet,proto3,enum=luceneserver.FacetType" json:"facet,omitempty"` + // Which underlying Lucene index field is used to hold any indexed taxonomy or sorted set doc values facets, + // defaults to '$_' + FacetIndexFieldName string `protobuf:"bytes,23,opt,name=facetIndexFieldName,proto3" json:"facetIndexFieldName,omitempty"` + // Additional info needed to configure field, used for CUSTOM types + AdditionalProperties *structpb.Struct `protobuf:"bytes,24,opt,name=additionalProperties,proto3" json:"additionalProperties,omitempty"` + // Parameters for similarity implementation + SimilarityParams *structpb.Struct `protobuf:"bytes,25,opt,name=similarityParams,proto3" json:"similarityParams,omitempty"` + // Child fields accessible by dot notation. For standard fields, this indexes the same data as the parent field. + // For object fields, this represents the subfields within the object. + ChildFields []*Field `protobuf:"bytes,26,rep,name=childFields,proto3" json:"childFields,omitempty"` + // Compute facet global ordinals for this field up front, otherwise this is done lazily on first query. + // Currently only for SORTED_SET_DOC_VALUES facet type. + EagerGlobalOrdinals bool `protobuf:"varint,27,opt,name=eagerGlobalOrdinals,proto3" json:"eagerGlobalOrdinals,omitempty"` + // True if object data should be indexed as child documents + NestedDoc bool `protobuf:"varint,28,opt,name=nestedDoc,proto3" json:"nestedDoc,omitempty"` + // Dimensions for vector field types + VectorDimensions int32 `protobuf:"varint,29,opt,name=vectorDimensions,proto3" json:"vectorDimensions,omitempty"` + // If field based global ordinals should be built up front, otherwise this is done lazily on first access. + // Currently only for fields with text doc values (TEXT/ATOM). EagerFieldGlobalOrdinals bool `protobuf:"varint,30,opt,name=eagerFieldGlobalOrdinals,proto3" json:"eagerFieldGlobalOrdinals,omitempty"` // Similarity type for search enabled VECTOR fields. This is a required option when search=true. // Accepts built in types: // // 'l2_norm' : (1 / (1 + l2_norm(query, vector)^2)) // 'dot_product' : Float vector: ((1 + dot_product(query, vector)) / 2) (all vectors must be unit length) - // Byte vector : 0.5 + (dot_product(query, vector) / (32768 * dims)) (all vectors must have the same length) + // Byte vector : 0.5 + (dot_product(query, vector) / (32768 * dims)) + // (all vectors must have the same length) // 'cosine' : ((1 + cosine(query, vector)) / 2) // 'max_inner_product': when < 0 : 1 / (1 + -1 * max_inner_product(query, vector)) // when >= 0: max_inner_product(query, vector) + 1 VectorSimilarity string `protobuf:"bytes,31,opt,name=vectorSimilarity,proto3" json:"vectorSimilarity,omitempty"` - // Indexing options for search enabled VECTOR field type. This is optional, defaulting to HNSW with m=16, ef_construction=100 when not set. + // Indexing options for search enabled VECTOR field type. This is optional, defaulting to HNSW with m=16, + // ef_construction=100 when not set. VectorIndexingOptions *VectorIndexingOptions `protobuf:"bytes,32,opt,name=vectorIndexingOptions,proto3" json:"vectorIndexingOptions,omitempty"` - // Specify docvalues type for TEXT/ATOM field types. This is optional, defaulting to SORTED when not set. Multivalued fields will always use SORTED_SET. + // Specify doc values type for TEXT/ATOM field types. This is optional, defaulting to SORTED when not set. + // Multivalued fields will always use SORTED_SET. TextDocValuesType TextDocValuesType `protobuf:"varint,33,opt,name=textDocValuesType,proto3,enum=luceneserver.TextDocValuesType" json:"textDocValuesType,omitempty"` - // Element type for vector field, defaulting to FLOAT when not set. + // Element type for vector field, defaulting to FLOAT when not set VectorElementType VectorElementType `protobuf:"varint,34,opt,name=vectorElementType,proto3,enum=luceneserver.VectorElementType" json:"vectorElementType,omitempty"` // Position increment gap for indexing multi valued TEXT fields. Must be >= 0, defaulting to 100 when not set. PositionIncrementGap *int32 `protobuf:"varint,35,opt,name=positionIncrementGap,proto3,oneof" json:"positionIncrementGap,omitempty"` - // For arrays of strings, ignoreAbove will be applied for each array element separately and string elements longer than ignore_above will not be indexed or stored. - // This option is also useful for protecting against Lucene’s term byte-length limit of 32766 + // For arrays of strings, ignoreAbove will be applied for each array element separately and string elements longer + // than ignore_above will not be indexed or stored. This option is useful for protecting against Lucene’s + // term byte-length limit of 32766 IgnoreAbove *int32 `protobuf:"varint,36,opt,name=ignoreAbove,proto3,oneof" json:"ignoreAbove,omitempty"` } @@ -1427,9 +1518,10 @@ type VectorIndexingOptions struct { HnswEfConstruction *int32 `protobuf:"varint,3,opt,name=hnsw_ef_construction,json=hnswEfConstruction,proto3,oneof" json:"hnsw_ef_construction,omitempty"` // Number of threads to use for merging vector data, default: 1 MergeWorkers *int32 `protobuf:"varint,4,opt,name=merge_workers,json=mergeWorkers,proto3,oneof" json:"merge_workers,omitempty"` - // The confidenceInterval for scalar quantizing the vectors. When unset, it is calculated based on the vector dimension. - // When `0`, the quantiles are dynamically determined by sampling many confidence intervals and determining the most accurate pair. - // Otherwise, the value must be between 0.9 and 1.0 (both inclusive). default: unset + // The confidenceInterval for scalar quantizing the vectors. When unset, it is calculated based on the + // vector dimension. When `0`, the quantiles are dynamically determined by sampling many confidence intervals and + // determining the most accurate pair. Otherwise, the value must be between 0.9 and 1.0 (both inclusive). + // default: unset QuantizedConfidenceInterval *float32 `protobuf:"fixed32,5,opt,name=quantized_confidence_interval,json=quantizedConfidenceInterval,proto3,oneof" json:"quantized_confidence_interval,omitempty"` // The number of bits to use for quantizing the vectors. It can have the following values: // @@ -1437,7 +1529,8 @@ type VectorIndexingOptions struct { // 7 - signed byte (default) QuantizedBits *int32 `protobuf:"varint,6,opt,name=quantized_bits,json=quantizedBits,proto3,oneof" json:"quantized_bits,omitempty"` // Whether to compress the vectors, if true, the vectors that are quantized with <= 4 bits will be compressed into - // a single byte. If false, the vectors will be stored as is. This provides a trade-off of memory usage and speed. default: false + // a single byte. If false, the vectors will be stored as is. This provides a trade-off of memory usage and speed. + // default: false QuantizedCompress *bool `protobuf:"varint,7,opt,name=quantized_compress,json=quantizedCompress,proto3,oneof" json:"quantized_compress,omitempty"` } @@ -1528,8 +1621,10 @@ type FieldDefRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // name of the index against which the field is to be created - Field []*Field `protobuf:"bytes,2,rep,name=field,proto3" json:"field,omitempty"` + // Name of index to add fields to + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // List of fields to add + Field []*Field `protobuf:"bytes,2,rep,name=field,proto3" json:"field,omitempty"` } func (x *FieldDefRequest) Reset() { @@ -1584,6 +1679,7 @@ type FieldDefResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Json string of object containing all index fields (including newly added fields) Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` } @@ -1632,18 +1728,37 @@ type SettingsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // Index name - MergeMaxMBPerSec float64 `protobuf:"fixed64,2,opt,name=mergeMaxMBPerSec,proto3" json:"mergeMaxMBPerSec,omitempty"` // Rate limit merges to at most this many MB/sec - NrtCachingDirectoryMaxMergeSizeMB float64 `protobuf:"fixed64,3,opt,name=nrtCachingDirectoryMaxMergeSizeMB,proto3" json:"nrtCachingDirectoryMaxMergeSizeMB,omitempty"` // Largest merged segment size to cache in RAMDirectory, default: 5.0MB - NrtCachingDirectoryMaxSizeMB float64 `protobuf:"fixed64,4,opt,name=nrtCachingDirectoryMaxSizeMB,proto3" json:"nrtCachingDirectoryMaxSizeMB,omitempty"` // Largest overall size for all files cached in NRTCachingDirectory; set to -1 to disable NRTCachingDirectory default: 60.0MB - ConcurrentMergeSchedulerMaxThreadCount int32 `protobuf:"varint,5,opt,name=concurrentMergeSchedulerMaxThreadCount,proto3" json:"concurrentMergeSchedulerMaxThreadCount,omitempty"` // How many merge threads to allow at once - ConcurrentMergeSchedulerMaxMergeCount int32 `protobuf:"varint,6,opt,name=concurrentMergeSchedulerMaxMergeCount,proto3" json:"concurrentMergeSchedulerMaxMergeCount,omitempty"` // Maximum backlog of pending merges before indexing threads are stalled - IndexSort *SortFields `protobuf:"bytes,7,opt,name=indexSort,proto3" json:"indexSort,omitempty"` // Index time sorting; can only be written once", SearchHandler.SORT_TYPE + // Name of index whose settings are to be updated + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // No longer used + // // Deprecated: Do not use. - IndexVerbose bool `protobuf:"varint,8,opt,name=indexVerbose,proto3" json:"indexVerbose,omitempty"` // Deprecated, moved to lucene config. Turn on IndexWriter's infoStream (to stdout) - IndexMergeSchedulerAutoThrottle bool `protobuf:"varint,9,opt,name=indexMergeSchedulerAutoThrottle,proto3" json:"indexMergeSchedulerAutoThrottle,omitempty"` // Turn on/off the merge scheduler's auto throttling - NormsFormat string `protobuf:"bytes,10,opt,name=normsFormat,proto3" json:"normsFormat,omitempty"` // Which NormsFormat should be used for all indexed fields. default: Lucene80NormsFormat - // Base Directory implementation to use (NRTCachingDirectory will wrap this) either one of the core implementations (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory implementation that has a public constructor taking a single File argument default: FSDirectory + MergeMaxMBPerSec float64 `protobuf:"fixed64,2,opt,name=mergeMaxMBPerSec,proto3" json:"mergeMaxMBPerSec,omitempty"` + // Largest merged segment size to cache in RAMDirectory, default: 5.0MB + NrtCachingDirectoryMaxMergeSizeMB float64 `protobuf:"fixed64,3,opt,name=nrtCachingDirectoryMaxMergeSizeMB,proto3" json:"nrtCachingDirectoryMaxMergeSizeMB,omitempty"` + // Largest overall size for all files cached in NRTCachingDirectory; set to -1 to disable NRTCachingDirectory, + // default: 60.0MB + NrtCachingDirectoryMaxSizeMB float64 `protobuf:"fixed64,4,opt,name=nrtCachingDirectoryMaxSizeMB,proto3" json:"nrtCachingDirectoryMaxSizeMB,omitempty"` + // How many merge threads to allow at once + ConcurrentMergeSchedulerMaxThreadCount int32 `protobuf:"varint,5,opt,name=concurrentMergeSchedulerMaxThreadCount,proto3" json:"concurrentMergeSchedulerMaxThreadCount,omitempty"` + // Maximum backlog of pending merges before indexing threads are stalled + ConcurrentMergeSchedulerMaxMergeCount int32 `protobuf:"varint,6,opt,name=concurrentMergeSchedulerMaxMergeCount,proto3" json:"concurrentMergeSchedulerMaxMergeCount,omitempty"` + // Index time sorting; can only be written once, default: no sorting + IndexSort *SortFields `protobuf:"bytes,7,opt,name=indexSort,proto3" json:"indexSort,omitempty"` + // Deprecated, moved to lucene config. Turn on IndexWriter's infoStream (to stdout) + // + // Deprecated: Do not use. + IndexVerbose bool `protobuf:"varint,8,opt,name=indexVerbose,proto3" json:"indexVerbose,omitempty"` + // Turn on/off the merge scheduler's auto throttling + IndexMergeSchedulerAutoThrottle bool `protobuf:"varint,9,opt,name=indexMergeSchedulerAutoThrottle,proto3" json:"indexMergeSchedulerAutoThrottle,omitempty"` + // No longer used + // + // Deprecated: Do not use. + NormsFormat string `protobuf:"bytes,10,opt,name=normsFormat,proto3" json:"normsFormat,omitempty"` + // Base Directory implementation to use either one of the core implementations + // (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory + // implementation that has a public constructor taking a single File argument default: FSDirectory. + // This implementation will be wrapped by NRTCachingDirectory, if enabled and not using MMappedDirectory. Directory string `protobuf:"bytes,11,opt,name=directory,proto3" json:"directory,omitempty"` } @@ -1686,6 +1801,7 @@ func (x *SettingsRequest) GetIndexName() string { return "" } +// Deprecated: Do not use. func (x *SettingsRequest) GetMergeMaxMBPerSec() float64 { if x != nil { return x.MergeMaxMBPerSec @@ -1743,6 +1859,7 @@ func (x *SettingsRequest) GetIndexMergeSchedulerAutoThrottle() bool { return false } +// Deprecated: Do not use. func (x *SettingsRequest) GetNormsFormat() string { if x != nil { return x.NormsFormat @@ -1763,6 +1880,7 @@ type SettingsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Json string of updated IndexSettings Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` } @@ -1805,6 +1923,7 @@ func (x *SettingsResponse) GetResponse() string { return "" } +// Input to settingsV2 type SettingsV2Request struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1862,6 +1981,7 @@ func (x *SettingsV2Request) GetSettings() *IndexSettings { return nil } +// Response from Server for settingsV2 type SettingsV2Response struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1910,19 +2030,27 @@ func (x *SettingsV2Response) GetSettings() *IndexSettings { return nil } -// Start the index +// Input to startIndex type StartIndexRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name - Mode Mode `protobuf:"varint,2,opt,name=mode,proto3,enum=luceneserver.Mode" json:"mode,omitempty"` //Standalone, NRT primary or replica mode to start this index. - PrimaryGen int64 `protobuf:"varint,3,opt,name=primaryGen,proto3" json:"primaryGen,omitempty"` //primary, the generation of this primary (should increment each time a new primary starts for this index) - PrimaryAddress string `protobuf:"bytes,4,opt,name=primaryAddress,proto3" json:"primaryAddress,omitempty"` //replica, the IP address or host name of the remote primary - Port int32 `protobuf:"varint,5,opt,name=port,proto3" json:"port,omitempty"` //replica, the TCP port of the remote primary - Restore *RestoreIndex `protobuf:"bytes,6,opt,name=restore,proto3" json:"restore,omitempty"` // restore index from backup - // replica, location of discovery file containing primary host/port. Used if primaryAddress is empty. If port is specified in this request, it overrides the value in the file + // Index name + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Mode to start this index: Standalone, NRT primary or replica + Mode Mode `protobuf:"varint,2,opt,name=mode,proto3,enum=luceneserver.Mode" json:"mode,omitempty"` + // Generation of this primary (should increase each time a new primary starts for this index). + // Pass -1 use generation based on epoch time. + PrimaryGen int64 `protobuf:"varint,3,opt,name=primaryGen,proto3" json:"primaryGen,omitempty"` //primary, + // Replica config: the IP address or host name of the remote primary + PrimaryAddress string `protobuf:"bytes,4,opt,name=primaryAddress,proto3" json:"primaryAddress,omitempty"` + // Replica config: the TCP port of the remote primary + Port int32 `protobuf:"varint,5,opt,name=port,proto3" json:"port,omitempty"` + // Restore index from backup + Restore *RestoreIndex `protobuf:"bytes,6,opt,name=restore,proto3" json:"restore,omitempty"` + // Replica config: location of discovery file containing primary host/port. Used if primaryAddress is empty. + // If port is specified in this request, it overrides the port value in the file. PrimaryDiscoveryFile string `protobuf:"bytes,7,opt,name=primaryDiscoveryFile,proto3" json:"primaryDiscoveryFile,omitempty"` } @@ -2013,7 +2141,7 @@ type StartIndexV2Request struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // index name + // Index name IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } @@ -2056,15 +2184,20 @@ func (x *StartIndexV2Request) GetIndexName() string { return "" } +// Response from Server for startIndex type StartIndexResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MaxDoc int32 `protobuf:"varint,1,opt,name=maxDoc,proto3" json:"maxDoc,omitempty"` //one greater than the largest possible document number - NumDocs int32 `protobuf:"varint,2,opt,name=numDocs,proto3" json:"numDocs,omitempty"` //the number of documents in this index. - Segments string `protobuf:"bytes,3,opt,name=segments,proto3" json:"segments,omitempty"` //string representation of the IndexReader implementation - StartTimeMS float64 `protobuf:"fixed64,4,opt,name=startTimeMS,proto3" json:"startTimeMS,omitempty"` //time taken to start the index + // One greater than the largest possible document number + MaxDoc int32 `protobuf:"varint,1,opt,name=maxDoc,proto3" json:"maxDoc,omitempty"` + // Number of documents in this index + NumDocs int32 `protobuf:"varint,2,opt,name=numDocs,proto3" json:"numDocs,omitempty"` + // String representation of the IndexReader implementation + Segments string `protobuf:"bytes,3,opt,name=segments,proto3" json:"segments,omitempty"` + // Time taken to start the index + StartTimeMS float64 `protobuf:"fixed64,4,opt,name=startTimeMS,proto3" json:"startTimeMS,omitempty"` } func (x *StartIndexResponse) Reset() { @@ -2127,13 +2260,16 @@ func (x *StartIndexResponse) GetStartTimeMS() float64 { return 0 } +// Message representing a document to index type AddDocumentRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //name of the index - Fields map[string]*AddDocumentRequest_MultiValuedField `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` //map of field name to a list of string values. + // Index name + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Map of field name to a list of string values + Fields map[string]*AddDocumentRequest_MultiValuedField `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *AddDocumentRequest) Reset() { @@ -2182,11 +2318,13 @@ func (x *AddDocumentRequest) GetFields() map[string]*AddDocumentRequest_MultiVal return nil } +// Path for hierarchical facets type FacetHierarchyPath struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Facet path Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` } @@ -2229,11 +2367,13 @@ func (x *FacetHierarchyPath) GetValue() []string { return nil } +// Response from Server for addDocument type AddDocumentResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Lucene index sequence number after adding the documents GenId string `protobuf:"bytes,1,opt,name=genId,proto3" json:"genId,omitempty"` // Unique identifier for the primary instance that processed the request PrimaryId string `protobuf:"bytes,2,opt,name=primaryId,proto3" json:"primaryId,omitempty"` @@ -2285,12 +2425,14 @@ func (x *AddDocumentResponse) GetPrimaryId() string { return "" } +// Input to refresh type RefreshRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name to be refreshed + // Index name to be refreshed + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *RefreshRequest) Reset() { @@ -2332,12 +2474,14 @@ func (x *RefreshRequest) GetIndexName() string { return "" } +// Response from Server for refresh type RefreshResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RefreshTimeMS float64 `protobuf:"fixed64,1,opt,name=refreshTimeMS,proto3" json:"refreshTimeMS,omitempty"` //time taken in milliseconds to refresh the index + // Time taken in milliseconds to refresh the index + RefreshTimeMS float64 `protobuf:"fixed64,1,opt,name=refreshTimeMS,proto3" json:"refreshTimeMS,omitempty"` } func (x *RefreshResponse) Reset() { @@ -2379,12 +2523,14 @@ func (x *RefreshResponse) GetRefreshTimeMS() float64 { return 0 } +// Input to commit type CommitRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index to commit + // Index name to commit + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *CommitRequest) Reset() { @@ -2426,13 +2572,13 @@ func (x *CommitRequest) GetIndexName() string { return "" } +// Response from Server for commit type CommitResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // sequence number of the last operation in the commit. All sequence numbers less than this value - // + // Sequence number of the last operation in the commit. All sequence numbers less than this value // will be reflected in the commit, and all others will not. Gen int64 `protobuf:"varint,1,opt,name=gen,proto3" json:"gen,omitempty"` // Unique identifier for the primary instance that processed the request @@ -2485,12 +2631,14 @@ func (x *CommitResponse) GetPrimaryId() string { return "" } +// Input to stats type StatsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //retrieve stats of the index + // Index name to retrieve stats + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *StatsRequest) Reset() { @@ -2532,27 +2680,31 @@ func (x *StatsRequest) GetIndexName() string { return "" } +// Response from Server for stats type StatsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ord int32 `protobuf:"varint,1,opt,name=ord,proto3" json:"ord,omitempty"` //shard ordinal + // Shard ordinal + Ord int32 `protobuf:"varint,1,opt,name=ord,proto3" json:"ord,omitempty"` // The total number of docs in this index, including docs not yet flushed (still in the RAM buffer), // not counting deletions. MaxDoc int32 `protobuf:"varint,2,opt,name=maxDoc,proto3" json:"maxDoc,omitempty"` - // * - // The total number of docs in this index, including - // docs not yet flushed (still in the RAM buffer), and - // including deletions. NOTE: buffered deletions - // are not counted. If you really need these to be + // The total number of docs in this index, including docs not yet flushed (still in the RAM buffer), and + // including deletions. NOTE: buffered deletions are not counted. If you really need these to be // counted you should call {@link IndexWriter#commit()} first. - NumDocs int32 `protobuf:"varint,3,opt,name=numDocs,proto3" json:"numDocs,omitempty"` - DirSize int64 `protobuf:"varint,4,opt,name=dirSize,proto3" json:"dirSize,omitempty"` //size of the this indexDir - State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` //state of the index - Taxonomy *Taxonomy `protobuf:"bytes,6,opt,name=taxonomy,proto3" json:"taxonomy,omitempty"` //Taxonomy(facets) stats - Searchers []*Searcher `protobuf:"bytes,7,rep,name=searchers,proto3" json:"searchers,omitempty"` //Searcher stats - CurrentSearcher *Searcher `protobuf:"bytes,8,opt,name=currentSearcher,proto3" json:"currentSearcher,omitempty"` //Current Searcher stats + NumDocs int32 `protobuf:"varint,3,opt,name=numDocs,proto3" json:"numDocs,omitempty"` + // The total size of this indexDir + DirSize int64 `protobuf:"varint,4,opt,name=dirSize,proto3" json:"dirSize,omitempty"` + // The state of the index + State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` + // Taxonomy(facets) stats + Taxonomy *Taxonomy `protobuf:"bytes,6,opt,name=taxonomy,proto3" json:"taxonomy,omitempty"` + // Searcher stats + Searchers []*Searcher `protobuf:"bytes,7,rep,name=searchers,proto3" json:"searchers,omitempty"` + // Current Searcher stats + CurrentSearcher *Searcher `protobuf:"bytes,8,opt,name=currentSearcher,proto3" json:"currentSearcher,omitempty"` } func (x *StatsResponse) Reset() { @@ -2643,13 +2795,16 @@ func (x *StatsResponse) GetCurrentSearcher() *Searcher { return nil } +// Taxonomy stats type Taxonomy struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NumOrds int32 `protobuf:"varint,1,opt,name=numOrds,proto3" json:"numOrds,omitempty"` //number of docs in this taxonomy reader - Segments string `protobuf:"bytes,2,opt,name=segments,proto3" json:"segments,omitempty"` //string representation of segments + // Number of docs in this taxonomy reader + NumOrds int32 `protobuf:"varint,1,opt,name=numOrds,proto3" json:"numOrds,omitempty"` + // String representation of segments + Segments string `protobuf:"bytes,2,opt,name=segments,proto3" json:"segments,omitempty"` } func (x *Taxonomy) Reset() { @@ -2698,18 +2853,23 @@ func (x *Taxonomy) GetSegments() string { return "" } +// Index searcher stats type Searcher struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // the version recorded in the commit that the reader opened. - // This version is advanced every time a change is made with IndexWriter. - Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` - NumDocs int32 `protobuf:"varint,2,opt,name=numDocs,proto3" json:"numDocs,omitempty"` //total number of docs in this index - Segments string `protobuf:"bytes,3,opt,name=segments,proto3" json:"segments,omitempty"` //string representation of segments - StaleAgeSeconds float64 `protobuf:"fixed64,4,opt,name=staleAgeSeconds,proto3" json:"staleAgeSeconds,omitempty"` //how much time has passed since this searcher was the current (live) searcher - NumSegments int32 `protobuf:"varint,5,opt,name=numSegments,proto3" json:"numSegments,omitempty"` // number of segments, filled only if Searcher has StandardDirectoryReader + // Version recorded in the commit that the reader opened. This version is advanced every time a change + // is made with IndexWriter. + Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + // Total number of docs in this index + NumDocs int32 `protobuf:"varint,2,opt,name=numDocs,proto3" json:"numDocs,omitempty"` + // String representation of segments + Segments string `protobuf:"bytes,3,opt,name=segments,proto3" json:"segments,omitempty"` + // How much time has passed since this searcher was the current (live) searcher + StaleAgeSeconds float64 `protobuf:"fixed64,4,opt,name=staleAgeSeconds,proto3" json:"staleAgeSeconds,omitempty"` + // Number of segments, filled only if Searcher has StandardDirectoryReader + NumSegments int32 `protobuf:"varint,5,opt,name=numSegments,proto3" json:"numSegments,omitempty"` } func (x *Searcher) Reset() { @@ -2779,12 +2939,14 @@ func (x *Searcher) GetNumSegments() int32 { return 0 } +// Input to deleteAllDocuments type DeleteAllDocumentsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index to delete all documents from + // Index name to delete all documents from + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *DeleteAllDocumentsRequest) Reset() { @@ -2826,12 +2988,14 @@ func (x *DeleteAllDocumentsRequest) GetIndexName() string { return "" } +// Response from Server for deleteAllDocuments type DeleteAllDocumentsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GenId string `protobuf:"bytes,1,opt,name=genId,proto3" json:"genId,omitempty"` //Returns the index generation (indexGen) that reflects the deletion. + // Lucene index sequence number after deleting all documents + GenId string `protobuf:"bytes,1,opt,name=genId,proto3" json:"genId,omitempty"` } func (x *DeleteAllDocumentsResponse) Reset() { @@ -2873,12 +3037,14 @@ func (x *DeleteAllDocumentsResponse) GetGenId() string { return "" } +// Input to deleteIndex type DeleteIndexRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index to delete + // Index name to delete + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *DeleteIndexRequest) Reset() { @@ -2920,12 +3086,14 @@ func (x *DeleteIndexRequest) GetIndexName() string { return "" } +// Response from Server for deleteIndex type DeleteIndexResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ok string `protobuf:"bytes,1,opt,name=ok,proto3" json:"ok,omitempty"` //Returns "ok" string on success + // Returns "ok" string on success + Ok string `protobuf:"bytes,1,opt,name=ok,proto3" json:"ok,omitempty"` } func (x *DeleteIndexResponse) Reset() { @@ -2967,12 +3135,14 @@ func (x *DeleteIndexResponse) GetOk() string { return "" } +// Response with no content type DummyResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ok string `protobuf:"bytes,1,opt,name=ok,proto3" json:"ok,omitempty"` // returns "ok" string on success + // Returns "ok" string on success + Ok string `protobuf:"bytes,1,opt,name=ok,proto3" json:"ok,omitempty"` } func (x *DummyResponse) Reset() { @@ -3014,12 +3184,14 @@ func (x *DummyResponse) GetOk() string { return "" } +// Input to stopIndex type StopIndexRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name to stop + // Index name to stop + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *StopIndexRequest) Reset() { @@ -3061,6 +3233,7 @@ func (x *StopIndexRequest) GetIndexName() string { return "" } +// Input to reloadState type ReloadStateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3099,6 +3272,7 @@ func (*ReloadStateRequest) Descriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{34} } +// Response from Server for reloadState type ReloadStateResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3156,8 +3330,10 @@ type CreateSnapshotRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //name of the index to snapshot; - OpenSearcher bool `protobuf:"varint,2,opt,name=openSearcher,proto3" json:"openSearcher,omitempty"` //Pass true if you intend to do searches against this snapshot, by passing searcher: {snapshot: X} to @search + // Name of the index to snapshot + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Pass true if you intend to do searches against this snapshot, by passing searcher: {snapshot: X} to @search + OpenSearcher bool `protobuf:"varint,2,opt,name=openSearcher,proto3" json:"openSearcher,omitempty"` } func (x *CreateSnapshotRequest) Reset() { @@ -3206,15 +3382,20 @@ func (x *CreateSnapshotRequest) GetOpenSearcher() bool { return false } +// Response from Server for createSnapshot type CreateSnapshotResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexFiles []string `protobuf:"bytes,1,rep,name=indexFiles,proto3" json:"indexFiles,omitempty"` - TaxonomyFiles []string `protobuf:"bytes,2,rep,name=taxonomyFiles,proto3" json:"taxonomyFiles,omitempty"` - StateFiles []string `protobuf:"bytes,3,rep,name=stateFiles,proto3" json:"stateFiles,omitempty"` - SnapshotId *SnapshotId `protobuf:"bytes,4,opt,name=snapshotId,proto3" json:"snapshotId,omitempty"` + // List of index files referenced by this snapshot + IndexFiles []string `protobuf:"bytes,1,rep,name=indexFiles,proto3" json:"indexFiles,omitempty"` + // List of taxonomy index files referenced by this snapshot + TaxonomyFiles []string `protobuf:"bytes,2,rep,name=taxonomyFiles,proto3" json:"taxonomyFiles,omitempty"` + // List of state index files referenced by this snapshot + StateFiles []string `protobuf:"bytes,3,rep,name=stateFiles,proto3" json:"stateFiles,omitempty"` + // Snapshot id + SnapshotId *SnapshotId `protobuf:"bytes,4,opt,name=snapshotId,proto3" json:"snapshotId,omitempty"` } func (x *CreateSnapshotResponse) Reset() { @@ -3277,14 +3458,18 @@ func (x *CreateSnapshotResponse) GetSnapshotId() *SnapshotId { return nil } +// Snapshot id type SnapshotId struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexGen int64 `protobuf:"varint,1,opt,name=indexGen,proto3" json:"indexGen,omitempty"` + // Index generation + IndexGen int64 `protobuf:"varint,1,opt,name=indexGen,proto3" json:"indexGen,omitempty"` + // Taxonomy index generation TaxonomyGen int64 `protobuf:"varint,2,opt,name=taxonomyGen,proto3" json:"taxonomyGen,omitempty"` - StateGen int64 `protobuf:"varint,3,opt,name=stateGen,proto3" json:"stateGen,omitempty"` + // State generation + StateGen int64 `protobuf:"varint,3,opt,name=stateGen,proto3" json:"stateGen,omitempty"` } func (x *SnapshotId) Reset() { @@ -3340,13 +3525,16 @@ func (x *SnapshotId) GetStateGen() int64 { return 0 } +// Input to releaseSnapshot type ReleaseSnapshotRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // name of snapshotted index to be released - SnapshotId *SnapshotId `protobuf:"bytes,2,opt,name=snapshotId,proto3" json:"snapshotId,omitempty"` //The id for this snapshot; this must have been previously created via @createSnapshot. + // Name of the index to release snapshot + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Id of snapshot to release, previously returned by @createSnapshot + SnapshotId *SnapshotId `protobuf:"bytes,2,opt,name=snapshotId,proto3" json:"snapshotId,omitempty"` } func (x *ReleaseSnapshotRequest) Reset() { @@ -3395,12 +3583,14 @@ func (x *ReleaseSnapshotRequest) GetSnapshotId() *SnapshotId { return nil } +// Response from Server for releaseSnapshot type ReleaseSnapshotResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` //true if successful + // True if successful + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` } func (x *ReleaseSnapshotResponse) Reset() { @@ -3442,12 +3632,14 @@ func (x *ReleaseSnapshotResponse) GetSuccess() bool { return false } +// Input to getAllSnapshotGen type GetAllSnapshotGenRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // name of index whose snapshotted index gens are needed + // Name of the index to get snapshot gens + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *GetAllSnapshotGenRequest) Reset() { @@ -3489,12 +3681,14 @@ func (x *GetAllSnapshotGenRequest) GetIndexName() string { return "" } +// Response from Server for getAllSnapshotGen type GetAllSnapshotGenResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexGens []int64 `protobuf:"varint,1,rep,packed,name=indexGens,proto3" json:"indexGens,omitempty"` // list of snapshotted index gens + // List of snapshot gens + IndexGens []int64 `protobuf:"varint,1,rep,packed,name=indexGens,proto3" json:"indexGens,omitempty"` } func (x *GetAllSnapshotGenResponse) Reset() { @@ -3536,15 +3730,20 @@ func (x *GetAllSnapshotGenResponse) GetIndexGens() []int64 { return nil } +// Input to backupWarmingQueries type BackupWarmingQueriesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` // Index whose warming queries to backup - ServiceName string `protobuf:"bytes,2,opt,name=serviceName,proto3" json:"serviceName,omitempty"` // remote storage namespace qualifier for service - NumQueriesThreshold int32 `protobuf:"varint,3,opt,name=numQueriesThreshold,proto3" json:"numQueriesThreshold,omitempty"` // optional; minimum # of queries required to backup warming queries - UptimeMinutesThreshold int32 `protobuf:"varint,4,opt,name=uptimeMinutesThreshold,proto3" json:"uptimeMinutesThreshold,omitempty"` // optional; minimum # of minutes uptime to backup warming queries + // Index whose warming queries to backup + Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` + // Remote storage namespace qualifier for service + ServiceName string `protobuf:"bytes,2,opt,name=serviceName,proto3" json:"serviceName,omitempty"` + // Optional; minimum # of queries required to backup warming queries + NumQueriesThreshold int32 `protobuf:"varint,3,opt,name=numQueriesThreshold,proto3" json:"numQueriesThreshold,omitempty"` + // Optional; minimum # of minutes uptime to backup warming queries + UptimeMinutesThreshold int32 `protobuf:"varint,4,opt,name=uptimeMinutesThreshold,proto3" json:"uptimeMinutesThreshold,omitempty"` } func (x *BackupWarmingQueriesRequest) Reset() { @@ -3607,6 +3806,7 @@ func (x *BackupWarmingQueriesRequest) GetUptimeMinutesThreshold() int32 { return 0 } +// Response from Server for backupWarmingQueries type BackupWarmingQueriesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3645,6 +3845,7 @@ func (*BackupWarmingQueriesResponse) Descriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{44} } +// Input to indices type IndicesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3683,12 +3884,14 @@ func (*IndicesRequest) Descriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{45} } +// Response from Server for indices type IndicesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndicesResponse []*IndexStatsResponse `protobuf:"bytes,1,rep,name=indicesResponse,proto3" json:"indicesResponse,omitempty"` //list of IndexStatsResponse + // List of index stats + IndicesResponse []*IndexStatsResponse `protobuf:"bytes,1,rep,name=indicesResponse,proto3" json:"indicesResponse,omitempty"` } func (x *IndicesResponse) Reset() { @@ -3730,13 +3933,16 @@ func (x *IndicesResponse) GetIndicesResponse() []*IndexStatsResponse { return nil } +// Index stats response type IndexStatsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name - StatsResponse *StatsResponse `protobuf:"bytes,2,opt,name=statsResponse,proto3" json:"statsResponse,omitempty"` //stats for an index + // Index name + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Index stats + StatsResponse *StatsResponse `protobuf:"bytes,2,opt,name=statsResponse,proto3" json:"statsResponse,omitempty"` } func (x *IndexStatsResponse) Reset() { @@ -3785,14 +3991,18 @@ func (x *IndexStatsResponse) GetStatsResponse() *StatsResponse { return nil } +// Index restore information type RestoreIndex struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" json:"serviceName,omitempty"` // remote storage namespace qualifier for service - ResourceName string `protobuf:"bytes,2,opt,name=resourceName,proto3" json:"resourceName,omitempty"` //remote storage namespace qualifier for resource e.g. indexName - DeleteExistingData bool `protobuf:"varint,3,opt,name=deleteExistingData,proto3" json:"deleteExistingData,omitempty"` // delete any existing data for the index + // Remote storage namespace qualifier for service + ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" json:"serviceName,omitempty"` + // Remote storage namespace qualifier for resource e.g. indexName + ResourceName string `protobuf:"bytes,2,opt,name=resourceName,proto3" json:"resourceName,omitempty"` + // Delete any existing local data for the index + DeleteExistingData bool `protobuf:"varint,3,opt,name=deleteExistingData,proto3" json:"deleteExistingData,omitempty"` } func (x *RestoreIndex) Reset() { @@ -3848,6 +4058,7 @@ func (x *RestoreIndex) GetDeleteExistingData() bool { return false } +// Input to nodeInfo type NodeInfoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3886,20 +4097,21 @@ func (*NodeInfoRequest) Descriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{49} } +// Response from Server for nodeInfo type NodeInfoResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // node name + // Node name NodeName string `protobuf:"bytes,1,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"` - // service name + // Service name ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` - // host name + // Host name HostName string `protobuf:"bytes,3,opt,name=host_name,json=hostName,proto3" json:"host_name,omitempty"` - // nrtsearch version + // Nrtsearch version Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` - // node ephemeral id + // Node ephemeral id EphemeralId string `protobuf:"bytes,5,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` } @@ -3970,6 +4182,7 @@ func (x *NodeInfoResponse) GetEphemeralId() string { return "" } +// Input to globalState type GlobalStateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4008,12 +4221,13 @@ func (*GlobalStateRequest) Descriptor() ([]byte, []int) { return file_yelp_nrtsearch_luceneserver_proto_rawDescGZIP(), []int{51} } +// Response from Server for globalState type GlobalStateResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // cluster global state + // Cluster global state GlobalState *GlobalStateInfo `protobuf:"bytes,1,opt,name=global_state,json=globalState,proto3" json:"global_state,omitempty"` } @@ -4056,12 +4270,14 @@ func (x *GlobalStateResponse) GetGlobalState() *GlobalStateInfo { return nil } +// Input to state type StateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name + // Index name to retrieve state + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *StateRequest) Reset() { @@ -4103,12 +4319,14 @@ func (x *StateRequest) GetIndexName() string { return "" } +// Response from Server for state type StateResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` //json string of the current index state + // Json string of the current index state + Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` } func (x *StateResponse) Reset() { @@ -4150,12 +4368,13 @@ func (x *StateResponse) GetResponse() string { return "" } +// Input to indexState type IndexStateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // index name + // Index name IndexName string `protobuf:"bytes,1,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"` } @@ -4198,12 +4417,13 @@ func (x *IndexStateRequest) GetIndexName() string { return "" } +// Response from Server for indexState type IndexStateResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // index state + // Index state IndexState *IndexStateInfo `protobuf:"bytes,1,opt,name=index_state,json=indexState,proto3" json:"index_state,omitempty"` } @@ -4246,20 +4466,27 @@ func (x *IndexStateResponse) GetIndexState() *IndexStateInfo { return nil } +// Input to addReplica type AddReplicaRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` //magic number send on all requests since these are meant for internal communication only - IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name + // Magic number send on all requests since these are meant for internal communication only + MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` + // Index name + IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` + // No longer used + // // Deprecated: Do not use. - ReplicaId int32 `protobuf:"varint,3,opt,name=replicaId,proto3" json:"replicaId,omitempty"` //replica Id - HostName string `protobuf:"bytes,4,opt,name=hostName,proto3" json:"hostName,omitempty"` // replica host name - Port int32 `protobuf:"varint,5,opt,name=port,proto3" json:"port,omitempty"` // replica port number - // index id + ReplicaId int32 `protobuf:"varint,3,opt,name=replicaId,proto3" json:"replicaId,omitempty"` + // Replica host name + HostName string `protobuf:"bytes,4,opt,name=hostName,proto3" json:"hostName,omitempty"` + // Replica port number + Port int32 `protobuf:"varint,5,opt,name=port,proto3" json:"port,omitempty"` + // Index id IndexId string `protobuf:"bytes,6,opt,name=indexId,proto3" json:"indexId,omitempty"` - // node name + // Node name NodeName string `protobuf:"bytes,7,opt,name=nodeName,proto3" json:"nodeName,omitempty"` } @@ -4345,12 +4572,14 @@ func (x *AddReplicaRequest) GetNodeName() string { return "" } +// Response from Server for addReplica type AddReplicaResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ok string `protobuf:"bytes,1,opt,name=ok,proto3" json:"ok,omitempty"` //Returns "ok" string on success + // Returns "ok" string on success + Ok string `protobuf:"bytes,1,opt,name=ok,proto3" json:"ok,omitempty"` } func (x *AddReplicaResponse) Reset() { @@ -4392,20 +4621,28 @@ func (x *AddReplicaResponse) GetOk() string { return "" } -// Holds incRef'd file level details for one point-in-time segment infos on the primary node. +// Holds incRef'd file level details for one point-in-time segment infos on the primary node type CopyState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - InfoBytesLength int32 `protobuf:"varint,1,opt,name=infoBytesLength,proto3" json:"infoBytesLength,omitempty"` // infoBytes len - InfoBytes []byte `protobuf:"bytes,2,opt,name=infoBytes,proto3" json:"infoBytes,omitempty"` //infoBytes - Gen int64 `protobuf:"varint,3,opt,name=gen,proto3" json:"gen,omitempty"` //gen - Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` //versiom - FilesMetadata *FilesMetadata `protobuf:"bytes,5,opt,name=filesMetadata,proto3" json:"filesMetadata,omitempty"` //fileMetadata - CompletedMergeFilesSize int32 `protobuf:"varint,6,opt,name=completedMergeFilesSize,proto3" json:"completedMergeFilesSize,omitempty"` //completed merged files - CompletedMergeFiles []string `protobuf:"bytes,7,rep,name=completedMergeFiles,proto3" json:"completedMergeFiles,omitempty"` //names of files that finished merge - PrimaryGen int64 `protobuf:"varint,8,opt,name=primaryGen,proto3" json:"primaryGen,omitempty"` //primary Gen + // InfoBytes length + InfoBytesLength int32 `protobuf:"varint,1,opt,name=infoBytesLength,proto3" json:"infoBytesLength,omitempty"` + // InfoBytes + InfoBytes []byte `protobuf:"bytes,2,opt,name=infoBytes,proto3" json:"infoBytes,omitempty"` + // Index generation + Gen int64 `protobuf:"varint,3,opt,name=gen,proto3" json:"gen,omitempty"` + // Index version + Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` + // Index file metadata + FilesMetadata *FilesMetadata `protobuf:"bytes,5,opt,name=filesMetadata,proto3" json:"filesMetadata,omitempty"` + // Completed merged files size + CompletedMergeFilesSize int32 `protobuf:"varint,6,opt,name=completedMergeFilesSize,proto3" json:"completedMergeFilesSize,omitempty"` + // Completed merged files + CompletedMergeFiles []string `protobuf:"bytes,7,rep,name=completedMergeFiles,proto3" json:"completedMergeFiles,omitempty"` + // Primary generation + PrimaryGen int64 `protobuf:"varint,8,opt,name=primaryGen,proto3" json:"primaryGen,omitempty"` } func (x *CopyState) Reset() { @@ -4496,6 +4733,7 @@ func (x *CopyState) GetPrimaryGen() int64 { return 0 } +// Metadata for multiple index files type FilesMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4551,18 +4789,26 @@ func (x *FilesMetadata) GetFileMetadata() []*FileMetadata { return nil } +// Metadata for a single index file type FileMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FileName string `protobuf:"bytes,1,opt,name=fileName,proto3" json:"fileName,omitempty"` //file Name - Len int64 `protobuf:"varint,2,opt,name=len,proto3" json:"len,omitempty"` //file checksum - Checksum int64 `protobuf:"varint,3,opt,name=checksum,proto3" json:"checksum,omitempty"` //file checksum - HeaderLength int32 `protobuf:"varint,4,opt,name=headerLength,proto3" json:"headerLength,omitempty"` //file header length; - Header []byte `protobuf:"bytes,5,opt,name=header,proto3" json:"header,omitempty"` //file header; - FooterLength int32 `protobuf:"varint,6,opt,name=footerLength,proto3" json:"footerLength,omitempty"` //file header length; - Footer []byte `protobuf:"bytes,7,opt,name=footer,proto3" json:"footer,omitempty"` //file header; + // File name + FileName string `protobuf:"bytes,1,opt,name=fileName,proto3" json:"fileName,omitempty"` + // File length + Len int64 `protobuf:"varint,2,opt,name=len,proto3" json:"len,omitempty"` + // File checksum + Checksum int64 `protobuf:"varint,3,opt,name=checksum,proto3" json:"checksum,omitempty"` + // File header length + HeaderLength int32 `protobuf:"varint,4,opt,name=headerLength,proto3" json:"headerLength,omitempty"` + // File header + Header []byte `protobuf:"bytes,5,opt,name=header,proto3" json:"header,omitempty"` + // File footer length + FooterLength int32 `protobuf:"varint,6,opt,name=footerLength,proto3" json:"footerLength,omitempty"` + // File footer + Footer []byte `protobuf:"bytes,7,opt,name=footer,proto3" json:"footer,omitempty"` } func (x *FileMetadata) Reset() { @@ -4646,17 +4892,21 @@ func (x *FileMetadata) GetFooter() []byte { return nil } -// * Primary invokes this on a replica to ask it to copy files +// Primary invokes this on a replica to ask it to copy files type CopyFiles struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` //magic number send on all requests since these are meant for internal communication only - IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name - PrimaryGen int64 `protobuf:"varint,3,opt,name=primaryGen,proto3" json:"primaryGen,omitempty"` //primary, the generation of this primary (should increment each time a new primary starts for this index) - FilesMetadata *FilesMetadata `protobuf:"bytes,4,opt,name=filesMetadata,proto3" json:"filesMetadata,omitempty"` //file metadata to copy - // index id + // Magic number send on all requests since these are meant for internal communication only + MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` + // Index name + IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Primary generation + PrimaryGen int64 `protobuf:"varint,3,opt,name=primaryGen,proto3" json:"primaryGen,omitempty"` + // Files metadata to copy + FilesMetadata *FilesMetadata `protobuf:"bytes,4,opt,name=filesMetadata,proto3" json:"filesMetadata,omitempty"` + // Index id IndexId string `protobuf:"bytes,5,opt,name=indexId,proto3" json:"indexId,omitempty"` } @@ -4727,16 +4977,19 @@ func (x *CopyFiles) GetIndexId() string { return "" } -// * Replica invokes this on a primary to let primary know it needs the CopyState +// Replica invokes this on a primary to let primary know it needs the CopyState type CopyStateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` //magic number send on all requests since these are meant for internal communication only - IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name - ReplicaId int32 `protobuf:"varint,3,opt,name=replicaId,proto3" json:"replicaId,omitempty"` //replica Id - // index id + // Magic number send on all requests since these are meant for internal communication only + MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` + // Index name + IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Replica id + ReplicaId int32 `protobuf:"varint,3,opt,name=replicaId,proto3" json:"replicaId,omitempty"` + // Index id IndexId string `protobuf:"bytes,4,opt,name=indexId,proto3" json:"indexId,omitempty"` } @@ -4800,17 +5053,21 @@ func (x *CopyStateRequest) GetIndexId() string { return "" } +// Request to receive file data from primary type FileInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FileName string `protobuf:"bytes,1,opt,name=fileName,proto3" json:"fileName,omitempty"` // Name of the file the replica wants primary to send - FpStart int64 `protobuf:"varint,2,opt,name=fpStart,proto3" json:"fpStart,omitempty"` // Starting offset in the file primary should start sending bytes from: - IndexName string `protobuf:"bytes,3,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name these files belong to - // sequence number to ack, only used for acked file copy + // Name of the file the replica wants primary to send + FileName string `protobuf:"bytes,1,opt,name=fileName,proto3" json:"fileName,omitempty"` + // Starting offset in the file primary should start sending bytes from + FpStart int64 `protobuf:"varint,2,opt,name=fpStart,proto3" json:"fpStart,omitempty"` + // Index name these files belong to + IndexName string `protobuf:"bytes,3,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Sequence number to ack, only used for acked file copy AckSeqNum int32 `protobuf:"varint,4,opt,name=ackSeqNum,proto3" json:"ackSeqNum,omitempty"` - // index id + // Index id IndexId string `protobuf:"bytes,5,opt,name=indexId,proto3" json:"indexId,omitempty"` } @@ -4881,15 +5138,17 @@ func (x *FileInfo) GetIndexId() string { return "" } +// Chunk of file data type RawFileChunk struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` //raw contents of file - // sequence number for this chunk, only used for acked file copy + // Raw contents of file + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + // Sequence number for this chunk, only used for acked file copy SeqNum int32 `protobuf:"varint,2,opt,name=seqNum,proto3" json:"seqNum,omitempty"` - // if this chunk should be acked, only used for acked file copy + // If this chunk should be acked, only used for acked file copy Ack bool `protobuf:"varint,3,opt,name=ack,proto3" json:"ack,omitempty"` } @@ -4946,12 +5205,14 @@ func (x *RawFileChunk) GetAck() bool { return false } +// Input to healthCheck type HealthCheckRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Check bool `protobuf:"varint,1,opt,name=check,proto3" json:"check,omitempty"` //healthcheck request + // Healthcheck request + Check bool `protobuf:"varint,1,opt,name=check,proto3" json:"check,omitempty"` } func (x *HealthCheckRequest) Reset() { @@ -4993,12 +5254,14 @@ func (x *HealthCheckRequest) GetCheck() bool { return false } +// Response from Server for healthCheck type HealthCheckResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Health TransferStatusCode `protobuf:"varint,1,opt,name=health,proto3,enum=luceneserver.TransferStatusCode" json:"health,omitempty"` //enum response of healthcheck; + // Response of healthcheck + Health TransferStatusCode `protobuf:"varint,1,opt,name=health,proto3,enum=luceneserver.TransferStatusCode" json:"health,omitempty"` } func (x *HealthCheckResponse) Reset() { @@ -5040,6 +5303,7 @@ func (x *HealthCheckResponse) GetHealth() TransferStatusCode { return TransferStatusCode_Unknown } +// Input to readyCheck type ReadyCheckRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5087,13 +5351,16 @@ func (x *ReadyCheckRequest) GetIndexNames() string { return "" } +// Response with transfer status type TransferStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Message string `protobuf:"bytes,1,opt,name=Message,proto3" json:"Message,omitempty"` - Code TransferStatusCode `protobuf:"varint,2,opt,name=Code,proto3,enum=luceneserver.TransferStatusCode" json:"Code,omitempty"` + // Response message + Message string `protobuf:"bytes,1,opt,name=Message,proto3" json:"Message,omitempty"` + // Transfer status code + Code TransferStatusCode `protobuf:"varint,2,opt,name=Code,proto3,enum=luceneserver.TransferStatusCode" json:"Code,omitempty"` } func (x *TransferStatus) Reset() { @@ -5142,16 +5409,21 @@ func (x *TransferStatus) GetCode() TransferStatusCode { return TransferStatusCode_Unknown } +// Input to newNRTPoint type NewNRTPoint struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` //magic number send on all requests since these are meant for internal communication only - IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name - PrimaryGen int64 `protobuf:"varint,3,opt,name=primaryGen,proto3" json:"primaryGen,omitempty"` //primary, the generation of this primary (should increment each time a new primary starts for this index) - Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` //version number when this SegmentInfos was generated - // index id + // Magic number send on all requests since these are meant for internal communication only + MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` + // Index name + IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Primary generation + PrimaryGen int64 `protobuf:"varint,3,opt,name=primaryGen,proto3" json:"primaryGen,omitempty"` + // Version number when this SegmentInfos was generated + Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` + // Index id IndexId string `protobuf:"bytes,5,opt,name=indexId,proto3" json:"indexId,omitempty"` } @@ -5222,13 +5494,16 @@ func (x *NewNRTPoint) GetIndexId() string { return "" } +// Index name with magic number type IndexName struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` //magic number send on all requests since these are meant for internal communication only - IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` //index name + // Magic number send on all requests since these are meant for internal communication only + MagicNumber int32 `protobuf:"varint,1,opt,name=magicNumber,proto3" json:"magicNumber,omitempty"` + // Index name + IndexName string `protobuf:"bytes,2,opt,name=indexName,proto3" json:"indexName,omitempty"` } func (x *IndexName) Reset() { @@ -5277,13 +5552,17 @@ func (x *IndexName) GetIndexName() string { return "" } +// Index searcher version type SearcherVersion struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` //returns the version recorded in the commit that the reader opened. This version is advanced every time a change is made with IndexWriter - DidRefresh bool `protobuf:"varint,2,opt,name=didRefresh,proto3" json:"didRefresh,omitempty"` //true if refresh happened + // Version recorded in the commit that the reader opened. This version is advanced every time a change + // is made with IndexWriter. + Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + // True if refresh happened + DidRefresh bool `protobuf:"varint,2,opt,name=didRefresh,proto3" json:"didRefresh,omitempty"` } func (x *SearcherVersion) Reset() { @@ -5332,11 +5611,13 @@ func (x *SearcherVersion) GetDidRefresh() bool { return false } +// Input to getNodes type GetNodesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Index name IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //name of the started index whose binary connections we wish to see } @@ -5379,6 +5660,7 @@ func (x *GetNodesRequest) GetIndexName() string { return "" } +// Response from Server for getNodes type GetNodesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5426,14 +5708,18 @@ func (x *GetNodesResponse) GetNodes() []*NodeInfo { return nil } +// Node information type NodeInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"` //name or ip address of the remote host that this node is connected to for binary replication - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` //port number of the remote host that this node is connected to for binary replication - NodeName string `protobuf:"bytes,3,opt,name=nodeName,proto3" json:"nodeName,omitempty"` //name of the remote node + // Name or ip address of the remote host that this node is connected to for binary replication + Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"` + // Port number of the remote host that this node is connected to for binary replication + Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` + // Name of the remote node + NodeName string `protobuf:"bytes,3,opt,name=nodeName,proto3" json:"nodeName,omitempty"` } func (x *NodeInfo) Reset() { @@ -5489,13 +5775,16 @@ func (x *NodeInfo) GetNodeName() string { return "" } +// Input to deleteByQuery type DeleteByQueryRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // Index to delete documents from - Query []*Query `protobuf:"bytes,2,rep,name=query,proto3" json:"query,omitempty"` // Queries to match documents to be deleted + // Index name to delete documents from + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Queries to match documents to be deleted + Query []*Query `protobuf:"bytes,2,rep,name=query,proto3" json:"query,omitempty"` } func (x *DeleteByQueryRequest) Reset() { @@ -5544,14 +5833,19 @@ func (x *DeleteByQueryRequest) GetQuery() []*Query { return nil } +// Input to forceMerge type ForceMergeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // Index whose segments must be force merged - MaxNumSegments int32 `protobuf:"varint,2,opt,name=maxNumSegments,proto3" json:"maxNumSegments,omitempty"` // Maximum number of segments after force merge - DoWait bool `protobuf:"varint,3,opt,name=doWait,proto3" json:"doWait,omitempty"` // If true, waits until the force merge is completed before returning a response. Otherwise starts force merging in async and returns a response. + // Index name whose segments must be force merged + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Maximum number of segments after force merge + MaxNumSegments int32 `protobuf:"varint,2,opt,name=maxNumSegments,proto3" json:"maxNumSegments,omitempty"` + // If true, waits until the force merge is completed before returning a response. Otherwise starts force + // merging in async and returns a response. + DoWait bool `protobuf:"varint,3,opt,name=doWait,proto3" json:"doWait,omitempty"` } func (x *ForceMergeRequest) Reset() { @@ -5607,11 +5901,13 @@ func (x *ForceMergeRequest) GetDoWait() bool { return false } +// Response from Server for forceMerge type ForceMergeResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Status of force merge Status ForceMergeResponse_Status `protobuf:"varint,1,opt,name=status,proto3,enum=luceneserver.ForceMergeResponse_Status" json:"status,omitempty"` } @@ -5654,13 +5950,17 @@ func (x *ForceMergeResponse) GetStatus() ForceMergeResponse_Status { return ForceMergeResponse_FORCE_MERGE_COMPLETED } +// Input to forceMergeDeletes type ForceMergeDeletesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // Index whose segments having deletes must be force merged - DoWait bool `protobuf:"varint,2,opt,name=doWait,proto3" json:"doWait,omitempty"` // If true, waits until the force merge is completed before returning a response. Otherwise starts force merging in async and returns a response. + // Index name whose segments having deletes must be force merged + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // If true, waits until the force merge is completed before returning a response. Otherwise starts force + // merging in async and returns a response. + DoWait bool `protobuf:"varint,2,opt,name=doWait,proto3" json:"doWait,omitempty"` } func (x *ForceMergeDeletesRequest) Reset() { @@ -5709,11 +6009,13 @@ func (x *ForceMergeDeletesRequest) GetDoWait() bool { return false } +// Response from Server for forceMergeDeletes type ForceMergeDeletesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Status of force merge deletes Status ForceMergeDeletesResponse_Status `protobuf:"varint,1,opt,name=status,proto3,enum=luceneserver.ForceMergeDeletesResponse_Status" json:"status,omitempty"` } @@ -5756,6 +6058,7 @@ func (x *ForceMergeDeletesResponse) GetStatus() ForceMergeDeletesResponse_Status return ForceMergeDeletesResponse_FORCE_MERGE_DELETES_COMPLETED } +// Index offline settings type IndexSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5773,7 +6076,10 @@ type IndexSettings struct { IndexSort *SortFields `protobuf:"bytes,5,opt,name=indexSort,proto3" json:"indexSort,omitempty"` // Turn on/off the merge scheduler's auto throttling, default: off IndexMergeSchedulerAutoThrottle *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=indexMergeSchedulerAutoThrottle,proto3" json:"indexMergeSchedulerAutoThrottle,omitempty"` - // Base Directory implementation to use (NRTCachingDirectory will wrap this) either one of the core implementations (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory implementation that has a public constructor taking a single File argument default: FSDirectory + // Base Directory implementation to use either one of the core implementations + // (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory + // implementation that has a public constructor taking a single File argument default: FSDirectory. + // This implementation will be wrapped by NRTCachingDirectory, if enabled and not using MMappedDirectory. Directory *wrapperspb.StringValue `protobuf:"bytes,7,opt,name=directory,proto3" json:"directory,omitempty"` } @@ -5858,6 +6164,7 @@ func (x *IndexSettings) GetDirectory() *wrapperspb.StringValue { return nil } +// Index live settings type IndexLiveSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5865,7 +6172,8 @@ type IndexLiveSettings struct { // Longest time to wait before reopening IndexSearcher (i.e., periodic background reopen), default: 1.0 MaxRefreshSec *wrapperspb.DoubleValue `protobuf:"bytes,1,opt,name=maxRefreshSec,proto3" json:"maxRefreshSec,omitempty"` - // Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen), default: 0.05 + // Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen), + // default: 0.05 MinRefreshSec *wrapperspb.DoubleValue `protobuf:"bytes,2,opt,name=minRefreshSec,proto3" json:"minRefreshSec,omitempty"` // Non-current searchers older than this are pruned, default: 60.0 MaxSearcherAgeSec *wrapperspb.DoubleValue `protobuf:"bytes,3,opt,name=maxSearcherAgeSec,proto3" json:"maxSearcherAgeSec,omitempty"` @@ -5891,7 +6199,8 @@ type IndexLiveSettings struct { DefaultTerminateAfter *wrapperspb.Int32Value `protobuf:"bytes,13,opt,name=defaultTerminateAfter,proto3" json:"defaultTerminateAfter,omitempty"` // Merge precopy would be stopped after this time, or 0 for no checks, default: 0 MaxMergePreCopyDurationSec *wrapperspb.UInt64Value `protobuf:"bytes,14,opt,name=maxMergePreCopyDurationSec,proto3" json:"maxMergePreCopyDurationSec,omitempty"` - // Collect and publish additional index metrics, which may be more expensive in terms of volume, memory and/or compute, default: false + // Collect and publish additional index metrics, which may be more expensive in terms of volume, memory + // and/or compute, default: false VerboseMetrics *wrapperspb.BoolValue `protobuf:"bytes,15,opt,name=verboseMetrics,proto3" json:"verboseMetrics,omitempty"` // If fetch parallelism should be done by groups of fields instead of document, default: false ParallelFetchByField *wrapperspb.BoolValue `protobuf:"bytes,16,opt,name=parallelFetchByField,proto3" json:"parallelFetchByField,omitempty"` @@ -6050,6 +6359,7 @@ func (x *IndexLiveSettings) GetParallelFetchChunkSize() *wrapperspb.Int32Value { return nil } +// Index state type IndexStateInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6143,6 +6453,7 @@ func (x *IndexStateInfo) GetFields() map[string]*Field { return nil } +// Per index information stored in global state type IndexGlobalState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6200,6 +6511,7 @@ func (x *IndexGlobalState) GetStarted() bool { return false } +// Cluster global state type GlobalStateInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6257,14 +6569,18 @@ func (x *GlobalStateInfo) GetIndices() map[string]*IndexGlobalState { return nil } +// Input to custom type CustomRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ID defined for custom requests in a plugin - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // Custom path that is defined in a plugin that maps to a route - Params map[string]string `protobuf:"bytes,3,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Parameters that can be processed by the plugin at the specified path + // ID defined for custom requests in a plugin + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Custom path that is defined in a plugin that maps to a route + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + // Parameters that can be processed by the plugin at the specified path + Params map[string]string `protobuf:"bytes,3,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *CustomRequest) Reset() { @@ -6320,6 +6636,7 @@ func (x *CustomRequest) GetParams() map[string]string { return nil } +// Response from Server for custom type CustomResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6367,13 +6684,14 @@ func (x *CustomResponse) GetResponse() map[string]string { return nil } -// we use this wrapper object to represent each field as a multivalued field. +// Wrapper object to represent each field as a multivalued field. type AddDocumentRequest_MultiValuedField struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` //list of values for this field + // List of values for this field + Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` // Facet paths/hierarchy to bucket these values by, if indexed field is of type Facet.HIERARCHY FaceHierarchyPaths []*FacetHierarchyPath `protobuf:"bytes,2,rep,name=faceHierarchyPaths,proto3" json:"faceHierarchyPaths,omitempty"` } @@ -6675,1045 +6993,1045 @@ var file_yelp_nrtsearch_luceneserver_proto_rawDesc = []byte{ 0x65, 0x6c, 0x64, 0x22, 0x2e, 0x0a, 0x10, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x85, 0x05, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x6e, 0x73, 0x65, 0x22, 0x8d, 0x05, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x4d, 0x61, - 0x78, 0x4d, 0x42, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x10, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x4d, 0x42, 0x50, 0x65, 0x72, 0x53, 0x65, - 0x63, 0x12, 0x4c, 0x0a, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x21, 0x6e, 0x72, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, - 0x42, 0x0a, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x10, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x4d, 0x61, + 0x78, 0x4d, 0x42, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x42, + 0x02, 0x18, 0x01, 0x52, 0x10, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x4d, 0x42, 0x50, + 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x4c, 0x0a, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, + 0x65, 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x4d, 0x42, 0x12, 0x42, 0x0a, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, - 0x65, 0x4d, 0x42, 0x12, 0x56, 0x0a, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, - 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, - 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x54, 0x0a, 0x25, 0x63, - 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x25, 0x63, 0x6f, 0x6e, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x36, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, - 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x41, - 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, - 0x6f, 0x72, 0x6d, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x2e, 0x0a, 0x10, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x0a, 0x11, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, - 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x4d, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, - 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x9f, 0x02, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, - 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x34, - 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x72, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x33, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x84, 0x01, - 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, 0x0a, 0x07, - 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, - 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x53, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x53, 0x22, 0xe2, 0x02, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, - 0x7a, 0x0a, 0x10, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x66, 0x61, 0x63, - 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, - 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x12, 0x66, 0x61, 0x63, 0x65, 0x48, 0x69, 0x65, - 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x73, 0x1a, 0x6c, 0x0a, 0x0b, 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, 0x47, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2a, 0x0a, 0x12, 0x46, 0x61, 0x63, - 0x65, 0x74, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x49, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x67, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x65, 0x6e, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, - 0x22, 0x2e, 0x0a, 0x0e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x65, 0x4d, 0x42, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, + 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x56, 0x0a, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x54, 0x0a, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, + 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x25, + 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, + 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, + 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, + 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, + 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, + 0x24, 0x0a, 0x0b, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x22, 0x2e, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, + 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, + 0x4d, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x9f, + 0x02, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x12, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x32, 0x0a, 0x14, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x46, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x69, 0x6d, + 0x61, 0x72, 0x79, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, + 0x22, 0x33, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, + 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x22, 0xe2, 0x02, 0x0a, + 0x12, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x44, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x7a, 0x0a, 0x10, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x50, 0x0a, 0x12, 0x66, 0x61, 0x63, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, + 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x61, 0x63, + 0x65, 0x74, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, + 0x12, 0x66, 0x61, 0x63, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x1a, 0x6c, 0x0a, 0x0b, 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, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x2a, 0x0a, 0x12, 0x46, 0x61, 0x63, 0x65, 0x74, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, + 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x49, 0x0a, + 0x13, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0e, 0x52, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x37, 0x0a, 0x0f, 0x52, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, + 0x53, 0x22, 0x2d, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x37, 0x0a, 0x0f, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x53, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x22, 0x2d, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x0c, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, + 0x22, 0x40, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x67, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, + 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0xaf, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, 0x0a, 0x07, + 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, + 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x72, 0x53, 0x69, 0x7a, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x64, 0x69, 0x72, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, + 0x6d, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x52, 0x08, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x12, 0x34, 0x0a, 0x09, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x65, 0x72, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, + 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x72, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x65, 0x72, 0x22, 0x40, 0x0a, 0x08, 0x54, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x12, 0x18, + 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x4f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x6e, 0x75, 0x6d, 0x4f, 0x72, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x08, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6e, + 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, + 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x6c, + 0x65, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, + 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x39, 0x0a, + 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xaf, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x72, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, - 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x64, 0x69, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x64, 0x69, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x32, - 0x0a, 0x08, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x54, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x52, 0x08, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, - 0x6d, 0x79, 0x12, 0x34, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x52, 0x09, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x22, 0x40, 0x0a, 0x08, 0x54, 0x61, - 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x4f, 0x72, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x4f, 0x72, 0x64, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa6, 0x01, 0x0a, - 0x08, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, - 0x6c, 0x65, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x39, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x32, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x12, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x32, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, - 0x65, 0x6e, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, + 0x22, 0x25, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x0d, 0x44, 0x75, 0x6d, 0x6d, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x30, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x70, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, + 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, + 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x65, 0x72, 0x22, 0xb8, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, + 0x64, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x66, 0x0a, + 0x0a, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x78, 0x6f, 0x6e, + 0x6f, 0x6d, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x61, + 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x47, 0x65, 0x6e, 0x22, 0x70, 0x0a, 0x16, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, + 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x52, 0x0a, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x17, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x38, 0x0a, 0x18, + 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x39, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, + 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, + 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6e, 0x75, 0x6d, + 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x75, + 0x70, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, + 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x75, 0x70, 0x74, + 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, + 0x6f, 0x6c, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, + 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x75, 0x0a, 0x12, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, 0x22, - 0x1f, 0x0a, 0x0d, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, - 0x22, 0x30, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0d, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x0c, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, + 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x69, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x11, 0x0a, 0x0f, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x10, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, + 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, + 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, + 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, + 0x61, 0x6c, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x13, 0x47, 0x6c, + 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x40, 0x0a, 0x0c, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x22, 0x2c, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, + 0x0a, 0x11, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x6f, - 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x59, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6f, 0x70, - 0x65, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x22, 0xb8, 0x01, 0x0a, 0x16, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, - 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, - 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0a, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x12, - 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x65, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x47, 0x65, 0x6e, 0x22, 0x70, 0x0a, - 0x16, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x49, 0x64, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, - 0x33, 0x0a, 0x17, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x22, 0x38, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x39, - 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x1b, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, - 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, - 0x75, 0x74, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x16, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x75, 0x74, - 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, - 0x0f, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4a, 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x75, 0x0a, 0x12, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x41, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x11, 0x0a, 0x0f, 0x4e, 0x6f, - 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xac, 0x01, - 0x0a, 0x10, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, - 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x57, 0x0a, 0x13, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0c, 0x67, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, - 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2c, 0x0a, 0x0c, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x11, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x53, 0x0a, 0x12, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, - 0xdb, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, - 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, - 0x12, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x6f, 0x6b, 0x22, 0xce, 0x02, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x69, 0x6e, 0x66, 0x6f, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x69, - 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, - 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, - 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, - 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x47, 0x65, 0x6e, 0x22, 0x6b, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x12, 0x3e, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0xd0, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6c, 0x65, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x6f, 0x6f, 0x74, - 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, - 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x6f, - 0x6f, 0x74, 0x65, 0x72, 0x22, 0xc8, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, - 0x65, 0x6e, 0x12, 0x41, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x22, - 0x8a, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x22, 0x96, 0x01, 0x0a, - 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x49, 0x64, 0x22, 0x52, 0x0a, 0x0c, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x22, 0x2a, 0x0a, 0x12, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x4f, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x22, 0x33, 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x79, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xa1, 0x01, - 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x20, 0x0a, + 0x6d, 0x65, 0x22, 0x53, 0x0a, 0x12, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, - 0x64, 0x22, 0x4b, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4b, - 0x0a, 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x64, - 0x69, 0x64, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0a, 0x64, 0x69, 0x64, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x22, 0x2f, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2c, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x56, - 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, - 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, - 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x05, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x71, 0x0a, 0x11, 0x46, 0x6f, 0x72, 0x63, 0x65, - 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x61, - 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x12, 0x46, - 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xce, 0x02, 0x0a, 0x09, + 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x69, 0x6e, 0x66, + 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x67, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, + 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x38, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, + 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x22, 0x6b, 0x0a, 0x0d, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, + 0x08, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0c, 0x66, 0x69, 0x6c, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x66, 0x69, 0x6c, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd0, 0x01, 0x0a, 0x0c, 0x46, 0x69, + 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, + 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, + 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x6c, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0xc8, 0x01, 0x0a, + 0x09, 0x43, 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, + 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x41, 0x0a, 0x0d, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, + 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x22, 0x8a, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x70, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, + 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, + 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x49, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x66, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x66, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x4e, + 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x71, + 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x22, 0x52, 0x0a, + 0x0c, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x4e, 0x75, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x63, + 0x6b, 0x22, 0x2a, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x4f, 0x0a, + 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x22, 0x33, + 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x34, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x4e, 0x52, 0x54, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, + 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, + 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, + 0x72, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x09, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, + 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4b, 0x0a, 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x64, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x64, 0x52, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x22, 0x2f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x56, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5f, + 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, + 0x71, 0x0a, 0x11, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x4e, + 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, + 0x57, 0x61, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x6f, 0x57, 0x61, + 0x69, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x12, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3e, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, + 0x52, 0x47, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x53, + 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x01, 0x22, 0x50, 0x0a, 0x18, 0x46, 0x6f, + 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0xb3, 0x01, 0x0a, + 0x19, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, + 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x3e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x15, - 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x43, 0x45, - 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, - 0x10, 0x01, 0x22, 0x50, 0x0a, 0x18, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x6f, - 0x57, 0x61, 0x69, 0x74, 0x22, 0xb3, 0x01, 0x0a, 0x19, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, - 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4e, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, - 0x52, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x4f, 0x52, 0x43, 0x45, - 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x53, - 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x01, 0x22, 0x9f, 0x05, 0x0a, 0x0d, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x6a, 0x0a, 0x21, - 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, - 0x42, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x60, 0x0a, 0x1c, 0x6e, 0x72, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, - 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x6e, 0x72, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x73, 0x0a, 0x26, 0x63, 0x6f, - 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x71, 0x0a, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, - 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, - 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x25, 0x63, 0x6f, 0x6e, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x64, 0x0a, 0x1f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x12, 0x3a, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x22, 0xca, 0x0a, 0x0a, - 0x11, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x53, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x6d, 0x69, 0x6e, - 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x11, 0x6d, 0x61, - 0x78, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x75, 0x73, 0x22, 0x4e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x1d, + 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x45, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x21, 0x0a, 0x1d, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x44, + 0x45, 0x4c, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, + 0x10, 0x01, 0x22, 0x9f, 0x05, 0x0a, 0x0d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x6a, 0x0a, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x6e, + 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, + 0x12, 0x60, 0x0a, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, + 0x4d, 0x42, 0x12, 0x73, 0x0a, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, + 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, + 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x71, 0x0a, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, + 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, + 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, + 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, + 0x72, 0x74, 0x12, 0x64, 0x0a, 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, + 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, + 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x22, 0xca, 0x0a, 0x0a, 0x11, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, + 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x61, + 0x78, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0d, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x12, 0x42, + 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, - 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x12, 0x50, 0x0a, 0x14, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x61, 0x6d, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x14, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x61, 0x6d, 0x42, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x57, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x44, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x4c, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x4c, 0x65, - 0x6e, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x6f, 0x63, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x6f, - 0x63, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x73, 0x6c, 0x69, 0x63, 0x65, - 0x4d, 0x61, 0x78, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x76, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, + 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x72, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x6d, 0x61, 0x78, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x12, 0x50, + 0x0a, 0x14, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x61, 0x6d, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x61, 0x6d, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, + 0x12, 0x57, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x4d, 0x61, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4b, - 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x4d, 0x42, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, - 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x42, 0x12, 0x45, 0x0a, 0x0f, 0x73, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, 0x69, 0x65, 0x72, 0x18, 0x0a, + 0x18, 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x78, + 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x6c, 0x69, + 0x63, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x6c, + 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x73, 0x6c, + 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, 0x69, - 0x65, 0x72, 0x12, 0x56, 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x12, 0x63, 0x0a, 0x1e, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, + 0x65, 0x52, 0x10, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x68, + 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4b, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, + 0x67, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x42, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x1e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, 0x12, - 0x51, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x12, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x4d, 0x42, 0x12, 0x45, 0x0a, 0x0f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x50, + 0x65, 0x72, 0x54, 0x69, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, 0x69, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x17, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x53, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, + 0x65, 0x63, 0x12, 0x63, 0x0a, 0x1e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, 0x12, 0x51, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x1a, 0x6d, 0x61, + 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x72, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x1a, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x72, - 0x65, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x72, - 0x65, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, - 0x12, 0x42, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x12, 0x4e, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, + 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x6d, 0x61, + 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x72, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x62, + 0x6f, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x76, 0x65, + 0x72, 0x62, 0x6f, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x4e, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x79, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x16, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x16, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xee, 0x02, 0x0a, 0x0e, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, - 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x6c, 0x69, 0x76, 0x65, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x4e, 0x0a, 0x0b, 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, 0x29, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x0f, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, - 0x67, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x44, - 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5a, 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x69, 0x63, 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, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xaf, 0x01, 0x0a, 0x0d, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3f, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, - 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, 0x95, 0x01, 0x0a, 0x0e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x3b, 0x0a, - 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x69, 0x65, 0x6c, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x16, + 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x68, 0x75, + 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x70, 0x61, 0x72, 0x61, 0x6c, + 0x6c, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, + 0x65, 0x22, 0xee, 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x67, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0c, 0x6c, + 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x40, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x1a, 0x4e, 0x0a, 0x0b, 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, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x22, 0xc5, 0x01, 0x0a, 0x0f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x44, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5a, 0x0a, 0x0c, + 0x49, 0x6e, 0x64, 0x69, 0x63, 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, 0x34, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaf, 0x01, 0x0a, 0x0d, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3f, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, + 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 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, 0x2a, 0xe9, 0x01, 0x0a, 0x09, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x54, 0x4f, 0x4d, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, - 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x4f, 0x4e, - 0x47, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c, 0x4f, 0x41, - 0x54, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x41, 0x54, 0x5f, 0x4c, 0x4f, 0x4e, 0x10, 0x07, - 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x08, 0x12, - 0x0b, 0x0a, 0x07, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x09, 0x12, 0x0c, 0x0a, 0x08, - 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x0a, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, - 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x0b, 0x12, 0x07, 0x0a, 0x03, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, - 0x0b, 0x0a, 0x07, 0x50, 0x4f, 0x4c, 0x59, 0x47, 0x4f, 0x4e, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, - 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0e, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x43, 0x54, - 0x4f, 0x52, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x5f, - 0x53, 0x55, 0x47, 0x47, 0x45, 0x53, 0x54, 0x10, 0x10, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, - 0x54, 0x49, 0x4d, 0x45, 0x10, 0x11, 0x2a, 0x71, 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, - 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x43, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, - 0x0a, 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, 0x10, 0x02, 0x12, 0x18, 0x0a, - 0x14, 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, - 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x4f, 0x43, 0x53, 0x5f, - 0x46, 0x52, 0x45, 0x51, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, - 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x10, 0x04, 0x2a, 0x84, 0x01, 0x0a, 0x0b, 0x54, 0x65, - 0x72, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x5f, - 0x54, 0x45, 0x52, 0x4d, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x53, 0x10, 0x00, 0x12, 0x09, 0x0a, - 0x05, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x45, 0x52, 0x4d, - 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x1b, 0x0a, - 0x17, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, - 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x45, - 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, - 0x46, 0x53, 0x45, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x53, 0x10, 0x04, - 0x2a, 0x61, 0x0a, 0x09, 0x46, 0x61, 0x63, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, - 0x09, 0x4e, 0x4f, 0x5f, 0x46, 0x41, 0x43, 0x45, 0x54, 0x53, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x46, 0x4c, 0x41, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, - 0x43, 0x48, 0x59, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x55, 0x4d, 0x45, 0x52, 0x49, 0x43, - 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x4f, 0x52, 0x54, - 0x45, 0x44, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, - 0x53, 0x10, 0x04, 0x2a, 0x7b, 0x0a, 0x11, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x45, 0x58, 0x54, - 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, - 0x0a, 0x1b, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, - 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, - 0x1f, 0x0a, 0x1b, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, - 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, - 0x2a, 0x46, 0x0a, 0x11, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, - 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x13, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, - 0x54, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x30, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x4c, 0x4f, 0x4e, 0x45, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x10, 0x02, 0x2a, 0x44, 0x0a, 0x12, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x44, 0x6f, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x10, 0x03, - 0x32, 0x9f, 0x20, 0x0a, 0x0c, 0x4c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x12, 0x6f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, - 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x0e, 0x6c, 0x69, 0x76, 0x65, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, 0x23, 0x2e, 0x6c, 0x75, 0x63, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x95, 0x01, 0x0a, 0x0e, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 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, 0x2a, 0xe9, 0x01, 0x0a, 0x09, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x08, 0x0a, 0x04, 0x41, 0x54, 0x4f, 0x4d, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, + 0x58, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, + 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x4f, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x49, + 0x4e, 0x54, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x05, + 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x4c, + 0x41, 0x54, 0x5f, 0x4c, 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x45, + 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x08, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x49, 0x52, 0x54, 0x55, + 0x41, 0x4c, 0x10, 0x09, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, + 0x10, 0x0a, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x0b, 0x12, 0x07, + 0x0a, 0x03, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x4f, 0x4c, 0x59, 0x47, + 0x4f, 0x4e, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0e, + 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, + 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x53, 0x55, 0x47, 0x47, 0x45, 0x53, 0x54, 0x10, + 0x10, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x11, 0x2a, 0x71, + 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0b, + 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, + 0x4f, 0x43, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, + 0x45, 0x51, 0x53, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, + 0x45, 0x51, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x03, 0x12, + 0x20, 0x0a, 0x1c, 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, 0x5f, 0x50, 0x4f, + 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x10, + 0x04, 0x2a, 0x84, 0x01, 0x0a, 0x0b, 0x54, 0x65, 0x72, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x56, 0x45, 0x43, 0x54, + 0x4f, 0x52, 0x53, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x10, 0x01, + 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, + 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, + 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, + 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, + 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x5f, 0x50, 0x41, + 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x53, 0x10, 0x04, 0x2a, 0x61, 0x0a, 0x09, 0x46, 0x61, 0x63, 0x65, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x46, 0x41, 0x43, 0x45, + 0x54, 0x53, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4c, 0x41, 0x54, 0x10, 0x01, 0x12, 0x0d, + 0x0a, 0x09, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59, 0x10, 0x02, 0x12, 0x11, 0x0a, + 0x0d, 0x4e, 0x55, 0x4d, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x03, + 0x12, 0x19, 0x0a, 0x15, 0x53, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x44, + 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x10, 0x04, 0x2a, 0x7b, 0x0a, 0x11, 0x54, + 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x24, 0x0a, 0x20, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x44, + 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, + 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x45, 0x58, 0x54, 0x5f, + 0x44, 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x53, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x46, 0x0a, 0x11, 0x56, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, + 0x14, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, + 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x45, 0x43, 0x54, 0x4f, + 0x52, 0x5f, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x10, 0x01, + 0x2a, 0x30, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x4e, + 0x44, 0x41, 0x4c, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x4d, + 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, + 0x10, 0x02, 0x2a, 0x44, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, + 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x6f, 0x6e, 0x65, 0x10, 0x01, 0x12, + 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4f, + 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x32, 0x9f, 0x20, 0x0a, 0x0c, 0x4c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x6f, 0x0a, 0x0b, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x6c, 0x69, + 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, - 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22, 0x11, 0x2f, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x76, + 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6c, + 0x69, 0x76, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, + 0x9a, 0x01, 0x0a, 0x0e, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x56, 0x32, 0x12, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x5f, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x5a, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x3a, 0x01, 0x2a, 0x5a, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x5f, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6f, 0x0a, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, + 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6f, 0x0a, 0x0e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1d, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, + 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1d, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x08, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, - 0x76, 0x31, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, - 0x31, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x3a, - 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1d, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x84, + 0x01, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, - 0x22, 0x0c, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, - 0x2a, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6b, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1f, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0c, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x63, 0x0a, 0x09, 0x73, - 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, - 0x12, 0x6f, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, - 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x12, 0x5e, 0x0a, 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, - 0x68, 0x12, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x3a, - 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x09, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x5a, 0x17, 0x12, 0x15, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x7d, 0x12, 0x5a, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, - 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, - 0x54, 0x0a, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x32, 0x12, 0x1b, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x22, 0x15, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x64, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, - 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, - 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x76, 0x0a, 0x0d, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x22, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, - 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, - 0x12, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, - 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x6f, - 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, - 0x7b, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x12, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x0f, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x01, - 0x0a, 0x16, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x12, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x67, 0x65, - 0x6e, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x94, 0x01, - 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, - 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x5f, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x60, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, - 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x6f, 0x0a, 0x0b, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x0c, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x32, + 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6b, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, + 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x56, 0x32, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, + 0x0f, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x3a, 0x01, 0x2a, 0x12, 0x63, 0x0a, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x53, 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x6f, + 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x61, 0x64, 0x64, + 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x64, 0x5f, + 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x12, 0x5e, + 0x0a, 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x5a, + 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x27, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x3a, + 0x01, 0x2a, 0x5a, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2f, + 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5a, 0x0a, 0x06, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x54, 0x0a, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x56, 0x32, 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, + 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x64, 0x0a, + 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x3a, 0x01, 0x2a, 0x12, 0x76, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x79, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, + 0x62, 0x79, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x09, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, + 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, + 0x61, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x27, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x5a, - 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0a, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x34, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x5a, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x61, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x78, 0x0a, 0x05, 0x72, 0x65, 0x61, - 0x64, 0x79, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x09, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5a, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x7d, 0x12, 0x50, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x17, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x5b, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x12, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, - 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, - 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x12, - 0x88, 0x01, 0x0a, 0x11, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, + 0x12, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x67, + 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x67, 0x65, 0x6e, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x94, 0x01, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x29, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, + 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, + 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, + 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x60, 0x0a, 0x08, + 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, + 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x6f, + 0x0a, 0x0b, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x6c, 0x6f, + 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, + 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, + 0x6f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x5a, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, + 0x12, 0x8b, 0x01, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x5a, 0x1e, + 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x61, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x78, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x79, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x5a, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x2f, 0x7b, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x7d, 0x12, 0x50, 0x0a, 0x07, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, + 0x42, 0x6f, 0x64, 0x79, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x5b, 0x0a, + 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, + 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x0a, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x6d, + 0x65, 0x72, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x11, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, - 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x06, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1b, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, + 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x3a, 0x01, 0x2a, 0x32, 0x9c, 0x06, 0x0a, 0x11, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x12, 0x52, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, + 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, + 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x76, 0x43, 0x6f, 0x70, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, + 0x12, 0x4b, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x12, + 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, + 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x28, 0x01, 0x12, 0x45, 0x0a, + 0x0b, 0x72, 0x65, 0x63, 0x76, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x76, 0x52, 0x61, 0x77, 0x46, + 0x69, 0x6c, 0x65, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x1a, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x77, + 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, + 0x46, 0x0a, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, 0x79, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x4e, 0x52, + 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x65, 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x3a, - 0x01, 0x2a, 0x32, 0x9c, 0x06, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0d, - 0x72, 0x65, 0x63, 0x76, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, - 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, - 0x75, 0x6e, 0x6b, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x22, 0x00, 0x28, 0x01, 0x12, 0x45, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x76, 0x52, 0x61, 0x77, - 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x1a, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x77, 0x46, - 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x0d, - 0x72, 0x65, 0x63, 0x76, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x32, 0x12, 0x16, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x1c, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, - 0x48, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x65, - 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0d, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, - 0x61, 0x6d, 0x65, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x11, 0x67, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x73, - 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, - 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x42, 0x56, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x79, 0x65, 0x6c, 0x70, 0x2e, 0x6e, 0x72, - 0x74, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x42, 0x11, 0x4c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x19, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x59, 0x65, 0x6c, 0x70, 0x2f, 0x6e, 0x72, 0x74, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0xa2, 0x02, 0x03, 0x48, 0x4c, 0x57, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x00, 0x12, 0x49, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x19, + 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x56, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, + 0x2e, 0x79, 0x65, 0x6c, 0x70, 0x2e, 0x6e, 0x72, 0x74, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x42, 0x11, 0x4c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x19, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x59, 0x65, 0x6c, + 0x70, 0x2f, 0x6e, 0x72, 0x74, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0xa2, 0x02, 0x03, 0x48, 0x4c, + 0x57, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9141,55 +9459,58 @@ const _ = grpc.SupportPackageIsVersion6 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type LuceneServerClient interface { - // Create an Index + // Create an Index. Optionally, initial settings and live settings may be specified. The index is created + // in the stopped state, unless specified. CreateIndex(ctx context.Context, in *CreateIndexRequest, opts ...grpc.CallOption) (*CreateIndexResponse, error) - // Change global offline or online settings for this index. + // Change live settings for an index. These settings may be changed while the index is started. Pass no + // settings changes to retrieve current live settings. LiveSettings(ctx context.Context, in *LiveSettingsRequest, opts ...grpc.CallOption) (*LiveSettingsResponse, error) - // Change global offline or online settings for this index. + // Change live settings for an index. These settings may be changed while the index is started. Pass no + // settings changes to retrieve current live settings. LiveSettingsV2(ctx context.Context, in *LiveSettingsV2Request, opts ...grpc.CallOption) (*LiveSettingsV2Response, error) - // Registers one or more fields. Fields must be registered before they can be added in a document (via @addDocument). + // Adds one or more fields. Fields must be registered before they can be added in a document (via @addDocument). // Pass a list of Fields and an indexName. Any number of fields may be registered in a single request, // and once a field is registered it cannot be changed (write-once). // This returns the full set of fields currently registered. RegisterFields(ctx context.Context, in *FieldDefRequest, opts ...grpc.CallOption) (*FieldDefResponse, error) - // Adds one or more fields. Fields must be registered before they can be added in a document (via @addDocument). - // Pass a list of Fields and an indexName. Any number of fields may be registered in a single request, - // and once a field is registered it cannot be changed (write-once). - // This returns the full set of fields currently registered. + // Adds one or more fields to an index. The behavior is currently the same as registerFields. UpdateFields(ctx context.Context, in *FieldDefRequest, opts ...grpc.CallOption) (*FieldDefResponse, error) - // Change global offline settings for this index. - // This returns the currently set settings; pass no settings changes to retrieve current settings. + // Change offline settings for an index. The index must be in a stopped state to make settings changes. + // This returns the currently set settings. Passing no settings changes retrieves the current settings. Settings(ctx context.Context, in *SettingsRequest, opts ...grpc.CallOption) (*SettingsResponse, error) - // Change global offline settings for this index. - // This returns the currently set settings; pass no settings to retrieve current settings. + // Change offline settings for an index. The index must be in a stopped state to make settings changes. + // This returns the currently set settings. Passing no settings changes retrieves the current settings. SettingsV2(ctx context.Context, in *SettingsV2Request, opts ...grpc.CallOption) (*SettingsV2Response, error) // Starts an index StartIndex(ctx context.Context, in *StartIndexRequest, opts ...grpc.CallOption) (*StartIndexResponse, error) - // Starts an index using configuration in IndexStartConfig + // Starts an index based on configuration in IndexStartConfig StartIndexV2(ctx context.Context, in *StartIndexV2Request, opts ...grpc.CallOption) (*StartIndexResponse, error) // Stops an index StopIndex(ctx context.Context, in *StopIndexRequest, opts ...grpc.CallOption) (*DummyResponse, error) - // Reload state from the backend + // Reload state from the backend. When run on replicas, this processes state changes made by the primary. + // New indices are created/started, and existing indices state is updated as needed. ReloadState(ctx context.Context, in *ReloadStateRequest, opts ...grpc.CallOption) (*ReloadStateResponse, error) - // Adds a stream of Documents + // Adds a stream of Documents to an index. Changes are not durable until after the next successful @commit call. AddDocuments(ctx context.Context, opts ...grpc.CallOption) (LuceneServer_AddDocumentsClient, error) // Refresh the latest searcher for an index Refresh(ctx context.Context, in *RefreshRequest, opts ...grpc.CallOption) (*RefreshResponse, error) - // Commits all pending changes to durable storage + // Commits all pending index data changes to durable storage Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) // Retrieve index statistics Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (*StatsResponse, error) - // Search + // Execute a search query against an index Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error) - // Search V2 + // Execute a search query against an index. Return response as an Any gRPC message. Useful if the client does + // not need to process the response and wants to avoid some deserialization work. SearchV2(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*anypb.Any, error) - // Delete documents + // Delete documents from an index. Changes are not durable until after the next successful @commit call. Delete(ctx context.Context, in *AddDocumentRequest, opts ...grpc.CallOption) (*AddDocumentResponse, error) - // Delete documents matching a query + // Delete documents matching a query from an index. Changes are not durable until after the next successful + // @commit call. DeleteByQuery(ctx context.Context, in *DeleteByQueryRequest, opts ...grpc.CallOption) (*AddDocumentResponse, error) - // Delete all documents for index + // Delete all documents for index. Changes are not durable until after the next successful @commit call. DeleteAll(ctx context.Context, in *DeleteAllDocumentsRequest, opts ...grpc.CallOption) (*DeleteAllDocumentsResponse, error) - // Delete index + // Delete index and all of its local data DeleteIndex(ctx context.Context, in *DeleteIndexRequest, opts ...grpc.CallOption) (*DeleteIndexResponse, error) // Creates a snapshot in the index, which is saved point-in-time view of the last commit // in the index such that no files referenced by that snapshot will be deleted by ongoing @@ -9205,30 +9526,30 @@ type LuceneServerClient interface { // old segments are merged in the index. Be sure to release the snapshot once you're done. // Snapshots survive shutdown and restart of the server. Returns all protected filenames // referenced by this snapshot: these files will not change and will not be deleted until - // the snapshot is released. This returns the directories and files referenced by the snapshot. + // the snapshot is released. This returns the directories and files referenced by the snapshot. CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) - // releases a snapshot previously created with @createSnapshot. + // Releases a snapshot previously created with @createSnapshot. ReleaseSnapshot(ctx context.Context, in *ReleaseSnapshotRequest, opts ...grpc.CallOption) (*ReleaseSnapshotResponse, error) - // Gets all unreleased index gens of snapshots previously created with @createSnapshot. + // Gets all unreleased index gens of snapshots previously created with @createSnapshot GetAllSnapshotIndexGen(ctx context.Context, in *GetAllSnapshotGenRequest, opts ...grpc.CallOption) (*GetAllSnapshotGenResponse, error) - // Backup warming queries to S3 + // Backup warming queries for an index to S3 BackupWarmingQueries(ctx context.Context, in *BackupWarmingQueriesRequest, opts ...grpc.CallOption) (*BackupWarmingQueriesResponse, error) - // * Get information about this node + // Get information about this node NodeInfo(ctx context.Context, in *NodeInfoRequest, opts ...grpc.CallOption) (*NodeInfoResponse, error) // Get the global state of the cluster GlobalState(ctx context.Context, in *GlobalStateRequest, opts ...grpc.CallOption) (*GlobalStateResponse, error) - // Gets the state of a started index, includes settings, live_settings, search schema + // Gets the state of an index, includes settings, live_settings, search schema State(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error) // Gets the state information for an index, includes settings, live_settings, search schema IndexState(ctx context.Context, in *IndexStateRequest, opts ...grpc.CallOption) (*IndexStateResponse, error) - // healthcheck + // Basic healthcheck, successful if the server is running Status(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) - // Checks if a node is ready to receive traffic by checking if all the indices (which can be preloaded) - // are started. Can specify comma-separated list of index name to only check specific indices if needed. + // Checks if a node is ready to receive traffic by checking if all the indices configured to be started + // are started. Can specify comma-separated list of index names to only check specific indices if needed. Ready(ctx context.Context, in *ReadyCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) - // metrics + // Get prometheus metrics Metrics(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*httpbody.HttpBody, error) - // indices + // Get information for all created indices Indices(ctx context.Context, in *IndicesRequest, opts ...grpc.CallOption) (*IndicesResponse, error) // Forces merge policy to merge segments until there are <= maxNumSegments. The actual // merges to be executed are determined by the MergePolicy. This call will merge those @@ -9605,55 +9926,58 @@ func (c *luceneServerClient) Custom(ctx context.Context, in *CustomRequest, opts // LuceneServerServer is the server API for LuceneServer service. type LuceneServerServer interface { - // Create an Index + // Create an Index. Optionally, initial settings and live settings may be specified. The index is created + // in the stopped state, unless specified. CreateIndex(context.Context, *CreateIndexRequest) (*CreateIndexResponse, error) - // Change global offline or online settings for this index. + // Change live settings for an index. These settings may be changed while the index is started. Pass no + // settings changes to retrieve current live settings. LiveSettings(context.Context, *LiveSettingsRequest) (*LiveSettingsResponse, error) - // Change global offline or online settings for this index. + // Change live settings for an index. These settings may be changed while the index is started. Pass no + // settings changes to retrieve current live settings. LiveSettingsV2(context.Context, *LiveSettingsV2Request) (*LiveSettingsV2Response, error) - // Registers one or more fields. Fields must be registered before they can be added in a document (via @addDocument). + // Adds one or more fields. Fields must be registered before they can be added in a document (via @addDocument). // Pass a list of Fields and an indexName. Any number of fields may be registered in a single request, // and once a field is registered it cannot be changed (write-once). // This returns the full set of fields currently registered. RegisterFields(context.Context, *FieldDefRequest) (*FieldDefResponse, error) - // Adds one or more fields. Fields must be registered before they can be added in a document (via @addDocument). - // Pass a list of Fields and an indexName. Any number of fields may be registered in a single request, - // and once a field is registered it cannot be changed (write-once). - // This returns the full set of fields currently registered. + // Adds one or more fields to an index. The behavior is currently the same as registerFields. UpdateFields(context.Context, *FieldDefRequest) (*FieldDefResponse, error) - // Change global offline settings for this index. - // This returns the currently set settings; pass no settings changes to retrieve current settings. + // Change offline settings for an index. The index must be in a stopped state to make settings changes. + // This returns the currently set settings. Passing no settings changes retrieves the current settings. Settings(context.Context, *SettingsRequest) (*SettingsResponse, error) - // Change global offline settings for this index. - // This returns the currently set settings; pass no settings to retrieve current settings. + // Change offline settings for an index. The index must be in a stopped state to make settings changes. + // This returns the currently set settings. Passing no settings changes retrieves the current settings. SettingsV2(context.Context, *SettingsV2Request) (*SettingsV2Response, error) // Starts an index StartIndex(context.Context, *StartIndexRequest) (*StartIndexResponse, error) - // Starts an index using configuration in IndexStartConfig + // Starts an index based on configuration in IndexStartConfig StartIndexV2(context.Context, *StartIndexV2Request) (*StartIndexResponse, error) // Stops an index StopIndex(context.Context, *StopIndexRequest) (*DummyResponse, error) - // Reload state from the backend + // Reload state from the backend. When run on replicas, this processes state changes made by the primary. + // New indices are created/started, and existing indices state is updated as needed. ReloadState(context.Context, *ReloadStateRequest) (*ReloadStateResponse, error) - // Adds a stream of Documents + // Adds a stream of Documents to an index. Changes are not durable until after the next successful @commit call. AddDocuments(LuceneServer_AddDocumentsServer) error // Refresh the latest searcher for an index Refresh(context.Context, *RefreshRequest) (*RefreshResponse, error) - // Commits all pending changes to durable storage + // Commits all pending index data changes to durable storage Commit(context.Context, *CommitRequest) (*CommitResponse, error) // Retrieve index statistics Stats(context.Context, *StatsRequest) (*StatsResponse, error) - // Search + // Execute a search query against an index Search(context.Context, *SearchRequest) (*SearchResponse, error) - // Search V2 + // Execute a search query against an index. Return response as an Any gRPC message. Useful if the client does + // not need to process the response and wants to avoid some deserialization work. SearchV2(context.Context, *SearchRequest) (*anypb.Any, error) - // Delete documents + // Delete documents from an index. Changes are not durable until after the next successful @commit call. Delete(context.Context, *AddDocumentRequest) (*AddDocumentResponse, error) - // Delete documents matching a query + // Delete documents matching a query from an index. Changes are not durable until after the next successful + // @commit call. DeleteByQuery(context.Context, *DeleteByQueryRequest) (*AddDocumentResponse, error) - // Delete all documents for index + // Delete all documents for index. Changes are not durable until after the next successful @commit call. DeleteAll(context.Context, *DeleteAllDocumentsRequest) (*DeleteAllDocumentsResponse, error) - // Delete index + // Delete index and all of its local data DeleteIndex(context.Context, *DeleteIndexRequest) (*DeleteIndexResponse, error) // Creates a snapshot in the index, which is saved point-in-time view of the last commit // in the index such that no files referenced by that snapshot will be deleted by ongoing @@ -9669,30 +9993,30 @@ type LuceneServerServer interface { // old segments are merged in the index. Be sure to release the snapshot once you're done. // Snapshots survive shutdown and restart of the server. Returns all protected filenames // referenced by this snapshot: these files will not change and will not be deleted until - // the snapshot is released. This returns the directories and files referenced by the snapshot. + // the snapshot is released. This returns the directories and files referenced by the snapshot. CreateSnapshot(context.Context, *CreateSnapshotRequest) (*CreateSnapshotResponse, error) - // releases a snapshot previously created with @createSnapshot. + // Releases a snapshot previously created with @createSnapshot. ReleaseSnapshot(context.Context, *ReleaseSnapshotRequest) (*ReleaseSnapshotResponse, error) - // Gets all unreleased index gens of snapshots previously created with @createSnapshot. + // Gets all unreleased index gens of snapshots previously created with @createSnapshot GetAllSnapshotIndexGen(context.Context, *GetAllSnapshotGenRequest) (*GetAllSnapshotGenResponse, error) - // Backup warming queries to S3 + // Backup warming queries for an index to S3 BackupWarmingQueries(context.Context, *BackupWarmingQueriesRequest) (*BackupWarmingQueriesResponse, error) - // * Get information about this node + // Get information about this node NodeInfo(context.Context, *NodeInfoRequest) (*NodeInfoResponse, error) // Get the global state of the cluster GlobalState(context.Context, *GlobalStateRequest) (*GlobalStateResponse, error) - // Gets the state of a started index, includes settings, live_settings, search schema + // Gets the state of an index, includes settings, live_settings, search schema State(context.Context, *StateRequest) (*StateResponse, error) // Gets the state information for an index, includes settings, live_settings, search schema IndexState(context.Context, *IndexStateRequest) (*IndexStateResponse, error) - // healthcheck + // Basic healthcheck, successful if the server is running Status(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) - // Checks if a node is ready to receive traffic by checking if all the indices (which can be preloaded) - // are started. Can specify comma-separated list of index name to only check specific indices if needed. + // Checks if a node is ready to receive traffic by checking if all the indices configured to be started + // are started. Can specify comma-separated list of index names to only check specific indices if needed. Ready(context.Context, *ReadyCheckRequest) (*HealthCheckResponse, error) - // metrics + // Get prometheus metrics Metrics(context.Context, *emptypb.Empty) (*httpbody.HttpBody, error) - // indices + // Get information for all created indices Indices(context.Context, *IndicesRequest) (*IndicesResponse, error) // Forces merge policy to merge segments until there are <= maxNumSegments. The actual // merges to be executed are determined by the MergePolicy. This call will merge those @@ -10650,16 +10974,20 @@ type ReplicationServerClient interface { SendRawFile(ctx context.Context, opts ...grpc.CallOption) (ReplicationServer_SendRawFileClient, error) // Receives a file as a stream in chunks. Typically issued by replica on primary RecvRawFile(ctx context.Context, in *FileInfo, opts ...grpc.CallOption) (ReplicationServer_RecvRawFileClient, error) + // Receives a file as a stream in chunks. Uses bidirectional streaming for acks to control in flight data. RecvRawFileV2(ctx context.Context, opts ...grpc.CallOption) (ReplicationServer_RecvRawFileV2Client, error) - // Issued by primary on replica to inform it to start copying files either pre-warming (new merged segments) or when replica comes up first time + // Issued by primary on replica to inform it to start copying files either pre-warming (new merged segments) + // or when replica comes up first time CopyFiles(ctx context.Context, in *CopyFiles, opts ...grpc.CallOption) (ReplicationServer_CopyFilesClient, error) // Invoked externally to replica, to notify it that a new NRT point was just created on the primary NewNRTPoint(ctx context.Context, in *NewNRTPoint, opts ...grpc.CallOption) (*TransferStatus, error) - // * Invoked externally to primary, to make all recent index operations searchable on the primary and, once copying is done, on the replicas + // Invoked externally to primary, to make all recent index operations searchable on the primary and, + // once copying is done, on the replicas WriteNRTPoint(ctx context.Context, in *IndexName, opts ...grpc.CallOption) (*SearcherVersion, error) - // * Invoked externally to replica, to get the current Searcher version on replica. + // Invoked externally to replica, to get the current Searcher version on replica GetCurrentSearcherVersion(ctx context.Context, in *IndexName, opts ...grpc.CallOption) (*SearcherVersion, error) - // * Invoked externally on primary to find the list of replica nodes this node is connected to for binary replication per index + // Invoked externally on primary to find the list of replica nodes this node is connected to for binary + // replication for an index GetConnectedNodes(ctx context.Context, in *GetNodesRequest, opts ...grpc.CallOption) (*GetNodesResponse, error) } @@ -10864,16 +11192,20 @@ type ReplicationServerServer interface { SendRawFile(ReplicationServer_SendRawFileServer) error // Receives a file as a stream in chunks. Typically issued by replica on primary RecvRawFile(*FileInfo, ReplicationServer_RecvRawFileServer) error + // Receives a file as a stream in chunks. Uses bidirectional streaming for acks to control in flight data. RecvRawFileV2(ReplicationServer_RecvRawFileV2Server) error - // Issued by primary on replica to inform it to start copying files either pre-warming (new merged segments) or when replica comes up first time + // Issued by primary on replica to inform it to start copying files either pre-warming (new merged segments) + // or when replica comes up first time CopyFiles(*CopyFiles, ReplicationServer_CopyFilesServer) error // Invoked externally to replica, to notify it that a new NRT point was just created on the primary NewNRTPoint(context.Context, *NewNRTPoint) (*TransferStatus, error) - // * Invoked externally to primary, to make all recent index operations searchable on the primary and, once copying is done, on the replicas + // Invoked externally to primary, to make all recent index operations searchable on the primary and, + // once copying is done, on the replicas WriteNRTPoint(context.Context, *IndexName) (*SearcherVersion, error) - // * Invoked externally to replica, to get the current Searcher version on replica. + // Invoked externally to replica, to get the current Searcher version on replica GetCurrentSearcherVersion(context.Context, *IndexName) (*SearcherVersion, error) - // * Invoked externally on primary to find the list of replica nodes this node is connected to for binary replication per index + // Invoked externally on primary to find the list of replica nodes this node is connected to for binary + // replication for an index GetConnectedNodes(context.Context, *GetNodesRequest) (*GetNodesResponse, error) } diff --git a/grpc-gateway/luceneserver.swagger.json b/grpc-gateway/luceneserver.swagger.json index c3228b232..7544ab98a 100644 --- a/grpc-gateway/luceneserver.swagger.json +++ b/grpc-gateway/luceneserver.swagger.json @@ -21,7 +21,7 @@ "paths": { "/status/metrics": { "get": { - "summary": "metrics", + "summary": "Get prometheus metrics", "operationId": "LuceneServer_metrics", "responses": { "200": { @@ -44,7 +44,7 @@ }, "/v1/add_documents": { "post": { - "summary": "Adds a stream of Documents", + "summary": "Adds a stream of Documents to an index. Changes are not durable until after the next successful @commit call.", "operationId": "LuceneServer_addDocuments", "responses": { "200": { @@ -78,7 +78,7 @@ }, "/v1/backup_warming_queries": { "post": { - "summary": "Backup warming queries to S3", + "summary": "Backup warming queries for an index to S3", "operationId": "LuceneServer_backupWarmingQueries", "responses": { "200": { @@ -111,7 +111,7 @@ }, "/v1/commit": { "post": { - "summary": "Commits all pending changes to durable storage", + "summary": "Commits all pending index data changes to durable storage", "operationId": "LuceneServer_commit", "responses": { "200": { @@ -144,7 +144,7 @@ }, "/v1/create_index": { "post": { - "summary": "Create an Index", + "summary": "Create an Index. Optionally, initial settings and live settings may be specified. The index is created\nin the stopped state, unless specified.", "operationId": "LuceneServer_createIndex", "responses": { "200": { @@ -177,7 +177,7 @@ }, "/v1/create_snapshot": { "post": { - "summary": "Creates a snapshot in the index, which is saved point-in-time view of the last commit\nin the index such that no files referenced by that snapshot will be deleted by ongoing\nindexing until the snapshot is released with @releaseSnapshot. Note that this will\nreference the last commit, so be sure to call commit first if you have pending changes\nthat you'd like to be included in the snapshot.\nThis can be used for backup purposes, i.e. after creating the snapshot you can copy\nall referenced files to backup storage, and then release the snapshot once complete.\nTo restore the backup, just copy all the files back and restart the server.\nIt can also be used for transactional purposes, i.e. if you sometimes need to search a\nspecific snapshot instead of the current live index. Creating a snapshot is very fast\n(does not require any file copying), but over time it will consume extra disk space as\nold segments are merged in the index. Be sure to release the snapshot once you're done.\nSnapshots survive shutdown and restart of the server. Returns all protected filenames\nreferenced by this snapshot: these files will not change and will not be deleted until\nthe snapshot is released. This returns the directories and files referenced by the snapshot.", + "summary": "Creates a snapshot in the index, which is saved point-in-time view of the last commit\nin the index such that no files referenced by that snapshot will be deleted by ongoing\nindexing until the snapshot is released with @releaseSnapshot. Note that this will\nreference the last commit, so be sure to call commit first if you have pending changes\nthat you'd like to be included in the snapshot.\nThis can be used for backup purposes, i.e. after creating the snapshot you can copy\nall referenced files to backup storage, and then release the snapshot once complete.\nTo restore the backup, just copy all the files back and restart the server.\nIt can also be used for transactional purposes, i.e. if you sometimes need to search a\nspecific snapshot instead of the current live index. Creating a snapshot is very fast\n(does not require any file copying), but over time it will consume extra disk space as\nold segments are merged in the index. Be sure to release the snapshot once you're done.\nSnapshots survive shutdown and restart of the server. Returns all protected filenames\nreferenced by this snapshot: these files will not change and will not be deleted until\nthe snapshot is released. This returns the directories and files referenced by the snapshot.", "operationId": "LuceneServer_createSnapshot", "responses": { "200": { @@ -229,12 +229,14 @@ "parameters": [ { "name": "id", + "description": "ID defined for custom requests in a plugin", "in": "path", "required": true, "type": "string" }, { "name": "path", + "description": "Custom path that is defined in a plugin that maps to a route", "in": "path", "required": true, "type": "string" @@ -250,9 +252,11 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "title": "Parameters that can be processed by the plugin at the specified path" } - } + }, + "title": "Input to custom" } } ], @@ -263,7 +267,7 @@ }, "/v1/delete": { "post": { - "summary": "Delete documents", + "summary": "Delete documents from an index. Changes are not durable until after the next successful @commit call.", "operationId": "LuceneServer_delete", "responses": { "200": { @@ -296,7 +300,7 @@ }, "/v1/delete_all": { "post": { - "summary": "Delete all documents for index", + "summary": "Delete all documents for index. Changes are not durable until after the next successful @commit call.", "operationId": "LuceneServer_deleteAll", "responses": { "200": { @@ -329,7 +333,7 @@ }, "/v1/delete_by_query": { "post": { - "summary": "Delete documents matching a query", + "summary": "Delete documents matching a query from an index. Changes are not durable until after the next successful\n@commit call.", "operationId": "LuceneServer_deleteByQuery", "responses": { "200": { @@ -362,7 +366,7 @@ }, "/v1/delete_index": { "post": { - "summary": "Delete index", + "summary": "Delete index and all of its local data", "operationId": "LuceneServer_deleteIndex", "responses": { "200": { @@ -461,7 +465,7 @@ }, "/v1/get_all_snapshot_index_gen/{indexName}": { "get": { - "summary": "Gets all unreleased index gens of snapshots previously created with @createSnapshot.", + "summary": "Gets all unreleased index gens of snapshots previously created with @createSnapshot", "operationId": "LuceneServer_getAllSnapshotIndexGen", "responses": { "200": { @@ -480,6 +484,7 @@ "parameters": [ { "name": "indexName", + "description": "Name of the index to get snapshot gens", "in": "path", "required": true, "type": "string" @@ -577,7 +582,7 @@ "parameters": [ { "name": "indexName", - "description": "index name", + "description": "Index name", "in": "path", "required": true, "type": "string" @@ -590,7 +595,7 @@ }, "/v1/indices": { "get": { - "summary": "indices", + "summary": "Get information for all created indices", "operationId": "LuceneServer_indices", "responses": { "200": { @@ -613,7 +618,7 @@ }, "/v1/live_settings": { "post": { - "summary": "Change global offline or online settings for this index.", + "summary": "Change live settings for an index. These settings may be changed while the index is started. Pass no\nsettings changes to retrieve current live settings.", "operationId": "LuceneServer_liveSettings", "responses": { "200": { @@ -646,7 +651,7 @@ }, "/v1/node_info": { "get": { - "summary": "* Get information about this node", + "summary": "Get information about this node", "operationId": "LuceneServer_nodeInfo", "responses": { "200": { @@ -669,7 +674,7 @@ }, "/v1/ready": { "get": { - "summary": "Checks if a node is ready to receive traffic by checking if all the indices (which can be preloaded)\nare started. Can specify comma-separated list of index name to only check specific indices if needed.", + "summary": "Checks if a node is ready to receive traffic by checking if all the indices configured to be started\nare started. Can specify comma-separated list of index names to only check specific indices if needed.", "operationId": "LuceneServer_ready", "responses": { "200": { @@ -700,7 +705,7 @@ }, "/v1/ready/{indexNames}": { "get": { - "summary": "Checks if a node is ready to receive traffic by checking if all the indices (which can be preloaded)\nare started. Can specify comma-separated list of index name to only check specific indices if needed.", + "summary": "Checks if a node is ready to receive traffic by checking if all the indices configured to be started\nare started. Can specify comma-separated list of index names to only check specific indices if needed.", "operationId": "LuceneServer_ready2", "responses": { "200": { @@ -764,7 +769,7 @@ }, "/v1/register_fields": { "post": { - "summary": "Registers one or more fields. Fields must be registered before they can be added in a document (via @addDocument).\nPass a list of Fields and an indexName. Any number of fields may be registered in a single request,\nand once a field is registered it cannot be changed (write-once).\nThis returns the full set of fields currently registered.", + "summary": "Adds one or more fields. Fields must be registered before they can be added in a document (via @addDocument).\nPass a list of Fields and an indexName. Any number of fields may be registered in a single request,\nand once a field is registered it cannot be changed (write-once).\nThis returns the full set of fields currently registered.", "operationId": "LuceneServer_registerFields", "responses": { "200": { @@ -797,7 +802,7 @@ }, "/v1/release_snapshot": { "post": { - "summary": "releases a snapshot previously created with @createSnapshot.", + "summary": "Releases a snapshot previously created with @createSnapshot.", "operationId": "LuceneServer_releaseSnapshot", "responses": { "200": { @@ -830,7 +835,7 @@ }, "/v1/reload_state": { "post": { - "summary": "Reload state from the backend", + "summary": "Reload state from the backend. When run on replicas, this processes state changes made by the primary.\nNew indices are created/started, and existing indices state is updated as needed.", "operationId": "LuceneServer_reloadState", "responses": { "200": { @@ -863,7 +868,7 @@ }, "/v1/search": { "post": { - "summary": "Search", + "summary": "Execute a search query against an index", "operationId": "LuceneServer_search", "responses": { "200": { @@ -896,7 +901,7 @@ }, "/v1/settings": { "post": { - "summary": "Change global offline settings for this index.\nThis returns the currently set settings; pass no settings changes to retrieve current settings.", + "summary": "Change offline settings for an index. The index must be in a stopped state to make settings changes.\nThis returns the currently set settings. Passing no settings changes retrieves the current settings.", "operationId": "LuceneServer_settings", "responses": { "200": { @@ -962,7 +967,7 @@ }, "/v1/state": { "post": { - "summary": "Gets the state of a started index, includes settings, live_settings, search schema", + "summary": "Gets the state of an index, includes settings, live_settings, search schema", "operationId": "LuceneServer_state", "responses": { "200": { @@ -995,7 +1000,7 @@ }, "/v1/state/{indexName}": { "get": { - "summary": "Gets the state of a started index, includes settings, live_settings, search schema", + "summary": "Gets the state of an index, includes settings, live_settings, search schema", "operationId": "LuceneServer_state2", "responses": { "200": { @@ -1014,6 +1019,7 @@ "parameters": [ { "name": "indexName", + "description": "Index name to retrieve state", "in": "path", "required": true, "type": "string" @@ -1078,6 +1084,7 @@ "parameters": [ { "name": "indexName", + "description": "Index name to retrieve stats", "in": "path", "required": true, "type": "string" @@ -1090,7 +1097,7 @@ }, "/v1/status": { "get": { - "summary": "healthcheck", + "summary": "Basic healthcheck, successful if the server is running", "operationId": "LuceneServer_status", "responses": { "200": { @@ -1109,6 +1116,7 @@ "parameters": [ { "name": "check", + "description": "Healthcheck request", "in": "query", "required": false, "type": "boolean" @@ -1154,7 +1162,7 @@ }, "/v1/update_fields": { "post": { - "summary": "Adds one or more fields. Fields must be registered before they can be added in a document (via @addDocument).\nPass a list of Fields and an indexName. Any number of fields may be registered in a single request,\nand once a field is registered it cannot be changed (write-once).\nThis returns the full set of fields currently registered.", + "summary": "Adds one or more fields to an index. The behavior is currently the same as registerFields.", "operationId": "LuceneServer_updateFields", "responses": { "200": { @@ -1187,7 +1195,7 @@ }, "/v2/live_settings": { "post": { - "summary": "Change global offline or online settings for this index.", + "summary": "Change live settings for an index. These settings may be changed while the index is started. Pass no\nsettings changes to retrieve current live settings.", "operationId": "LuceneServer_liveSettingsV2", "responses": { "200": { @@ -1220,7 +1228,7 @@ }, "/v2/live_settings/{indexName}": { "get": { - "summary": "Change global offline or online settings for this index.", + "summary": "Change live settings for an index. These settings may be changed while the index is started. Pass no\nsettings changes to retrieve current live settings.", "operationId": "LuceneServer_liveSettingsV22", "responses": { "200": { @@ -1239,7 +1247,7 @@ "parameters": [ { "name": "indexName", - "description": "Index name", + "description": "Name of index whose liveSettings are to be updated", "in": "path", "required": true, "type": "string" @@ -1254,7 +1262,7 @@ }, { "name": "liveSettings.minRefreshSec", - "description": "Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen), default: 0.05", + "description": "Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen),\ndefault: 0.05", "in": "query", "required": false, "type": "number", @@ -1358,7 +1366,7 @@ }, { "name": "liveSettings.verboseMetrics", - "description": "Collect and publish additional index metrics, which may be more expensive in terms of volume, memory and/or compute, default: false", + "description": "Collect and publish additional index metrics, which may be more expensive in terms of volume, memory\nand/or compute, default: false", "in": "query", "required": false, "type": "boolean" @@ -1380,7 +1388,7 @@ }, { "name": "local", - "description": "When set to true, live settings changes are only applied to the local node. These changes are ephemeral, so will not persist through a restart. Also, the live settings returned in the response will contain the local overrides only when this flag is true.", + "description": "When set to true, live settings changes are only applied to the local node. These changes are ephemeral,\nso will not persist through a restart. Also, the live settings returned in the response will contain the\nlocal overrides only when this flag is true.", "in": "query", "required": false, "type": "boolean" @@ -1393,7 +1401,7 @@ }, "/v2/search": { "post": { - "summary": "Search V2", + "summary": "Execute a search query against an index. Return response as an Any gRPC message. Useful if the client does\nnot need to process the response and wants to avoid some deserialization work.", "operationId": "LuceneServer_searchV2", "responses": { "200": { @@ -1426,7 +1434,7 @@ }, "/v2/settings": { "post": { - "summary": "Change global offline settings for this index.\nThis returns the currently set settings; pass no settings to retrieve current settings.", + "summary": "Change offline settings for an index. The index must be in a stopped state to make settings changes.\nThis returns the currently set settings. Passing no settings changes retrieves the current settings.", "operationId": "LuceneServer_settingsV2", "responses": { "200": { @@ -1459,7 +1467,7 @@ }, "/v2/settings/{indexName}": { "get": { - "summary": "Change global offline settings for this index.\nThis returns the currently set settings; pass no settings to retrieve current settings.", + "summary": "Change offline settings for an index. The index must be in a stopped state to make settings changes.\nThis returns the currently set settings. Passing no settings changes retrieves the current settings.", "operationId": "LuceneServer_settingsV22", "responses": { "200": { @@ -1524,7 +1532,7 @@ }, { "name": "settings.directory", - "description": "Base Directory implementation to use (NRTCachingDirectory will wrap this) either one of the core implementations (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory implementation that has a public constructor taking a single File argument default: FSDirectory", + "description": "Base Directory implementation to use either one of the core implementations\n(FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory\nimplementation that has a public constructor taking a single File argument default: FSDirectory.\nThis implementation will be wrapped by NRTCachingDirectory, if enabled and not using MMappedDirectory.", "in": "query", "required": false, "type": "string" @@ -1537,7 +1545,7 @@ }, "/v2/start_index": { "post": { - "summary": "Starts an index using configuration in IndexStartConfig", + "summary": "Starts an index based on configuration in IndexStartConfig", "operationId": "LuceneServer_startIndexV2", "responses": { "200": { @@ -1577,7 +1585,8 @@ "type": "array", "items": { "type": "string" - } + }, + "title": "List of values for this field" }, "faceHierarchyPaths": { "type": "array", @@ -1587,7 +1596,7 @@ "title": "Facet paths/hierarchy to bucket these values by, if indexed field is of type Facet.HIERARCHY" } }, - "description": "we use this wrapper object to represent each field as a multivalued field." + "description": "Wrapper object to represent each field as a multivalued field." }, "BooleanClauseOccur": { "type": "string", @@ -1613,18 +1622,20 @@ "type": "object", "properties": { "key": { - "type": "string" + "type": "string", + "title": "Bucket key" }, "count": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Bucket item count" }, "nestedCollectorResults": { "type": "object", "additionalProperties": { "$ref": "#/definitions/luceneserverCollectorResult" }, - "description": "Nested collector results for sub-aggregations of this bucket." + "title": "Nested collector results for sub-aggregations of this bucket" } } }, @@ -1666,14 +1677,16 @@ "properties": { "low": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Optional low distance argument" }, "high": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Optional high distance argument" } }, - "title": "Optional low and high values for auto fuzziness. Defaults to low: 3 and high: 6 if both are unset. Valid values are low \u003e= 0 and low \u003c high" + "title": "Optional low and high values for auto fuzziness. Defaults to low: 3 and high: 6 if both are unset.\nValid values are low \u003e= 0 and low \u003c high" }, "HighlightSettings": { "type": "object", @@ -1687,14 +1700,14 @@ "items": { "type": "string" }, - "description": "Used along with post_tags to specify how to wrap the highlighted text." + "title": "Used along with post_tags to specify how to wrap the highlighted text" }, "postTags": { "type": "array", "items": { "type": "string" }, - "description": "Used along with pre_tags to specify how to wrap the highlighted text." + "title": "Used along with pre_tags to specify how to wrap the highlighted text" }, "fragmentSize": { "type": "integer", @@ -1704,19 +1717,19 @@ "maxNumberOfFragments": { "type": "integer", "format": "int64", - "description": "Maximum number of highlight fragments to return, 5 by default. If set to 0 returns entire text as a single fragment ignoring fragment_size." + "description": "Maximum number of highlight fragments to return, 5 by default. If set to 0 returns entire text as a single\nfragment ignoring fragment_size." }, "highlightQuery": { "$ref": "#/definitions/luceneserverQuery", - "description": "Specify a query here if highlighting is desired against a different query than the search query." + "title": "Specify a query here if highlighting is desired against a different query than the search query" }, "fieldMatch": { "type": "boolean", - "description": "Set to true to highlight fields only if specified in the search query." + "title": "Set to true to highlight fields only if specified in the search query" }, "scoreOrdered": { "type": "boolean", - "title": "Sorts highlighted fragments by score when set to true. By default, fragments will be output in the order they appear in the field. (Default is true)" + "title": "Sorts highlighted fragments by score when set to true. By default, fragments will be output in the order\nthey appear in the field. (Default is true)" }, "fragmenter": { "type": "string", @@ -1724,28 +1737,28 @@ }, "discreteMultivalue": { "type": "boolean", - "title": "Let the fragment builder respect the multivalue fields. Each fragment won't cross multiple value fields if set true. (Default is false)" + "title": "Let the fragment builder respect the multivalue fields. Each fragment won't cross multiple value fields\nif set true. (Default is false)" }, "customHighlighterName": { "type": "string", - "description": "When highlighter_type is CUSTOM, use this string identifier to specify the highlighter. It is ignored for any other highlighter_types." + "description": "When highlighter_type is CUSTOM, use this string identifier to specify the highlighter. It is ignored for\nany other highlighter_types." }, "customHighlighterParams": { "type": "object", - "description": "Optional Custom parameters for custom highlighters. If a field overriding is present, the global setting will be omitted for this field, and no merge will happen." + "description": "Optional Custom parameters for custom highlighters. If a field overriding is present, the global setting\nwill be omitted for this field, and no merge will happen." }, "boundaryScanner": { "type": "string", - "description": "Define the boundary decision when creating fragments. Options are \"simple\" (default in fast vector highlighter), \"word\" or \"sentence\"." + "description": "Define the boundary decision when creating fragments. Options are \"simple\" (default in fast vector\nhighlighter), \"word\" or \"sentence\"." }, "boundaryChars": { "type": "string", - "description": "Terminating chars when using \"simple\" boundary_scanner. The default is \".,!? \\t\\n\"." + "title": "Terminating chars when using \"simple\" boundary_scanner. The default is \".,!? \\t\\n\"" }, "boundaryMaxScan": { "type": "integer", "format": "int64", - "description": "Number of chars to scan before finding the boundary_chars if using \"simple\" boundary scanner; If \"boundary_chars\" is not found after max scan, fragments will start/end at the original place. Default is 20." + "description": "Number of chars to scan before finding the boundary_chars if using \"simple\" boundary scanner; If\n\"boundary_chars\" is not found after max scan, fragments will start/end at the original place. Default is 20." }, "boundaryScannerLocale": { "type": "string", @@ -1760,40 +1773,50 @@ "type": "array", "items": { "$ref": "#/definitions/HitFieldValue" - } + }, + "title": "Field values" } - } + }, + "title": "Field with multiple values" }, "HitFieldValue": { "type": "object", "properties": { "textValue": { - "type": "string" + "type": "string", + "title": "Value for ATOM and TEXT FieldType" }, "booleanValue": { - "type": "boolean" + "type": "boolean", + "title": "Value for BOOLEAN FieldType" }, "intValue": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Value for INT FieldType" }, "longValue": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Value for LONG and DATE_TIME (as milliseconds since epoch in UTC zone) FieldType" }, "floatValue": { "type": "number", - "format": "float" + "format": "float", + "title": "Value for FLOAT FieldType" }, "doubleValue": { "type": "number", - "format": "double" + "format": "double", + "title": "Value for DOUBLE FieldType" }, "latLngValue": { - "$ref": "#/definitions/typeLatLng" + "$ref": "#/definitions/typeLatLng", + "title": "Value for LAT_LON FieldType" }, "structValue": { - "type": "object" + "type": "object", + "title": "Value for structured data" }, "vectorValue": { "$ref": "#/definitions/FieldValueVector", @@ -1803,9 +1826,11 @@ "type": "array", "items": { "type": "object" - } + }, + "title": "List of values" } - } + }, + "title": "Field value for a hit" }, "HitHighlights": { "type": "object", @@ -1817,7 +1842,8 @@ }, "title": "Highlighted text fragments" } - } + }, + "title": "Highlighted text result" }, "MatchPhraseQueryZeroTerms": { "type": "string", @@ -1855,11 +1881,11 @@ }, "scale": { "type": "string", - "title": "Currently only distance based scale and offset units are supported\nDistance from origin + offset at which computed score will be equal to decay. Scale should be distance, unit (m, km, mi) with space is optional. Default unit will be meters. Ex: \"10\", \"15 km\", \"5 m\", \"7 mi\"" + "title": "Currently only distance based scale and offset units are supported\nDistance from origin + offset at which computed score will be equal to decay. Scale should be distance,\nunit (m, km, mi) with space is optional. Default unit will be meters. Ex: \"10\", \"15 km\", \"5 m\", \"7 mi\"" }, "offset": { "type": "string", - "title": "Compute decay function for docs with a distance greater than offset, will be 0.0 if none is set. Offset should be distance, unit (m, km, mi) with space is optional. Default unit will be meters. Ex: \"10\", \"15 km\", \"5 m\", \"7 mi\"" + "title": "Compute decay function for docs with a distance greater than offset, will be 0.0 if none is set. Offset\nshould be distance, unit (m, km, mi) with space is optional. Default unit will be meters.\nEx: \"10\", \"15 km\", \"5 m\", \"7 mi\"" }, "decay": { "type": "number", @@ -1877,7 +1903,8 @@ "DECAY_TYPE_GUASSIAN" ], "default": "DECAY_TYPE_EXPONENTIAL", - "title": "- DECAY_TYPE_EXPONENTIAL: Exponential decay function\n - DECAY_TYPE_LINEAR: Linear decay function\n - DECAY_TYPE_GUASSIAN: Gaussian decay function" + "description": "- DECAY_TYPE_EXPONENTIAL: Exponential decay function\n - DECAY_TYPE_LINEAR: Linear decay function\n - DECAY_TYPE_GUASSIAN: Gaussian decay function", + "title": "Decay function types" }, "MultiFunctionScoreQueryFilterFunction": { "type": "object", @@ -1920,7 +1947,8 @@ "CROSS_FIELDS" ], "default": "BEST_FIELDS", - "description": "Type defining the execution behavior of the match.\n\n - BEST_FIELDS: Finds documents which match any field, but uses the _score from the best field.\n - PHRASE_PREFIX: Runs a MatchPhrasePrefixQuery query on each field and uses the _score from the best field.\n - CROSS_FIELDS: Finds documents that match across multiple fields, as if they were a single field." + "description": "- BEST_FIELDS: Finds documents which match any field, but uses the _score from the best field\n - PHRASE_PREFIX: Runs a MatchPhrasePrefixQuery query on each field and uses the _score from the best field\n - CROSS_FIELDS: Finds documents that match across multiple fields, as if they were a single field", + "title": "Type defining the execution behavior of the match" }, "NestedQueryScoreMode": { "type": "string", @@ -1931,7 +1959,8 @@ "MIN", "SUM" ], - "default": "NONE" + "default": "NONE", + "title": "How child documents score affects final score" }, "ProfileResultAdditionalCollectorStats": { "type": "object", @@ -1941,20 +1970,22 @@ "format": "double", "title": "Sum of all collection time" } - } + }, + "title": "Stats for aggregating collector" }, "ProfileResultCollectorStats": { "type": "object", "properties": { "terminated": { "type": "boolean", - "description": "If collection for this index slice was terminated early, such as by a timeout." + "title": "If collection for this index slice was terminated early, such as by a timeout" }, "segmentStats": { "type": "array", "items": { "$ref": "#/definitions/ProfileResultSegmentStats" - } + }, + "title": "Stats for each collector segment" }, "totalCollectedCount": { "type": "integer", @@ -1973,7 +2004,8 @@ }, "title": "Stats for additional collection operations" } - } + }, + "title": "Stats for parallel search collector" }, "ProfileResultSearchStats": { "type": "object", @@ -1992,9 +2024,11 @@ "type": "array", "items": { "$ref": "#/definitions/ProfileResultCollectorStats" - } + }, + "title": "Stats for each collector" } - } + }, + "title": "Stats for search phase" }, "ProfileResultSegmentStats": { "type": "object", @@ -2024,7 +2058,8 @@ "format": "double", "title": "Collection duration" } - } + }, + "title": "Stats for a single collector segment" }, "ScriptParamFloatVectorValue": { "type": "object", @@ -2034,9 +2069,11 @@ "items": { "type": "number", "format": "float" - } + }, + "title": "Float vector value" } - } + }, + "title": "Float vector parameter value" }, "ScriptParamListValue": { "type": "object", @@ -2045,10 +2082,11 @@ "type": "array", "items": { "$ref": "#/definitions/ScriptParamValue" - } + }, + "title": "Parameter values list" } }, - "title": "list parameter value" + "title": "List parameter value" }, "ScriptParamNullValue": { "type": "string", @@ -2056,7 +2094,7 @@ "NULL_VALUE" ], "default": "NULL_VALUE", - "title": "null parameter value" + "title": "Null parameter value" }, "ScriptParamStructValue": { "type": "object", @@ -2065,10 +2103,11 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/ScriptParamValue" - } + }, + "title": "Parameter values map" } }, - "title": "map parameter value" + "title": "Map parameter value" }, "ScriptParamValue": { "type": "object", @@ -2108,7 +2147,7 @@ "$ref": "#/definitions/ScriptParamFloatVectorValue" } }, - "title": "script parameter entry" + "title": "Script parameter entry" }, "SearchResponseDiagnostics": { "type": "object", @@ -2125,57 +2164,68 @@ }, "firstPassSearchTimeMs": { "type": "number", - "format": "double" + "format": "double", + "title": "Time for initial recall and ranking" }, "highlightTimeMs": { "type": "number", - "format": "double" + "format": "double", + "title": "Time for highlighting" }, "getFieldsTimeMs": { "type": "number", - "format": "double" + "format": "double", + "title": "Time to fetch fields and perform other fetch tasks" }, "newSnapshotSearcherOpenMs": { "type": "number", - "format": "double" + "format": "double", + "title": "Time to open a new snapshot searcher" }, "nrtWaitTimeMs": { "type": "number", - "format": "double" + "format": "double", + "title": "Time waiting for nrt replication" }, "facetTimeMs": { "type": "object", "additionalProperties": { "type": "number", "format": "double" - } + }, + "title": "Time to execute facets" }, "rescoreTimeMs": { "type": "number", - "format": "double" + "format": "double", + "title": "Time to execute rescorers" }, "rescorersTimeMs": { "type": "object", "additionalProperties": { "type": "number", "format": "double" - } + }, + "title": "Time to execute each rescorer" }, "innerHitsDiagnostics": { "type": "object", "additionalProperties": { "$ref": "#/definitions/SearchResponseDiagnostics" - } + }, + "title": "Inner hits diagnostics" }, "vectorDiagnostics": { "type": "array", "items": { "$ref": "#/definitions/DiagnosticsVectorDiagnostics" - } + }, + "title": "Diagnostic info related to kNN vector search queries" }, "initialDeadlineMs": { "type": "number", - "format": "double" + "format": "double", + "title": "Amount of gRPC request deadline remaining at the start of search processing" } } }, @@ -2184,23 +2234,27 @@ "properties": { "luceneDocId": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Lucene document id" }, "score": { "type": "number", - "format": "double" + "format": "double", + "title": "Document score" }, "fields": { "type": "object", "additionalProperties": { "$ref": "#/definitions/HitCompositeFieldValue" - } + }, + "title": "Retrieved field data" }, "sortedFields": { "type": "object", "additionalProperties": { "$ref": "#/definitions/HitCompositeFieldValue" - } + }, + "title": "When using query sorting, sorted field names to values" }, "highlights": { "type": "object", @@ -2220,37 +2274,45 @@ }, "title": "InnerHits for each hit" } - } + }, + "title": "Message for query document hit" }, "SearchResponseSearchState": { "type": "object", "properties": { "timestamp": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Query time" }, "searcherVersion": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Index searcher version" }, "lastDocId": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "replaced by lastHitInfo" }, "lastFieldValues": { "type": "array", "items": { "type": "string" - } + }, + "title": "replaced by lastHitInfo" }, "lastScore": { "type": "number", - "format": "float" + "format": "float", + "title": "replaced by lastHitInfo" }, "lastHitInfo": { - "$ref": "#/definitions/luceneserverLastHitInfo" + "$ref": "#/definitions/luceneserverLastHitInfo", + "title": "Last hit info for search after" } - } + }, + "title": "State for use in subsequent searches (search after)" }, "TermInSetQueryDoubleTerms": { "type": "object", @@ -2260,7 +2322,8 @@ "items": { "type": "number", "format": "double" - } + }, + "title": "DOUBLE field terms" } } }, @@ -2272,7 +2335,8 @@ "items": { "type": "number", "format": "float" - } + }, + "title": "FLOAT field terms" } } }, @@ -2284,7 +2348,8 @@ "items": { "type": "integer", "format": "int32" - } + }, + "title": "INT field terms" } } }, @@ -2296,7 +2361,8 @@ "items": { "type": "string", "format": "int64" - } + }, + "title": "LONG field terms" } } }, @@ -2307,7 +2373,8 @@ "type": "array", "items": { "type": "string" - } + }, + "title": "TEXT field terms" } } }, @@ -2318,7 +2385,8 @@ "GREATER_THAN_OR_EQUAL_TO" ], "default": "EQUAL_TO", - "description": "* How the {TotalHits#value} should be interpreted.\n\n - EQUAL_TO: The total hit count is equal to {@link TotalHits#value}.\n - GREATER_THAN_OR_EQUAL_TO: The total hit count is greater than or equal to {@link TotalHits#value}." + "description": "- EQUAL_TO: The total hit count is equal to {@link TotalHits#value}\n - GREATER_THAN_OR_EQUAL_TO: The total hit count is greater than or equal to {@link TotalHits#value}", + "title": "How the {TotalHits#value} should be interpreted" }, "apiHttpBody": { "type": "object", @@ -2364,77 +2432,95 @@ "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name" }, "fields": { "type": "object", "additionalProperties": { "$ref": "#/definitions/AddDocumentRequestMultiValuedField" - } + }, + "title": "Map of field name to a list of string values" } - } + }, + "title": "Message representing a document to index" }, "luceneserverAddDocumentResponse": { "type": "object", "properties": { "genId": { - "type": "string" + "type": "string", + "title": "Lucene index sequence number after adding the documents" }, "primaryId": { "type": "string", "title": "Unique identifier for the primary instance that processed the request" } - } + }, + "title": "Response from Server for addDocument" }, "luceneserverAddReplicaResponse": { "type": "object", "properties": { "ok": { - "type": "string" + "type": "string", + "title": "Returns \"ok\" string on success" } - } + }, + "title": "Response from Server for addReplica" }, "luceneserverAnalyzer": { "type": "object", "properties": { "predefined": { - "type": "string" + "type": "string", + "title": "Analyzers predefined in Lucene, apart from standard and classic there are en.English, bn.Bengali,\neu.Basque, etc. (names derived from Lucene's analyzer class names)" }, "custom": { - "$ref": "#/definitions/luceneserverCustomAnalyzer" + "$ref": "#/definitions/luceneserverCustomAnalyzer", + "title": "Custom analyzer" } - } + }, + "title": "Analyzer definition" }, "luceneserverBackupWarmingQueriesRequest": { "type": "object", "properties": { "index": { - "type": "string" + "type": "string", + "title": "Index whose warming queries to backup" }, "serviceName": { - "type": "string" + "type": "string", + "title": "Remote storage namespace qualifier for service" }, "numQueriesThreshold": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Optional; minimum # of queries required to backup warming queries" }, "uptimeMinutesThreshold": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Optional; minimum # of minutes uptime to backup warming queries" } - } + }, + "title": "Input to backupWarmingQueries" }, "luceneserverBackupWarmingQueriesResponse": { - "type": "object" + "type": "object", + "title": "Response from Server for backupWarmingQueries" }, "luceneserverBooleanClause": { "type": "object", "properties": { "query": { - "$ref": "#/definitions/luceneserverQuery" + "$ref": "#/definitions/luceneserverQuery", + "title": "The Query for the clause" }, "occur": { - "$ref": "#/definitions/BooleanClauseOccur" + "$ref": "#/definitions/BooleanClauseOccur", + "description": "Specifies how this clause must occur in a matching document. SHOULD by default." } }, "description": "A clause in a BooleanQuery." @@ -2446,28 +2532,30 @@ "type": "array", "items": { "$ref": "#/definitions/luceneserverBooleanClause" - } + }, + "title": "Clauses for a boolean query" }, "minimumNumberShouldMatch": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Minimum number of optional clauses that must match" } }, - "description": "A query that matches documents using boolean combinations of other queries." + "title": "A query that matches documents using boolean combinations of other queries" }, "luceneserverBucketOrder": { "type": "object", "properties": { "key": { "type": "string", - "description": "What to use for sorting. This can be _count for Bucket count, or the name of a nested collector that supports ordering." + "description": "What to use for sorting. This can be _count for Bucket count, or the name of a nested collector that\nsupports ordering." }, "order": { "$ref": "#/definitions/BucketOrderOrderType", "title": "Sorting order" } }, - "description": "Defines how Buckets should be ordered in BucketResult." + "title": "Defines how Buckets should be ordered in BucketResult" }, "luceneserverBucketResult": { "type": "object", @@ -2476,33 +2564,35 @@ "type": "array", "items": { "$ref": "#/definitions/BucketResultBucket" - } + }, + "title": "Buckets" }, "totalBuckets": { "type": "integer", "format": "int32", - "description": "Number of unique buckets, including those not in the buckets list." + "title": "Number of unique buckets, including those not in the buckets list" }, "totalOtherCounts": { "type": "integer", "format": "int32", - "description": "Number of other collected counts not represented in the buckets' counts." + "title": "Number of other collected counts not represented in the buckets' counts" } - } + }, + "title": "Results from bucketing collector" }, "luceneserverCollector": { "type": "object", "properties": { "terms": { "$ref": "#/definitions/luceneserverTermsCollector", - "description": "Collector for aggregating based on term values." + "title": "Collector for aggregating based on term values" }, "pluginCollector": { "$ref": "#/definitions/luceneserverPluginCollector" }, "topHitsCollector": { "$ref": "#/definitions/luceneserverTopHitsCollector", - "description": "Collector for getting top hits based on score or sorting." + "title": "Collector for getting top hits based on score or sorting" }, "filter": { "$ref": "#/definitions/luceneserverFilterCollector", @@ -2510,28 +2600,28 @@ }, "max": { "$ref": "#/definitions/luceneserverMaxCollector", - "description": "Collector for finding a max double value from collected documents." + "title": "Collector for finding a max double value from collected documents" }, "min": { "$ref": "#/definitions/luceneserverMinCollector", - "description": "Collector for finding a min double value from collected documents." + "title": "Collector for finding a min double value from collected documents" }, "nestedCollectors": { "type": "object", "additionalProperties": { "$ref": "#/definitions/luceneserverCollector" }, - "description": "Nested collectors that define sub-aggregations per bucket, supported by bucket based collectors." + "title": "Nested collectors that define sub-aggregations per bucket, supported by bucket based collectors" } }, - "description": "Definition of additional document collector." + "title": "Definition of additional document collector" }, "luceneserverCollectorResult": { "type": "object", "properties": { "bucketResult": { "$ref": "#/definitions/luceneserverBucketResult", - "description": "Result of collector that produces buckets and counts." + "title": "Result of collector that produces buckets and counts" }, "anyResult": { "$ref": "#/definitions/protobufAny", @@ -2539,26 +2629,29 @@ }, "hitsResult": { "$ref": "#/definitions/luceneserverHitsResult", - "description": "Result of collector that returns document hits." + "title": "Result of collector that returns document hits" }, "filterResult": { "$ref": "#/definitions/luceneserverFilterResult", - "description": "Result of collector that filters documents." + "title": "Result of collector that filters documents" }, "doubleResult": { "type": "number", "format": "double", - "description": "Result of collector that produces a single double value." + "title": "Result of collector that produces a single double value" } - } + }, + "title": "Result of aggregating collector" }, "luceneserverCommitRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name to commit" } - } + }, + "title": "Input to commit" }, "luceneserverCommitResponse": { "type": "object", @@ -2566,13 +2659,14 @@ "gen": { "type": "string", "format": "int64", - "description": "sequence number of the last operation in the commit. All sequence numbers less than this value\nwill be reflected in the commit, and all others will not." + "description": "Sequence number of the last operation in the commit. All sequence numbers less than this value\nwill be reflected in the commit, and all others will not." }, "primaryId": { "type": "string", "title": "Unique identifier for the primary instance that processed the request" } - } + }, + "title": "Response from Server for commit" }, "luceneserverCompletionQuery": { "type": "object", @@ -2606,21 +2700,25 @@ "FUZZY_QUERY" ], "default": "PREFIX_QUERY", - "title": "- PREFIX_QUERY: PrefixCompletionQuery within ContextCompletionQuery\n - FUZZY_QUERY: FuzzyCompletionQuery within ContextCompletionQuery" + "description": "- PREFIX_QUERY: PrefixCompletionQuery within ContextCompletionQuery\n - FUZZY_QUERY: FuzzyCompletionQuery within ContextCompletionQuery", + "title": "Type of completion query" }, "luceneserverConditionalTokenFilter": { "type": "object", "properties": { "condition": { - "$ref": "#/definitions/luceneserverNameAndParams" + "$ref": "#/definitions/luceneserverNameAndParams", + "title": "Condition to apply the token filter" }, "tokenFilters": { "type": "array", "items": { "$ref": "#/definitions/luceneserverNameAndParams" - } + }, + "title": "Token filters to apply if the condition is met" } - } + }, + "title": "Used to specify a conditional token filter" }, "luceneserverConstantScoreQuery": { "type": "object", @@ -2630,56 +2728,65 @@ "title": "Query to determine matching documents" } }, - "description": "Query that produces a score of 1.0 (modifiable by query boost value) for documents that match the filter query." + "title": "Query that produces a score of 1.0 (modifiable by query boost value) for documents that match the filter query" }, "luceneserverCopyState": { "type": "object", "properties": { "infoBytesLength": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "InfoBytes length" }, "infoBytes": { "type": "string", - "format": "byte" + "format": "byte", + "title": "InfoBytes" }, "gen": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Index generation" }, "version": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Index version" }, "filesMetadata": { - "$ref": "#/definitions/luceneserverFilesMetadata" + "$ref": "#/definitions/luceneserverFilesMetadata", + "title": "Index file metadata" }, "completedMergeFilesSize": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Completed merged files size" }, "completedMergeFiles": { "type": "array", "items": { "type": "string" - } + }, + "title": "Completed merged files" }, "primaryGen": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Primary generation" } }, - "description": "Holds incRef'd file level details for one point-in-time segment infos on the primary node." + "title": "Holds incRef'd file level details for one point-in-time segment infos on the primary node" }, "luceneserverCreateIndexRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Name of the index to be created. [a-zA-Z0-9_-]+" }, "existsWithId": { "type": "string", - "description": "Set if state/data already exists in the data backend. Provides the yyyyMMddHHmmssSSS formatted date-time string to identify and load the index." + "description": "Set if state/data already exists in the data backend. Provides the yyyyMMddHHmmssSSS formatted date-time\nstring to identify and load the index data." }, "settings": { "$ref": "#/definitions/luceneserverIndexSettings", @@ -2707,7 +2814,8 @@ "type": "object", "properties": { "response": { - "type": "string" + "type": "string", + "title": "Message confirming creation of the index" } }, "title": "Response from Server to createIndex" @@ -2716,10 +2824,12 @@ "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Name of the index to snapshot" }, "openSearcher": { - "type": "boolean" + "type": "boolean", + "title": "Pass true if you intend to do searches against this snapshot, by passing searcher: {snapshot: X} to @search" } }, "description": "Creates a snapshot in the index, which is saved point-in-time view of the last commit in the\nindex such that no files referenced by that snapshot will be deleted by ongoing indexing until\nthe snapshot is released with @releaseSnapshot. Note that this will reference the last commit,\nso be sure to call commit first if you have pending changes that you'd like to be included in\nthe snapshot.\u003cp\u003eThis can be used for backup purposes, i.e. after creating the snapshot you can\ncopy all referenced files to backup storage, and then release the snapshot once complete.\nTo restore the backup, just copy all the files back and restart the server. It can also\nbe used for transactional purposes, i.e. if you sometimes need to search a specific snapshot\ninstead of the current live index.\u003cp\u003eCreating a snapshot is very fast (does not require any\nfile copying), but over time it will consume extra disk space as old segments are merged in\nthe index. Be sure to release the snapshot once you're done. Snapshots survive shutdown\nand restart of the server. Returns all protected filenames referenced by this snapshot:\nthese files will not change and will not be deleted until the snapshot is released.\nThis returns the directories and files referenced by the snapshot." @@ -2731,24 +2841,29 @@ "type": "array", "items": { "type": "string" - } + }, + "title": "List of index files referenced by this snapshot" }, "taxonomyFiles": { "type": "array", "items": { "type": "string" - } + }, + "title": "List of taxonomy index files referenced by this snapshot" }, "stateFiles": { "type": "array", "items": { "type": "string" - } + }, + "title": "List of state index files referenced by this snapshot" }, "snapshotId": { - "$ref": "#/definitions/luceneserverSnapshotId" + "$ref": "#/definitions/luceneserverSnapshotId", + "title": "Snapshot id" } - } + }, + "title": "Response from Server for createSnapshot" }, "luceneserverCustomAnalyzer": { "type": "object", @@ -2757,33 +2872,41 @@ "type": "array", "items": { "$ref": "#/definitions/luceneserverNameAndParams" - } + }, + "title": "Specify a Lucene character filters (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/CharFilter.html)" }, "tokenizer": { - "$ref": "#/definitions/luceneserverNameAndParams" + "$ref": "#/definitions/luceneserverNameAndParams", + "title": "Specify a Lucene tokenizer (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/Tokenizer.html)" }, "tokenFilters": { "type": "array", "items": { "$ref": "#/definitions/luceneserverNameAndParams" - } + }, + "title": "Specify a Lucene token filter (https://lucene.apache.org/core/9_12_0/core/org/apache/lucene/analysis/TokenFilter.html)" }, "conditionalTokenFilters": { "type": "array", "items": { "$ref": "#/definitions/luceneserverConditionalTokenFilter" - } + }, + "description": "TODO: this is not properly supported yet, the only impl requires a protected terms file." }, "defaultMatchVersion": { - "type": "string" + "type": "string", + "title": "Lucene version as LUCENE_X_Y_Z or X.Y.Z, LATEST by default" }, "positionIncrementGap": { - "$ref": "#/definitions/luceneserverIntObject" + "$ref": "#/definitions/luceneserverIntObject", + "title": "Must be \u003e= 0" }, "offsetGap": { - "$ref": "#/definitions/luceneserverIntObject" + "$ref": "#/definitions/luceneserverIntObject", + "title": "Must be \u003e= 0" } - } + }, + "title": "Custom analyzer definition" }, "luceneserverCustomResponse": { "type": "object", @@ -2794,53 +2917,65 @@ "type": "string" } } - } + }, + "title": "Response from Server for custom" }, "luceneserverDeleteAllDocumentsRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name to delete all documents from" } - } + }, + "title": "Input to deleteAllDocuments" }, "luceneserverDeleteAllDocumentsResponse": { "type": "object", "properties": { "genId": { - "type": "string" + "type": "string", + "title": "Lucene index sequence number after deleting all documents" } - } + }, + "title": "Response from Server for deleteAllDocuments" }, "luceneserverDeleteByQueryRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name to delete documents from" }, "query": { "type": "array", "items": { "$ref": "#/definitions/luceneserverQuery" - } + }, + "title": "Queries to match documents to be deleted" } - } + }, + "title": "Input to deleteByQuery" }, "luceneserverDeleteIndexRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name to delete" } - } + }, + "title": "Input to deleteIndex" }, "luceneserverDeleteIndexResponse": { "type": "object", "properties": { "ok": { - "type": "string" + "type": "string", + "title": "Returns \"ok\" string on success" } - } + }, + "title": "Response from Server for deleteIndex" }, "luceneserverDisjunctionMaxQuery": { "type": "object", @@ -2849,74 +2984,89 @@ "type": "array", "items": { "$ref": "#/definitions/luceneserverQuery" - } + }, + "title": "A list of all the disjuncts to add" }, "tieBreakerMultiplier": { "type": "number", - "format": "float" + "format": "float", + "title": "The score of each non-maximum disjunct for a document is multiplied by this weight and added into the\nfinal score" } }, - "description": "A query that generates the union of documents produced by its subqueries, and that scores each document with the\nmaximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries." + "description": "A query that generates the union of documents produced by its subqueries, and that scores each document with the\nmaximum score for that document as produced by any subquery, plus a tie breaking increment for any additional\nmatching subqueries." }, "luceneserverDummyResponse": { "type": "object", "properties": { "ok": { - "type": "string" + "type": "string", + "title": "Returns \"ok\" string on success" } - } + }, + "title": "Response with no content" }, "luceneserverExistsQuery": { "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" } }, - "description": "A query that matches documents which contain a value for a field." + "title": "A query that matches documents which contain a value for a field" }, "luceneserverFacet": { "type": "object", "properties": { "dim": { - "type": "string" + "type": "string", + "title": "Dimension (field)" }, "paths": { "type": "array", "items": { "type": "string" - } + }, + "title": "Prefix path to facet 'under'" }, "numericRange": { "type": "array", "items": { "$ref": "#/definitions/luceneserverNumericRangeType" - } + }, + "description": "Custom numeric ranges. Field must be indexed with facet=numericRange." }, "useOrdsCache": { - "type": "boolean" + "type": "boolean", + "title": "No longer used" }, "labels": { "type": "array", "items": { "type": "string" - } + }, + "title": "Specific facet labels to retrieve" }, "topN": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "How many top facets to return" }, "script": { - "$ref": "#/definitions/luceneserverScript" + "$ref": "#/definitions/luceneserverScript", + "title": "FacetScript definition to use in place of index facet" }, "sampleTopDocs": { "type": "integer", - "format": "int32" + "format": "int32", + "description": "Facet over the top N ranked documents, instead of all hits. Only works with field doc values." }, "name": { - "type": "string" + "type": "string", + "title": "Name for this facet" } - } + }, + "title": "Facet request definition" }, "luceneserverFacetHierarchyPath": { "type": "object", @@ -2925,40 +3075,49 @@ "type": "array", "items": { "type": "string" - } + }, + "title": "Facet path" } - } + }, + "title": "Path for hierarchical facets" }, "luceneserverFacetResult": { "type": "object", "properties": { "dim": { - "type": "string" + "type": "string", + "title": "Dimension that was requested" }, "path": { "type": "array", "items": { "type": "string" - } + }, + "title": "Path whose children were requested" }, "value": { "type": "number", - "format": "double" + "format": "double", + "title": "Total value for this path (sum of all child counts, or sum of all child values), even those not included\nin the topN" }, "labelValues": { "type": "array", "items": { "$ref": "#/definitions/luceneserverLabelAndValue" - } + }, + "title": "Child counts" }, "childCount": { "type": "string", - "format": "int64" + "format": "int64", + "title": "How many child labels were encountered" }, "name": { - "type": "string" + "type": "string", + "title": "Name for this facet" } - } + }, + "title": "Result of facet collection" }, "luceneserverFacetType": { "type": "string", @@ -2970,134 +3129,165 @@ "SORTED_SET_DOC_VALUES" ], "default": "NO_FACETS", - "description": "Whether/How this field should index facets, and how." + "description": "- NO_FACETS: No facets are indexed\n - FLAT: Facets are indexed with no hierarchy\n - HIERARCHY: Facets are indexed and are hierarchical\n - NUMERIC_RANGE: Compute facet counts for custom numeric ranges\n - SORTED_SET_DOC_VALUES: Uses SortedSetDocValuesFacetCounts, which must be flat but don't require a taxonomy index", + "title": "Whether/how facets should be indexed" }, "luceneserverFetchTask": { "type": "object", "properties": { "name": { - "type": "string" + "type": "string", + "title": "Name of task, as registered by a FetchTaskPlugin" }, "params": { - "type": "object" + "type": "object", + "title": "Optional task parameters" } - } + }, + "title": "Define additional task to perform in the fetch phase" }, "luceneserverField": { "type": "object", "properties": { "name": { - "type": "string" + "type": "string", + "title": "Name of the field" }, "type": { - "$ref": "#/definitions/luceneserverFieldType" + "$ref": "#/definitions/luceneserverFieldType", + "title": "Type of the field" }, "search": { - "type": "boolean" + "type": "boolean", + "title": "True if the value should be available for searching (or numeric range searching, for a numeric fields)" }, "store": { - "type": "boolean" + "type": "boolean", + "title": "True if the value should be stored in the index" }, "storeDocValues": { - "type": "boolean" + "type": "boolean", + "title": "True if the value should be indexed into doc values" }, "sort": { - "type": "boolean" + "type": "boolean", + "title": "No longer used" }, "tokenize": { - "type": "boolean" + "type": "boolean", + "title": "No longer used" }, "group": { - "type": "boolean" + "type": "boolean", + "title": "No longer used" }, "multiValued": { - "type": "boolean" + "type": "boolean", + "title": "True if this field may have more than one value" }, "highlight": { - "type": "boolean" + "type": "boolean", + "title": "No longer used" }, "omitNorms": { - "type": "boolean" + "type": "boolean", + "title": "True if norms are omitted for text fields" }, "dateTimeFormat": { - "type": "string" + "type": "string", + "title": "Format string used to parse datetime fields, supported values are:\n 1) DateTimeFormatter format\n 2) \"epoch_millis\" (datetime value is epoch timestamp)\n 3) \"strict_date_optional_time\" (date with optional time in pattern of \"yyyy-MM-dd['T'HH:mm:ss[.SSS]]\")" }, "postingsFormat": { - "type": "string" + "type": "string", + "title": "Which PostingsFormat should be used to index this field, defaults to Lucene codec default" }, "docValuesFormat": { - "type": "string" + "type": "string", + "title": "Which DocValuesFormat should be used to index this field, defaults to Lucene codec default" }, "indexOptions": { - "$ref": "#/definitions/luceneserverIndexOptions" + "$ref": "#/definitions/luceneserverIndexOptions", + "title": "How the tokens should be indexed for text fields" }, "script": { - "$ref": "#/definitions/luceneserverScript" + "$ref": "#/definitions/luceneserverScript", + "title": "The script definition defining a virtual field's value (only used with type=virtual)" }, "analyzer": { "$ref": "#/definitions/luceneserverAnalyzer", - "title": "TODO make analyzers message types i.e. StandardAnalyzer, EnglishAnalyzer, CustomAnalyzer etc" + "title": "Analyzer to use for this field during indexing and searching, defaults to Lucene standard analyzer" }, "indexAnalyzer": { - "$ref": "#/definitions/luceneserverAnalyzer" + "$ref": "#/definitions/luceneserverAnalyzer", + "title": "Analyzer to use for this field during indexing, if different from analyzer" }, "searchAnalyzer": { - "$ref": "#/definitions/luceneserverAnalyzer" + "$ref": "#/definitions/luceneserverAnalyzer", + "title": "Analyzer to use for this field during searching, if different from analyzer" }, "termVectors": { - "$ref": "#/definitions/luceneserverTermVectors" + "$ref": "#/definitions/luceneserverTermVectors", + "title": "Whether/how term vectors should be indexed" }, "similarity": { "type": "string", - "title": "TODO make similarity message types i.d. DefaultSimilarity, CustomSimilarity, BM25Similarity;" + "title": "Which Similarity implementation to use for this field, defaults to BM25Similarity" }, "facet": { - "$ref": "#/definitions/luceneserverFacetType" + "$ref": "#/definitions/luceneserverFacetType", + "title": "Whether/how facets should be indexed" }, "facetIndexFieldName": { - "type": "string" + "type": "string", + "title": "Which underlying Lucene index field is used to hold any indexed taxonomy or sorted set doc values facets,\ndefaults to '$_\u003cfield_name\u003e'" }, "additionalProperties": { - "type": "object" + "type": "object", + "title": "Additional info needed to configure field, used for CUSTOM types" }, "similarityParams": { - "type": "object" + "type": "object", + "title": "Parameters for similarity implementation" }, "childFields": { "type": "array", "items": { "$ref": "#/definitions/luceneserverField" - } + }, + "description": "Child fields accessible by dot notation. For standard fields, this indexes the same data as the parent field.\nFor object fields, this represents the subfields within the object." }, "eagerGlobalOrdinals": { - "type": "boolean" + "type": "boolean", + "description": "Compute facet global ordinals for this field up front, otherwise this is done lazily on first query.\nCurrently only for SORTED_SET_DOC_VALUES facet type." }, "nestedDoc": { - "type": "boolean" + "type": "boolean", + "title": "True if object data should be indexed as child documents" }, "vectorDimensions": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Dimensions for vector field types" }, "eagerFieldGlobalOrdinals": { "type": "boolean", - "description": "If field based global ordinals should be built up front, otherwise this is done lazily on first access. Currently only for fields with text doc values (TEXT/ATOM)." + "description": "If field based global ordinals should be built up front, otherwise this is done lazily on first access.\nCurrently only for fields with text doc values (TEXT/ATOM)." }, "vectorSimilarity": { "type": "string", - "title": "Similarity type for search enabled VECTOR fields. This is a required option when search=true.\nAccepts built in types:\n 'l2_norm' : (1 / (1 + l2_norm(query, vector)^2))\n 'dot_product' : Float vector: ((1 + dot_product(query, vector)) / 2) (all vectors must be unit length)\n Byte vector : 0.5 + (dot_product(query, vector) / (32768 * dims)) (all vectors must have the same length)\n 'cosine' : ((1 + cosine(query, vector)) / 2)\n 'max_inner_product': when \u003c 0 : 1 / (1 + -1 * max_inner_product(query, vector))\n when \u003e= 0: max_inner_product(query, vector) + 1" + "title": "Similarity type for search enabled VECTOR fields. This is a required option when search=true.\nAccepts built in types:\n 'l2_norm' : (1 / (1 + l2_norm(query, vector)^2))\n 'dot_product' : Float vector: ((1 + dot_product(query, vector)) / 2) (all vectors must be unit length)\n Byte vector : 0.5 + (dot_product(query, vector) / (32768 * dims))\n (all vectors must have the same length)\n 'cosine' : ((1 + cosine(query, vector)) / 2)\n 'max_inner_product': when \u003c 0 : 1 / (1 + -1 * max_inner_product(query, vector))\n when \u003e= 0: max_inner_product(query, vector) + 1" }, "vectorIndexingOptions": { "$ref": "#/definitions/luceneserverVectorIndexingOptions", - "description": "Indexing options for search enabled VECTOR field type. This is optional, defaulting to HNSW with m=16, ef_construction=100 when not set." + "description": "Indexing options for search enabled VECTOR field type. This is optional, defaulting to HNSW with m=16,\nef_construction=100 when not set." }, "textDocValuesType": { "$ref": "#/definitions/luceneserverTextDocValuesType", - "description": "Specify docvalues type for TEXT/ATOM field types. This is optional, defaulting to SORTED when not set. Multivalued fields will always use SORTED_SET." + "description": "Specify doc values type for TEXT/ATOM field types. This is optional, defaulting to SORTED when not set.\n Multivalued fields will always use SORTED_SET." }, "vectorElementType": { "$ref": "#/definitions/luceneserverVectorElementType", - "description": "Element type for vector field, defaulting to FLOAT when not set." + "title": "Element type for vector field, defaulting to FLOAT when not set" }, "positionIncrementGap": { "type": "integer", @@ -3107,21 +3297,24 @@ "ignoreAbove": { "type": "integer", "format": "int32", - "title": "For arrays of strings, ignoreAbove will be applied for each array element separately and string elements longer than ignore_above will not be indexed or stored.\nThis option is also useful for protecting against Lucene’s term byte-length limit of 32766" + "title": "For arrays of strings, ignoreAbove will be applied for each array element separately and string elements longer\nthan ignore_above will not be indexed or stored. This option is useful for protecting against Lucene’s\nterm byte-length limit of 32766" } - } + }, + "title": "Definition of a field in an index" }, "luceneserverFieldDefRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Name of index to add fields to" }, "field": { "type": "array", "items": { "$ref": "#/definitions/luceneserverField" - } + }, + "title": "List of fields to add" } }, "title": "Input to registerFields" @@ -3130,7 +3323,8 @@ "type": "object", "properties": { "response": { - "type": "string" + "type": "string", + "title": "Json string of object containing all index fields (including newly added fields)" } }, "title": "Response from Server for registerFields" @@ -3158,40 +3352,48 @@ "RUNTIME" ], "default": "ATOM", - "description": "- VIRTUAL: TODO name this \"dynamic\" instead of \"virtual\"?\n - INTERNAL: TODO need tests for internal:\n - VECTOR: List of float values\n - RUNTIME: Runtime fields", - "title": "Type of the field" + "description": "- ATOM: Text that's indexed as a single token, with DOCS_ONLY and omitting norms\n - TEXT: Text that's tokenized and indexed, with the index-time analyzer\n - BOOLEAN: Boolean value\n - LONG: Long value\n - INT: Int value\n - DOUBLE: Double value\n - FLOAT: Float value\n - LAT_LON: A latitude/longitude point\n - DATE_TIME: Date and optional time\n - VIRTUAL: Virtual field defined with a Script\n - INTERNAL: Internal field, not currently used\n - CUSTOM: Field type specified by name\n - _ID: Field type for document ID\n - POLYGON: Geojson defined polygon\n - OBJECT: Json object with child fields for each key\n - VECTOR: List of float values\n - CONTEXT_SUGGEST: Field used for contextual suggest fields\n - RUNTIME: Runtime fields", + "title": "Type of a Field" }, "luceneserverFileMetadata": { "type": "object", "properties": { "fileName": { - "type": "string" + "type": "string", + "title": "File name" }, "len": { "type": "string", - "format": "int64" + "format": "int64", + "title": "File length" }, "checksum": { "type": "string", - "format": "int64" + "format": "int64", + "title": "File checksum" }, "headerLength": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "File header length" }, "header": { "type": "string", - "format": "byte" + "format": "byte", + "title": "File header" }, "footerLength": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "File footer length" }, "footer": { "type": "string", - "format": "byte" + "format": "byte", + "title": "File footer" } - } + }, + "title": "Metadata for a single index file" }, "luceneserverFilesMetadata": { "type": "object", @@ -3206,21 +3408,22 @@ "$ref": "#/definitions/luceneserverFileMetadata" } } - } + }, + "title": "Metadata for multiple index files" }, "luceneserverFilterCollector": { "type": "object", "properties": { "query": { "$ref": "#/definitions/luceneserverQuery", - "description": "Only propagate documents that match the given query." + "title": "Only propagate documents that match the given query" }, "setQuery": { "$ref": "#/definitions/luceneserverTermInSetQuery", - "description": "Specialized implementation for set queries, checks if field doc values are in the provided set. This can be useful for large set sizes with lower recall, where building the scorer would be expensive." + "description": "Specialized implementation for set queries, checks if field doc values are in the provided set.\nThis can be useful for large set sizes with lower recall, where building the scorer would be expensive." } }, - "description": "Definition of filtering collector, there must be at least one nested collector specified in the Collector message." + "title": "Definition of filtering collector, there must be at least one nested collector specified in the Collector message" }, "luceneserverFilterResult": { "type": "object", @@ -3228,35 +3431,41 @@ "docCount": { "type": "integer", "format": "int32", - "description": "Number of documents that passed the filter." + "title": "Number of documents that passed the filter" }, "nestedCollectorResults": { "type": "object", "additionalProperties": { "$ref": "#/definitions/luceneserverCollectorResult" }, - "description": "Results from nested collectors." + "title": "Results from nested collectors" } - } + }, + "title": "Result from filter collector" }, "luceneserverForceMergeDeletesRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name whose segments having deletes must be force merged" }, "doWait": { - "type": "boolean" + "type": "boolean", + "description": "If true, waits until the force merge is completed before returning a response. Otherwise starts force\nmerging in async and returns a response." } - } + }, + "title": "Input to forceMergeDeletes" }, "luceneserverForceMergeDeletesResponse": { "type": "object", "properties": { "status": { - "$ref": "#/definitions/luceneserverForceMergeDeletesResponseStatus" + "$ref": "#/definitions/luceneserverForceMergeDeletesResponseStatus", + "title": "Status of force merge deletes" } - } + }, + "title": "Response from Server for forceMergeDeletes" }, "luceneserverForceMergeDeletesResponseStatus": { "type": "string", @@ -3264,30 +3473,37 @@ "FORCE_MERGE_DELETES_COMPLETED", "FORCE_MERGE_DELETES_SUBMITTED" ], - "default": "FORCE_MERGE_DELETES_COMPLETED" + "default": "FORCE_MERGE_DELETES_COMPLETED", + "title": "Status of force merge deletes" }, "luceneserverForceMergeRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name whose segments must be force merged" }, "maxNumSegments": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Maximum number of segments after force merge" }, "doWait": { - "type": "boolean" + "type": "boolean", + "description": "If true, waits until the force merge is completed before returning a response. Otherwise starts force\nmerging in async and returns a response." } - } + }, + "title": "Input to forceMerge" }, "luceneserverForceMergeResponse": { "type": "object", "properties": { "status": { - "$ref": "#/definitions/luceneserverForceMergeResponseStatus" + "$ref": "#/definitions/luceneserverForceMergeResponseStatus", + "title": "Status of force merge" } - } + }, + "title": "Response from Server for forceMerge" }, "luceneserverForceMergeResponseStatus": { "type": "string", @@ -3295,13 +3511,15 @@ "FORCE_MERGE_COMPLETED", "FORCE_MERGE_SUBMITTED" ], - "default": "FORCE_MERGE_COMPLETED" + "default": "FORCE_MERGE_COMPLETED", + "title": "Status of force merge" }, "luceneserverFunctionFilterQuery": { "type": "object", "properties": { "script": { - "$ref": "#/definitions/luceneserverScript" + "$ref": "#/definitions/luceneserverScript", + "title": "Script definition to compute a custom document score" } }, "title": "A query that retrieves all documents with a positive score calculated by the script" @@ -3310,50 +3528,60 @@ "type": "object", "properties": { "query": { - "$ref": "#/definitions/luceneserverQuery" + "$ref": "#/definitions/luceneserverQuery", + "title": "Input query" }, "script": { - "$ref": "#/definitions/luceneserverScript" + "$ref": "#/definitions/luceneserverScript", + "title": "Script definition to compute a custom document score" } }, - "description": "A query that wraps another query and uses custom scoring logic to compute the wrapped query's score." + "title": "A query that wraps another query and uses custom scoring logic to compute the wrapped query's score" }, "luceneserverFuzzyParams": { "type": "object", "properties": { "maxEdits": { "type": "integer", - "format": "int32" + "format": "int32", + "description": "The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2.\nEither set this or auto." }, "prefixLength": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Length of common (non-fuzzy) prefix" }, "maxExpansions": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "The maximum number of terms to match" }, "transpositions": { - "type": "boolean" + "type": "boolean", + "description": "True if transpositions should be treated as a primitive edit operation. If this is false, comparisons\nwill implement the classic Levenshtein algorithm. Default is true." }, "auto": { - "$ref": "#/definitions/FuzzyParamsAutoFuzziness" + "$ref": "#/definitions/FuzzyParamsAutoFuzziness", + "description": "Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting.\nEither set this or maxEdits." } - } + }, + "title": "Parameters for fuzzy queries" }, "luceneserverFuzzyQuery": { "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "text": { - "type": "string" + "type": "string", + "title": "Term to search for" }, "maxEdits": { "type": "integer", "format": "int32", - "description": "The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. Either set this or auto. Default is 2." + "description": "The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2.\nEither set this or auto. Default is 2." }, "prefixLength": { "type": "integer", @@ -3367,49 +3595,55 @@ }, "transpositions": { "type": "boolean", - "description": "True if transpositions should be treated as a primitive edit operation. If this is false, comparisons will implement the classic Levenshtein algorithm. Default is true." + "description": "True if transpositions should be treated as a primitive edit operation. If this is false, comparisons will\nimplement the classic Levenshtein algorithm. Default is true." }, "rewrite": { "$ref": "#/definitions/luceneserverRewriteMethod", - "description": "Method used to rewrite the query." + "title": "Method used to rewrite the query" }, "rewriteTopTermsSize": { "type": "integer", "format": "int32", - "description": "Specifies the size to use for the TOP_TERMS* rewrite methods." + "title": "Specifies the size to use for the TOP_TERMS* rewrite methods" }, "auto": { - "$ref": "#/definitions/FuzzyParamsAutoFuzziness" + "$ref": "#/definitions/FuzzyParamsAutoFuzziness", + "description": "Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting.\nEither set this or maxEdits." } }, - "description": "A query that matches documents containing terms similar to the specified term." + "title": "A query that matches documents containing terms similar to the specified term" }, "luceneserverGeoBoundingBoxQuery": { "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "topLeft": { - "$ref": "#/definitions/typeLatLng" + "$ref": "#/definitions/typeLatLng", + "title": "Top left corner of the geo box" }, "bottomRight": { - "$ref": "#/definitions/typeLatLng" + "$ref": "#/definitions/typeLatLng", + "title": "Bottom right corner of the geo box" } }, - "description": "A query that matches documents with geopoint within the geo box." + "title": "A query that matches documents with geopoint within the geo box" }, "luceneserverGeoPointQuery": { "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "point": { - "$ref": "#/definitions/typeLatLng" + "$ref": "#/definitions/typeLatLng", + "title": "Point to check if the polygon contains" } }, - "description": "A query that matches documents with polygon that contains the geo point." + "title": "A query that matches documents with polygon that contains the geo point" }, "luceneserverGeoPolygonQuery": { "type": "object", @@ -3432,13 +3666,16 @@ "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "center": { - "$ref": "#/definitions/typeLatLng" + "$ref": "#/definitions/typeLatLng", + "title": "Target center geo point to calculate distance" }, "radius": { - "type": "string" + "type": "string", + "title": "Distance radius like \"12 km\". supports m, km and mi, default to m" } }, "title": "A query that matches documents with geo point within the radius of target geo point" @@ -3451,9 +3688,11 @@ "items": { "type": "string", "format": "int64" - } + }, + "title": "List of snapshot gens" } - } + }, + "title": "Response from Server for getAllSnapshotGen" }, "luceneserverGetNodesResponse": { "type": "object", @@ -3464,7 +3703,8 @@ "$ref": "#/definitions/luceneserverNodeInfo" } } - } + }, + "title": "Response from Server for getNodes" }, "luceneserverGlobalStateInfo": { "type": "object", @@ -3481,27 +3721,32 @@ }, "title": "Global state for indices" } - } + }, + "title": "Cluster global state" }, "luceneserverGlobalStateRequest": { - "type": "object" + "type": "object", + "title": "Input to globalState" }, "luceneserverGlobalStateResponse": { "type": "object", "properties": { "globalState": { "$ref": "#/definitions/luceneserverGlobalStateInfo", - "title": "cluster global state" + "title": "Cluster global state" } - } + }, + "title": "Response from Server for globalState" }, "luceneserverHealthCheckResponse": { "type": "object", "properties": { "health": { - "$ref": "#/definitions/luceneserverTransferStatusCode" + "$ref": "#/definitions/luceneserverTransferStatusCode", + "title": "Response of healthcheck" } - } + }, + "title": "Response from Server for healthCheck" }, "luceneserverHighlight": { "type": "object", @@ -3536,23 +3781,24 @@ "CUSTOM" ], "default": "DEFAULT", - "title": "- DEFAULT: When DEFAULT is set in global setting, use fast vector highlighter; when set for field setting, use the type from the global setting.\n - PLAIN: not supported yet" + "title": "- DEFAULT: When DEFAULT is set in global setting, use fast vector highlighter; when set for field setting,\nuse the type from the global setting.\n - PLAIN: not supported yet" }, "luceneserverHitsResult": { "type": "object", "properties": { "totalHits": { "$ref": "#/definitions/luceneserverTotalHits", - "description": "Total hit information." + "title": "Total hit information" }, "hits": { "type": "array", "items": { "$ref": "#/definitions/SearchResponseHit" }, - "description": "Ordered hits with scoring/sorting info and retrieved fields." + "title": "Ordered hits with scoring/sorting info and retrieved fields" } - } + }, + "title": "Result from top hits collector" }, "luceneserverIndexGlobalState": { "type": "object", @@ -3565,7 +3811,8 @@ "type": "boolean", "title": "If index should be started" } - } + }, + "title": "Per index information stored in global state" }, "luceneserverIndexLiveSettings": { "type": "object", @@ -3578,7 +3825,7 @@ "minRefreshSec": { "type": "number", "format": "double", - "title": "Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen), default: 0.05" + "title": "Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen),\ndefault: 0.05" }, "maxSearcherAgeSec": { "type": "number", @@ -3642,7 +3889,7 @@ }, "verboseMetrics": { "type": "boolean", - "title": "Collect and publish additional index metrics, which may be more expensive in terms of volume, memory and/or compute, default: false" + "title": "Collect and publish additional index metrics, which may be more expensive in terms of volume, memory\nand/or compute, default: false" }, "parallelFetchByField": { "type": "boolean", @@ -3653,7 +3900,8 @@ "format": "int32", "title": "The number of documents/fields per parallel fetch task, default: 50" } - } + }, + "title": "Index live settings" }, "luceneserverIndexOptions": { "type": "string", @@ -3665,7 +3913,8 @@ "DOCS_FREQS_POSITIONS_OFFSETS" ], "default": "DEFAULT", - "description": "How the tokens should be indexed." + "description": "- DEFAULT: Use field default index options: ATOM=DOCS, TEXT=DOCS_FREQS_POSITIONS\n - DOCS: Index only doc ids\n - DOCS_FREQS: Index doc ids and term frequencies\n - DOCS_FREQS_POSITIONS: Index doc ids, term frequencies and positions\n - DOCS_FREQS_POSITIONS_OFFSETS: Index doc ids, term frequencies, positions and offsets", + "title": "How text tokens should be indexed" }, "luceneserverIndexSettings": { "type": "object", @@ -3700,9 +3949,10 @@ }, "directory": { "type": "string", - "title": "Base Directory implementation to use (NRTCachingDirectory will wrap this) either one of the core implementations (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory implementation that has a public constructor taking a single File argument default: FSDirectory" + "description": "Base Directory implementation to use either one of the core implementations\n(FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory\nimplementation that has a public constructor taking a single File argument default: FSDirectory.\nThis implementation will be wrapped by NRTCachingDirectory, if enabled and not using MMappedDirectory." } - } + }, + "title": "Index offline settings" }, "luceneserverIndexStateInfo": { "type": "object", @@ -3735,36 +3985,42 @@ }, "title": "Registered fields" } - } + }, + "title": "Index state" }, "luceneserverIndexStateRequest": { "type": "object", "properties": { "indexName": { "type": "string", - "title": "index name" + "title": "Index name" } - } + }, + "title": "Input to indexState" }, "luceneserverIndexStateResponse": { "type": "object", "properties": { "indexState": { "$ref": "#/definitions/luceneserverIndexStateInfo", - "title": "index state" + "title": "Index state" } - } + }, + "title": "Response from Server for indexState" }, "luceneserverIndexStatsResponse": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name" }, "statsResponse": { - "$ref": "#/definitions/luceneserverStatsResponse" + "$ref": "#/definitions/luceneserverStatsResponse", + "title": "Index stats" } - } + }, + "title": "Index stats response" }, "luceneserverIndicesResponse": { "type": "object", @@ -3773,16 +4029,18 @@ "type": "array", "items": { "$ref": "#/definitions/luceneserverIndexStatsResponse" - } + }, + "title": "List of index stats" } - } + }, + "title": "Response from Server for indices" }, "luceneserverInnerHit": { "type": "object", "properties": { "queryNestedPath": { "type": "string", - "description": "Nested path to search against assuming same index as the parent Query." + "title": "Nested path to search against assuming same index as the parent Query" }, "startHit": { "type": "integer", @@ -3792,26 +4050,26 @@ "topHits": { "type": "integer", "format": "int32", - "description": "How many top hits to retrieve; default: 3. It limits the hits returned, starting from index 0. For pagination: set it to startHit + window_size." + "description": "How many top hits to retrieve; default: 3. It limits the hits returned, starting from index 0.\nFor pagination: set it to startHit + window_size." }, "innerQuery": { "$ref": "#/definitions/luceneserverQuery", - "description": "InnerHit query to query against the nested documents specified by queryNestedPath." + "title": "InnerHit query to query against the nested documents specified by queryNestedPath" }, "retrieveFields": { "type": "array", "items": { "type": "string" }, - "description": "Fields to retrieve; Parent's fields except its id field are unavailable in the innerHit." + "title": "Fields to retrieve; Parent's fields except its id field are unavailable in the innerHit" }, "querySort": { "$ref": "#/definitions/luceneserverQuerySortField", - "description": "Sort hits by field (default is by relevance)." + "title": "Sort hits by field (default is by relevance)" }, "highlight": { "$ref": "#/definitions/luceneserverHighlight", - "description": "Highlight the children documents." + "title": "Highlight the children documents" } }, "title": "Inner Hit search request" @@ -3821,7 +4079,8 @@ "properties": { "int": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Value of the int" } }, "title": "Used to be able to check if a value was set" @@ -3845,7 +4104,7 @@ "numCandidates": { "type": "integer", "format": "int32", - "description": "Number of nearest neighbors to consider per segment. A larger value produces a more accurate top k. Must be \u003c= 10000." + "description": "Number of nearest neighbors to consider per segment. A larger value produces a more accurate top k.\nMust be \u003c= 10000." }, "queryVector": { "type": "array", @@ -3878,7 +4137,8 @@ "type": "number", "format": "double" } - } + }, + "title": "Facet result label and value" }, "luceneserverLastHitInfo": { "type": "object", @@ -3887,15 +4147,18 @@ "type": "array", "items": { "type": "string" - } + }, + "title": "Last hit sort field values" }, "lastDocId": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Last hit Lucene doc id" }, "lastScore": { "type": "number", - "format": "float" + "format": "float", + "title": "Last hit score" } }, "title": "Last Hit info for search after" @@ -3904,47 +4167,48 @@ "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Name of index whose liveSettings are to be updated" }, "maxRefreshSec": { "type": "number", "format": "double", - "description": "Longest time to wait before reopening IndexSearcher (i.e., periodic background reopen)." + "title": "Longest time to wait before reopening IndexSearcher (i.e., periodic background reopen)" }, "minRefreshSec": { "type": "number", "format": "double", - "description": "Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen)." + "title": "Shortest time to wait before reopening IndexSearcher (i.e., when a search is waiting for a specific indexGen)" }, "maxSearcherAgeSec": { "type": "number", "format": "double", - "description": "Non-current searchers older than this are pruned." + "title": "Non-current searchers older than this are pruned" }, "indexRamBufferSizeMB": { "type": "number", "format": "double", - "description": "Size (in MB) of IndexWriter's RAM buffer." + "title": "Size (in MB) of IndexWriter's RAM buffer" }, "addDocumentsMaxBufferLen": { "type": "integer", "format": "int32", - "description": "Max number of documents to add at a time." + "title": "Max number of documents to add at a time" }, "sliceMaxDocs": { "type": "integer", "format": "int32", - "description": "Maximum number of documents allowed in a parallel search slice." + "title": "Maximum number of documents allowed in a parallel search slice" }, "sliceMaxSegments": { "type": "integer", "format": "int32", - "description": "Maximum number of segments allowed in a parallel search slice." + "title": "Maximum number of segments allowed in a parallel search slice" }, "virtualShards": { "type": "integer", "format": "int32", - "description": "Number of virtual shards to use for this index." + "title": "Number of virtual shards to use for this index" }, "maxMergedSegmentMB": { "type": "integer", @@ -3959,17 +4223,17 @@ "defaultSearchTimeoutSec": { "type": "number", "format": "double", - "description": "Timeout value to used when not specified in the search request." + "title": "Timeout value to used when not specified in the search request" }, "defaultSearchTimeoutCheckEvery": { "type": "integer", "format": "int32", - "description": "Timeout check every value to use when not specified in the search request." + "title": "Timeout check every value to use when not specified in the search request" }, "defaultTerminateAfter": { "type": "integer", "format": "int32", - "description": "Terminate after value to use when not specified in the search request." + "title": "Terminate after value to use when not specified in the search request" } }, "title": "Input to liveSettings" @@ -3978,7 +4242,8 @@ "type": "object", "properties": { "response": { - "type": "string" + "type": "string", + "title": "Json string of updated IndexLiveSettings" } }, "title": "Response from Server to liveSettings" @@ -3988,7 +4253,7 @@ "properties": { "indexName": { "type": "string", - "title": "Index name" + "title": "Name of index whose liveSettings are to be updated" }, "liveSettings": { "$ref": "#/definitions/luceneserverIndexLiveSettings", @@ -3996,9 +4261,10 @@ }, "local": { "type": "boolean", - "description": "When set to true, live settings changes are only applied to the local node. These changes are ephemeral, so will not persist through a restart. Also, the live settings returned in the response will contain the local overrides only when this flag is true." + "description": "When set to true, live settings changes are only applied to the local node. These changes are ephemeral,\nso will not persist through a restart. Also, the live settings returned in the response will contain the\nlocal overrides only when this flag is true." } - } + }, + "title": "Input to liveSettingsV2" }, "luceneserverLiveSettingsV2Response": { "type": "object", @@ -4007,20 +4273,22 @@ "$ref": "#/definitions/luceneserverIndexLiveSettings", "title": "Current live settings, including default values" } - } + }, + "title": "Response from Server to liveSettingsV2" }, "luceneserverLoggingHits": { "type": "object", "properties": { "name": { "type": "string", - "title": "name of the hits logger to be called, as registered by a HitsLoggerPlugin" + "title": "Name of the hits logger to be called, as registered by a HitsLoggerPlugin" }, "params": { "type": "object", "title": "Optional logging parameters" } - } + }, + "title": "Defines logger for search hits" }, "luceneserverMatchAllQuery": { "type": "object", @@ -4032,27 +4300,29 @@ "SHOULD", "MUST" ], - "default": "SHOULD" + "default": "SHOULD", + "description": "- SHOULD: Or operation\n - MUST: And operation", + "title": "Type of match operator used in MatchQuery" }, "luceneserverMatchPhrasePrefixQuery": { "type": "object", "properties": { "field": { "type": "string", - "description": "Field in the document to query." + "title": "Field in the document to query" }, "query": { "type": "string", - "description": "The text to query with." + "title": "The text to query with" }, "slop": { "type": "integer", "format": "int32", - "description": "Edit distance between respective positions of tokens generated by analyzing this query and the positions of terms in a document." + "title": "Edit distance between respective positions of tokens generated by analyzing this query and the positions\nof terms in a document" }, "analyzer": { "$ref": "#/definitions/luceneserverAnalyzer", - "description": "Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead." + "description": "Analyzer used to analyze the query. If not provided, the default search analyzer for the field would\nbe used instead." }, "maxExpansions": { "type": "integer", @@ -4060,54 +4330,65 @@ "description": "Maximum number of terms to which the last provided term of the query value will expand. Defaults to 50." } }, - "title": "A query that matches documents containing terms in the same order as those in the analyzed query string. The final analyzed token is treated as a prefix" + "title": "A query that matches documents containing terms in the same order as those in the analyzed query string.\nThe final analyzed token is treated as a prefix" }, "luceneserverMatchPhraseQuery": { "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "query": { - "type": "string" + "type": "string", + "title": "The text to query with" }, "slop": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Edit distance between respective positions of tokens generated by analyzing this query and the positions of\nterms in a document" }, "analyzer": { - "$ref": "#/definitions/luceneserverAnalyzer" + "$ref": "#/definitions/luceneserverAnalyzer", + "description": "Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be\nused instead." }, "zeroTermsQuery": { - "$ref": "#/definitions/MatchPhraseQueryZeroTerms" + "$ref": "#/definitions/MatchPhraseQueryZeroTerms", + "description": "Indicates whether none or all documents are returned if the analyzer removes all tokens. Valid values\nare NONE_ZERO_TERMS and ALL_ZERO_TERMS." } }, - "description": "A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are combined into a PhraseQuery." + "description": "A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are\ncombined into a PhraseQuery." }, "luceneserverMatchQuery": { "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "query": { - "type": "string" + "type": "string", + "title": "The text to query with" }, "operator": { - "$ref": "#/definitions/luceneserverMatchOperator" + "$ref": "#/definitions/luceneserverMatchOperator", + "description": "Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST." }, "minimumNumberShouldMatch": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Minimum number of optional clauses that must match" }, "analyzer": { - "$ref": "#/definitions/luceneserverAnalyzer" + "$ref": "#/definitions/luceneserverAnalyzer", + "description": "Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be\nused instead." }, "fuzzyParams": { - "$ref": "#/definitions/luceneserverFuzzyParams" + "$ref": "#/definitions/luceneserverFuzzyParams", + "title": "Parameters to set the fuzziness of the query" } }, - "description": "A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are combined using term queries in boolean clauses." + "description": "A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are\ncombined using term queries in boolean clauses." }, "luceneserverMaxCollector": { "type": "object", @@ -4117,7 +4398,7 @@ "title": "Script to produce a double value" } }, - "description": "Definition of collector to find a max double value over documents. Currently only allows for script based value production." + "description": "Definition of collector to find a max double value over documents. Currently only allows for script based\nvalue production." }, "luceneserverMinCollector": { "type": "object", @@ -4127,7 +4408,7 @@ "title": "Script to produce a double value" } }, - "description": "Definition of collector to find a min double value over documents. Currently only allows for script based value production." + "description": "Definition of collector to find a min double value over documents. Currently only allows for script based\nvalue production." }, "luceneserverMode": { "type": "string", @@ -4136,7 +4417,9 @@ "PRIMARY", "REPLICA" ], - "default": "STANDALONE" + "default": "STANDALONE", + "description": "- STANDALONE: Standalone index with no replication\n - PRIMARY: Primary index in an nrt cluster setup\n - REPLICA: Replica index in an nrt cluster setup", + "title": "Index start mode" }, "luceneserverMultiFunctionScoreQuery": { "type": "object", @@ -4167,7 +4450,7 @@ }, "minExcluded": { "type": "boolean", - "title": "Determine minimal score is excluded or not. By default, it's false;" + "description": "Determine minimal score is excluded or not. By default, it's false." } }, "title": "A query to modify the score of documents with a given set of functions" @@ -4179,43 +4462,51 @@ "type": "array", "items": { "type": "string" - } + }, + "title": "Fields in the document to query" }, "query": { - "type": "string" + "type": "string", + "title": "The text to query with" }, "fieldBoosts": { "type": "object", "additionalProperties": { "type": "number", "format": "float" - } + }, + "title": "Boosts for each field, if any" }, "operator": { - "$ref": "#/definitions/luceneserverMatchOperator" + "$ref": "#/definitions/luceneserverMatchOperator", + "description": "Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST." }, "minimumNumberShouldMatch": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Minimum number of optional clauses that must match" }, "analyzer": { - "$ref": "#/definitions/luceneserverAnalyzer" + "$ref": "#/definitions/luceneserverAnalyzer", + "description": "Analyzer used to analyze the query. If not provided, the default search analyzer for the field would\nbe used instead." }, "fuzzyParams": { - "$ref": "#/definitions/luceneserverFuzzyParams" + "$ref": "#/definitions/luceneserverFuzzyParams", + "title": "Parameters to set the fuzziness of the query" }, "tieBreakerMultiplier": { "type": "number", - "format": "float" + "format": "float", + "title": "The score of each non-maximum match query disjunct for a document will be multiplied by this weight\nand added into the final score" }, "type": { "$ref": "#/definitions/MultiMatchQueryMatchType", - "description": "Type defining match behavior of query." + "title": "Type defining match behavior of query" }, "slop": { "type": "integer", "format": "int32", - "description": "Edit distance between respective positions of tokens generated by analyzing this query and the positions of terms in a document, applies to PHRASE_PREFIX type matching." + "title": "Edit distance between respective positions of tokens generated by analyzing this query and the positions\nof terms in a document, applies to PHRASE_PREFIX type matching" }, "maxExpansions": { "type": "integer", @@ -4223,97 +4514,115 @@ "description": "Maximum number of terms to which the prefix token will expand when using PHRASE_PREFIX matching. Defaults to 50." } }, - "description": "A query that creates a match query for each field provided and wraps all the match queries in a disjunction max query." + "description": "A query that creates a match query for each field provided and wraps all the match queries in a\ndisjunction max query." }, "luceneserverNameAndParams": { "type": "object", "properties": { "name": { - "type": "string" + "type": "string", + "title": "Name of the analysis component" }, "params": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "title": "Parameters for the analysis component" } - } + }, + "title": "Name of analysis component and its parameters" }, "luceneserverNestedQuery": { "type": "object", "properties": { "query": { - "$ref": "#/definitions/luceneserverQuery" + "$ref": "#/definitions/luceneserverQuery", + "title": "Query for the child documents" }, "path": { - "type": "string" + "type": "string", + "title": "Path to the child document" }, "scoreMode": { - "$ref": "#/definitions/NestedQueryScoreMode" + "$ref": "#/definitions/NestedQueryScoreMode", + "title": "How child documents score affects final score" } - } + }, + "title": "Query that matches nested documents" }, "luceneserverNodeInfo": { "type": "object", "properties": { "hostname": { - "type": "string" + "type": "string", + "title": "Name or ip address of the remote host that this node is connected to for binary replication" }, "port": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Port number of the remote host that this node is connected to for binary replication" }, "nodeName": { - "type": "string" + "type": "string", + "title": "Name of the remote node" } - } + }, + "title": "Node information" }, "luceneserverNodeInfoResponse": { "type": "object", "properties": { "nodeName": { "type": "string", - "title": "node name" + "title": "Node name" }, "serviceName": { "type": "string", - "title": "service name" + "title": "Service name" }, "hostName": { "type": "string", - "title": "host name" + "title": "Host name" }, "version": { "type": "string", - "title": "nrtsearch version" + "title": "Nrtsearch version" }, "ephemeralId": { "type": "string", - "title": "node ephemeral id" + "title": "Node ephemeral id" } - } + }, + "title": "Response from Server for nodeInfo" }, "luceneserverNumericRangeType": { "type": "object", "properties": { "label": { - "type": "string" + "type": "string", + "title": "Label for this range" }, "min": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Min value for the range" }, "minInclusive": { - "type": "boolean" + "type": "boolean", + "title": "True if the min value is inclusive" }, "max": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Max value for the range" }, "maxInclusive": { - "type": "boolean" + "type": "boolean", + "title": "True if the max value is inclusive" } - } + }, + "title": "Define numeric range for facet" }, "luceneserverPhraseQuery": { "type": "object", @@ -4321,28 +4630,32 @@ "slop": { "type": "integer", "format": "int32", - "description": "Edit distance between respective positions of terms as defined in this PhraseQuery and the positions\nof terms in a document." + "title": "Edit distance between respective positions of terms as defined in this PhraseQuery and the positions\nof terms in a document" }, "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "terms": { "type": "array", "items": { "type": "string" - } + }, + "title": "Terms to match" } }, - "description": "A Query that matches documents containing a particular sequence of terms." + "title": "A Query that matches documents containing a particular sequence of terms" }, "luceneserverPluginCollector": { "type": "object", "properties": { "name": { - "type": "string" + "type": "string", + "title": "Name of plugin registered collector" }, "params": { - "type": "object" + "type": "object", + "title": "Arguments passed to the plugin collector" } }, "title": "Defines an entry point for using a collector from a plugin" @@ -4351,10 +4664,12 @@ "type": "object", "properties": { "name": { - "type": "string" + "type": "string", + "title": "Rescorer name registered by plugin" }, "params": { - "type": "object" + "type": "object", + "title": "Arguments passed to the plugin rescorer" } }, "title": "Defines an entry point for using a rescorer from plugin" @@ -4364,11 +4679,13 @@ "properties": { "latitude": { "type": "number", - "format": "double" + "format": "double", + "title": "Latitude of the point" }, "longitude": { "type": "number", - "format": "double" + "format": "double", + "title": "Longitude of the point" } }, "title": "Point representation" @@ -4381,7 +4698,7 @@ "items": { "$ref": "#/definitions/typeLatLng" }, - "description": "Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be self-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian. Instead, use two polygons: one on each side." + "description": "Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be\nself-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian.\nInstead, use two polygons: one on each side." }, "holes": { "type": "array", @@ -4398,38 +4715,42 @@ "properties": { "field": { "type": "string", - "description": "Document field name." + "title": "Document field name" }, "prefix": { "type": "string", - "description": "Prefix to search for." + "title": "Prefix to search for" }, "rewrite": { "$ref": "#/definitions/luceneserverRewriteMethod", - "description": "Method used to rewrite the query." + "title": "Method used to rewrite the query" }, "rewriteTopTermsSize": { "type": "integer", "format": "int32", - "description": "Specifies the size to use for the TOP_TERMS* rewrite methods." + "title": "Specifies the size to use for the TOP_TERMS* rewrite methods" } }, - "description": "A query that matches documents that contain a specific prefix in a provided field." + "title": "A query that matches documents that contain a specific prefix in a provided field" }, "luceneserverProfileResult": { "type": "object", "properties": { "searchStats": { - "$ref": "#/definitions/ProfileResultSearchStats" + "$ref": "#/definitions/ProfileResultSearchStats", + "title": "Stats for search phase" }, "parsedQuery": { - "type": "string" + "type": "string", + "title": "Parsed query string" }, "rewrittenQuery": { - "type": "string" + "type": "string", + "title": "Rewritten query string" }, "drillDownQuery": { - "type": "string" + "type": "string", + "title": "Drill down query string" } }, "title": "Defines detailed profiling stats for queries that set profile=true" @@ -4438,11 +4759,13 @@ "type": "object", "properties": { "queryType": { - "$ref": "#/definitions/luceneserverQueryType" + "$ref": "#/definitions/luceneserverQueryType", + "title": "No longer needed, type inferred from set QueryNode" }, "boost": { "type": "number", - "format": "float" + "format": "float", + "description": "Boost values that are less than one will give less importance to this query compared to other ones while\nvalues that are greater than one will give more importance to the scores returned by this query. Boost\nvalue of zero will do nothing (default). Boost less than 0 is invalid." }, "booleanQuery": { "$ref": "#/definitions/luceneserverBooleanQuery" @@ -4517,21 +4840,24 @@ "$ref": "#/definitions/luceneserverMatchAllQuery" } }, - "description": "Defines a full query consisting of a QueryNode which may be one of several types." + "title": "Defines a full query consisting of a QueryNode which may be one of several types" }, "luceneserverQueryRescorer": { "type": "object", "properties": { "rescoreQuery": { - "$ref": "#/definitions/luceneserverQuery" + "$ref": "#/definitions/luceneserverQuery", + "title": "Query to rescore documents" }, "queryWeight": { "type": "number", - "format": "double" + "format": "double", + "title": "Weight to multiply with original query score" }, "rescoreQueryWeight": { "type": "number", - "format": "double" + "format": "double", + "title": "Weight to multiply with rescore query score" } }, "title": "Defines a rescorer which uses query to rescore documents in the second pass" @@ -4540,15 +4866,19 @@ "type": "object", "properties": { "doDocScores": { - "type": "boolean" + "type": "boolean", + "title": "Compute the doc score for each collected (costs added CPU); default:false" }, "doMaxScore": { - "type": "boolean" + "type": "boolean", + "title": "Compute the max score across all hits (costs added CPU); default: false" }, "fields": { - "$ref": "#/definitions/luceneserverSortFields" + "$ref": "#/definitions/luceneserverSortFields", + "title": "List of Fields to sort on" } - } + }, + "title": "Definition doing ranking by sorting on fields" }, "luceneserverQueryType": { "type": "string", @@ -4578,63 +4908,74 @@ "SPAN_QUERY" ], "default": "NONE", - "description": "Defines different types of QueryNodes." + "title": "Deprecated: Defines different types of QueryNodes" }, "luceneserverRangeQuery": { "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "lower": { - "type": "string" + "type": "string", + "title": "Lower bound, inclusive by default" }, "upper": { - "type": "string" + "type": "string", + "title": "Upper bound, inclusive by default" }, "lowerExclusive": { - "type": "boolean" + "type": "boolean", + "title": "Set true to make lower bound exclusive" }, "upperExclusive": { - "type": "boolean" + "type": "boolean", + "title": "Set true to make upper bound exclusive" } }, - "description": "A query that matches documents with values within the specified range. The lower and upper values though provided as strings will be converted to the type of the field. This works with INT, LONG, FLOAT, DOUBLE and DATE_TIME field types." + "description": "A query that matches documents with values within the specified range. The lower and upper values though provided\nas strings will be converted to the type of the field. This works with INT, LONG, FLOAT, DOUBLE and DATE_TIME\nfield types." }, "luceneserverRawFileChunk": { "type": "object", "properties": { "content": { "type": "string", - "format": "byte" + "format": "byte", + "title": "Raw contents of file" }, "seqNum": { "type": "integer", "format": "int32", - "title": "sequence number for this chunk, only used for acked file copy" + "title": "Sequence number for this chunk, only used for acked file copy" }, "ack": { "type": "boolean", - "title": "if this chunk should be acked, only used for acked file copy" + "title": "If this chunk should be acked, only used for acked file copy" } - } + }, + "title": "Chunk of file data" }, "luceneserverRefreshRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name to be refreshed" } - } + }, + "title": "Input to refresh" }, "luceneserverRefreshResponse": { "type": "object", "properties": { "refreshTimeMS": { "type": "number", - "format": "double" + "format": "double", + "title": "Time taken in milliseconds to refresh the index" } - } + }, + "title": "Response from Server for refresh" }, "luceneserverRegexpFlag": { "type": "string", @@ -4649,17 +4990,19 @@ "REGEXP_NONE" ], "default": "REGEXP_ALL", - "description": "- REGEXP_ALL: Syntax flag, enables all optional regexp syntax.\n - REGEXP_ANYSTRING: Syntax flag, enables anystring (@).\n - REGEXP_AUTOMATON: Syntax flag, enables named automata (\u003cidentifier\u003e).\n - REGEXP_COMPLEMENT: Syntax flag, enables complement (~).\n - REGEXP_EMPTY: Syntax flag, enables empty language (#).\n - REGEXP_INTERSECTION: Syntax flag, enables intersection (\u0026).\n - REGEXP_INTERVAL: Syntax flag, enables numerical intervals ( \u003cn-m\u003e).\n - REGEXP_NONE: Syntax flag, enables no optional regexp syntax.", + "description": "- REGEXP_ALL: Syntax flag, enables all optional regexp syntax\n - REGEXP_ANYSTRING: Syntax flag, enables anystring (@)\n - REGEXP_AUTOMATON: Syntax flag, enables named automata (\u003cidentifier\u003e)\n - REGEXP_COMPLEMENT: Syntax flag, enables complement (~)\n - REGEXP_EMPTY: Syntax flag, enables empty language (#)\n - REGEXP_INTERSECTION: Syntax flag, enables intersection (\u0026)\n - REGEXP_INTERVAL: Syntax flag, enables numerical intervals (\u003cn-m\u003e)\n - REGEXP_NONE: Syntax flag, enables no optional regexp syntax", "title": "Enum for RegexpQuery flags" }, "luceneserverRegexpQuery": { "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "text": { - "type": "string" + "type": "string", + "title": "Regular expression to search for" }, "flag": { "$ref": "#/definitions/luceneserverRegexpFlag", @@ -4668,16 +5011,16 @@ "maxDeterminizedStates": { "type": "integer", "format": "int32", - "description": "maximum number of states that compiling the automaton for the regexp can result in. Set higher to allow more complex queries and lower to prevent memory exhaustion. Default is 10000." + "description": "Maximum number of states that compiling the automaton for the regexp can result in. Set higher to allow more\ncomplex queries and lower to prevent memory exhaustion. Default is 10000." }, "rewrite": { "$ref": "#/definitions/luceneserverRewriteMethod", - "description": "Method used to rewrite the query." + "title": "Method used to rewrite the query" }, "rewriteTopTermsSize": { "type": "integer", "format": "int32", - "description": "Specifies the size to use for the TOP_TERMS* rewrite methods." + "title": "Specifies the size to use for the TOP_TERMS* rewrite methods" } }, "title": "Message for RegexpQuery" @@ -4686,39 +5029,49 @@ "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Name of the index to release snapshot" }, "snapshotId": { - "$ref": "#/definitions/luceneserverSnapshotId" + "$ref": "#/definitions/luceneserverSnapshotId", + "title": "Id of snapshot to release, previously returned by @createSnapshot" } - } + }, + "title": "Input to releaseSnapshot" }, "luceneserverReleaseSnapshotResponse": { "type": "object", "properties": { "success": { - "type": "boolean" + "type": "boolean", + "title": "True if successful" } - } + }, + "title": "Response from Server for releaseSnapshot" }, "luceneserverReloadStateRequest": { - "type": "object" + "type": "object", + "title": "Input to reloadState" }, "luceneserverReloadStateResponse": { - "type": "object" + "type": "object", + "title": "Response from Server for reloadState" }, "luceneserverRescorer": { "type": "object", "properties": { "windowSize": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Maximum number of hits from previous phase to rescore" }, "queryRescorer": { - "$ref": "#/definitions/luceneserverQueryRescorer" + "$ref": "#/definitions/luceneserverQueryRescorer", + "title": "Rescore with Lucene query" }, "pluginRescorer": { - "$ref": "#/definitions/luceneserverPluginRescorer" + "$ref": "#/definitions/luceneserverPluginRescorer", + "title": "Rescore with plugin registered rescorer" }, "name": { "type": "string", @@ -4731,15 +5084,19 @@ "type": "object", "properties": { "serviceName": { - "type": "string" + "type": "string", + "title": "Remote storage namespace qualifier for service" }, "resourceName": { - "type": "string" + "type": "string", + "title": "Remote storage namespace qualifier for resource e.g. indexName" }, "deleteExistingData": { - "type": "boolean" + "type": "boolean", + "title": "Delete any existing local data for the index" } - } + }, + "title": "Index restore information" }, "luceneserverRewriteMethod": { "type": "string", @@ -4752,7 +5109,7 @@ "TOP_TERMS" ], "default": "CONSTANT_SCORE", - "description": "- CONSTANT_SCORE: Uses the CONSTANT_SCORE_BOOLEAN method for fewer matching terms. Otherwise, this method finds all matching terms in sequence and returns matching documents using a bit set.\n - CONSTANT_SCORE_BOOLEAN: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term.\n - SCORING_BOOLEAN: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates the relevance score for each matching document.\n - TOP_TERMS_BLENDED_FREQS: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates a relevance score for each matching document as if all terms had the same frequency, the maximum frequency of all matching terms. The final BooleanQuery query only includes Term queries for the top N (specified separately) scoring terms.\n - TOP_TERMS_BOOST: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Assigns each matching document a relevance score equal to the boost parameter. The final BooleanQuery query only includes Term queries for the top N (specified separately) terms.\n - TOP_TERMS: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates a relevance score for each matching document. The final BooleanQuery query only includes Term queries for the top N (specified separately) scoring terms.", + "description": "- CONSTANT_SCORE: Uses the CONSTANT_SCORE_BOOLEAN method for fewer matching terms. Otherwise, this method finds all matching\nterms in sequence and returns matching documents using a bit set.\n - CONSTANT_SCORE_BOOLEAN: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each\nmatching term.\n - SCORING_BOOLEAN: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each\nmatching term. Calculates the relevance score for each matching document.\n - TOP_TERMS_BLENDED_FREQS: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each\nmatching term. Calculates a relevance score for each matching document as if all terms had the same frequency,\nthe maximum frequency of all matching terms. The final BooleanQuery query only includes Term queries for\nthe top N (specified separately) scoring terms.\n - TOP_TERMS_BOOST: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each\nmatching term. Assigns each matching document a relevance score equal to the boost parameter. The final\nBooleanQuery query only includes Term queries for the top N (specified separately) terms.\n - TOP_TERMS: This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each\nmatching term. Calculates a relevance score for each matching document. The final BooleanQuery query only\nincludes Term queries for the top N (specified separately) scoring terms.", "title": "Method used to rewrite a MultiTermQuery" }, "luceneserverRuntimeField": { @@ -4760,7 +5117,7 @@ "properties": { "script": { "$ref": "#/definitions/luceneserverScript", - "description": "Script defining this field's values." + "title": "Script defining this field's values" }, "name": { "type": "string", @@ -4773,32 +5130,39 @@ "type": "object", "properties": { "lang": { - "type": "string" + "type": "string", + "title": "Script language" }, "source": { - "type": "string" + "type": "string", + "title": "Script source" }, "params": { "type": "object", "additionalProperties": { "$ref": "#/definitions/ScriptParamValue" - } + }, + "title": "Parameters passed into script execution" } - } + }, + "title": "Definition of user-defined script" }, "luceneserverSearchRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index to search against" }, "startHit": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Which hit to start from (for pagination); default: 0" }, "topHits": { "type": "integer", - "format": "int32" + "format": "int32", + "description": "How many top hits to retrieve; default: 10. It limits the hits returned, starting from index 0.\nFor pagination: set it to startHit + window_size." }, "timeoutSec": { "type": "number", @@ -4809,61 +5173,75 @@ "type": "array", "items": { "type": "string" - } + }, + "title": "Which fields to retrieve" }, "queryText": { - "type": "string" + "type": "string", + "description": "Query text to parse using the specified QueryParser. If query is provided, this is ignored." }, "virtualFields": { "type": "array", "items": { "$ref": "#/definitions/luceneserverVirtualField" - } + }, + "title": "Defines virtual fields (named dynamic expressions) for this query" }, "query": { - "$ref": "#/definitions/luceneserverQuery" + "$ref": "#/definitions/luceneserverQuery", + "title": "Full query to execute" }, "querySort": { - "$ref": "#/definitions/luceneserverQuerySortField" + "$ref": "#/definitions/luceneserverQuerySortField", + "title": "Sort hits by field (default is by relevance)" }, "indexGen": { "type": "string", - "format": "int64" + "format": "int64", + "description": "Search a generation previously returned by an indexing operation such as #addDocument.\nUse this to search a non-committed (near-real-time) view of the index." }, "version": { "type": "string", - "format": "int64" + "format": "int64", + "description": "Search a specific searcher version. This is typically used by follow-on searches\n(e.g., user clicks next page, drills down, or changes sort, etc.) to get the same searcher used by\nthe original search." }, "snapshot": { - "type": "string" + "type": "string", + "title": "Search a snapshot previously created with #createSnapshot" }, "totalHitsThreshold": { "type": "integer", - "format": "int32" + "format": "int32", + "description": "By default we count hits accurately up to 1000. This makes sure that we don't spend most time on\ncomputing hit counts." }, "facets": { "type": "array", "items": { "$ref": "#/definitions/luceneserverFacet" - } + }, + "title": "Which facets to retrieve" }, "fetchTasks": { "type": "array", "items": { "$ref": "#/definitions/luceneserverFetchTask" - } + }, + "title": "Any custom tasks that should be performed on top documents after ranking" }, "disallowPartialResults": { - "type": "boolean" + "type": "boolean", + "description": "Should partial result be a failure condition. Applies when a search request times out. If false, the top\ndocuments ranking at the point of timeout are used and the request continues. Also, hitTimeout is set to\ntrue in the response." }, "queryNestedPath": { - "type": "string" + "type": "string", + "title": "Nested path we want to query by if we want to query child documents" }, "rescorers": { "type": "array", "items": { "$ref": "#/definitions/luceneserverRescorer" - } + }, + "title": "Rescorers which are executed in-order after the first pass" }, "profile": { "type": "boolean", @@ -4872,7 +5250,7 @@ "timeoutCheckEvery": { "type": "integer", "format": "int32", - "description": "Check the search timeout condition after each collection of n documents in a segment. If 0, timeout is only checked on the segment boundary." + "description": "Check the search timeout condition after each collection of n documents in a segment.\nIf 0, timeout is only checked on the segment boundary." }, "collectors": { "type": "object", @@ -4884,11 +5262,11 @@ "terminateAfter": { "type": "integer", "format": "int32", - "description": "Stop document collection in search phase after this many documents, 0 for unlimited." + "title": "Stop document collection in search phase after this many documents, 0 for unlimited" }, "responseCompression": { "type": "string", - "title": "Set gRPC compression codec to use for response message. If value is unset or invalid, falls back to uncompressed. Valid codecs: identity, gzip, lz4" + "title": "Set gRPC compression codec to use for response message. If value is unset or invalid, falls back to\nuncompressed. Valid codecs: identity, gzip, lz4" }, "highlight": { "$ref": "#/definitions/luceneserverHighlight", @@ -4915,7 +5293,7 @@ "terminateAfterMaxRecallCount": { "type": "integer", "format": "int32", - "description": "Stop document collection in search phase after this many recalled documents, after terminateAfter docs will be counted but not scored upto terminateAfterMaxRecallCount." + "title": "Stop document collection in search phase after this many recalled documents, after terminateAfter docs\nwill be counted but not scored upto terminateAfterMaxRecallCount" }, "loggingHits": { "$ref": "#/definitions/luceneserverLoggingHits", @@ -4930,36 +5308,43 @@ "items": { "$ref": "#/definitions/luceneserverKnnQuery" }, - "title": "Request kNN vector search queries, results will be combined with the standard query (if provided) using the boolean query SHOULD logic" + "title": "Request kNN vector search queries, results will be combined with the standard query (if provided) using\nthe boolean query SHOULD logic" } - } + }, + "title": "Search query request" }, "luceneserverSearchResponse": { "type": "object", "properties": { "diagnostics": { - "$ref": "#/definitions/SearchResponseDiagnostics" + "$ref": "#/definitions/SearchResponseDiagnostics", + "title": "Query diagnostics" }, "hitTimeout": { - "type": "boolean" + "type": "boolean", + "title": "Set to true if search times out and a degraded response is returned" }, "totalHits": { - "$ref": "#/definitions/luceneserverTotalHits" + "$ref": "#/definitions/luceneserverTotalHits", + "title": "Total hits for the query" }, "hits": { "type": "array", "items": { "$ref": "#/definitions/SearchResponseHit" - } + }, + "title": "Ranked top hits" }, "searchState": { - "$ref": "#/definitions/SearchResponseSearchState" + "$ref": "#/definitions/SearchResponseSearchState", + "title": "State for use in subsequent searches (search after)" }, "facetResult": { "type": "array", "items": { "$ref": "#/definitions/luceneserverFacetResult" - } + }, + "title": "Counts or aggregates for a single dimension" }, "profileResult": { "$ref": "#/definitions/luceneserverProfileResult", @@ -4976,7 +5361,8 @@ "type": "boolean", "title": "If this query hit the terminateAfter threshold specified in the request" } - } + }, + "title": "Response to a search request" }, "luceneserverSearcher": { "type": "object", @@ -4984,36 +5370,44 @@ "version": { "type": "string", "format": "int64", - "description": "the version recorded in the commit that the reader opened.\nThis version is advanced every time a change is made with IndexWriter." + "description": "Version recorded in the commit that the reader opened. This version is advanced every time a change\nis made with IndexWriter." }, "numDocs": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Total number of docs in this index" }, "segments": { - "type": "string" + "type": "string", + "title": "String representation of segments" }, "staleAgeSeconds": { "type": "number", - "format": "double" + "format": "double", + "title": "How much time has passed since this searcher was the current (live) searcher" }, "numSegments": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Number of segments, filled only if Searcher has StandardDirectoryReader" } - } + }, + "title": "Index searcher stats" }, "luceneserverSearcherVersion": { "type": "object", "properties": { "version": { "type": "string", - "format": "int64" + "format": "int64", + "description": "Version recorded in the commit that the reader opened. This version is advanced every time a change\nis made with IndexWriter." }, "didRefresh": { - "type": "boolean" + "type": "boolean", + "title": "True if refresh happened" } - } + }, + "title": "Index searcher version" }, "luceneserverSelector": { "type": "string", @@ -5024,49 +5418,60 @@ "MIDDLE_MAX" ], "default": "MIN", + "description": "- MIN: Minimum value\n - MAX: Maximum value\n - MIDDLE_MIN: Middle value of the set; if there are an even number of values, the lower of the middle two is chosen\n - MIDDLE_MAX: Middle value of the set; if there are an even number of values, the upper of the middle two is chosen", "title": "For multi valued fields, how to select which value is used for sorting" }, "luceneserverSettingsRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Name of index whose settings are to be updated" }, "mergeMaxMBPerSec": { "type": "number", - "format": "double" + "format": "double", + "title": "No longer used" }, "nrtCachingDirectoryMaxMergeSizeMB": { "type": "number", - "format": "double" + "format": "double", + "title": "Largest merged segment size to cache in RAMDirectory, default: 5.0MB" }, "nrtCachingDirectoryMaxSizeMB": { "type": "number", - "format": "double" + "format": "double", + "title": "Largest overall size for all files cached in NRTCachingDirectory; set to -1 to disable NRTCachingDirectory,\ndefault: 60.0MB" }, "concurrentMergeSchedulerMaxThreadCount": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "How many merge threads to allow at once" }, "concurrentMergeSchedulerMaxMergeCount": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Maximum backlog of pending merges before indexing threads are stalled" }, "indexSort": { - "$ref": "#/definitions/luceneserverSortFields" + "$ref": "#/definitions/luceneserverSortFields", + "title": "Index time sorting; can only be written once, default: no sorting" }, "indexVerbose": { - "type": "boolean" + "type": "boolean", + "title": "Deprecated, moved to lucene config. Turn on IndexWriter's infoStream (to stdout)" }, "indexMergeSchedulerAutoThrottle": { - "type": "boolean" + "type": "boolean", + "title": "Turn on/off the merge scheduler's auto throttling" }, "normsFormat": { - "type": "string" + "type": "string", + "title": "No longer used" }, "directory": { "type": "string", - "title": "Base Directory implementation to use (NRTCachingDirectory will wrap this) either one of the core implementations (FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory implementation that has a public constructor taking a single File argument default: FSDirectory" + "description": "Base Directory implementation to use either one of the core implementations\n(FSDirectory, MMapDirectory, NIOFSDirectory, or a fully qualified path to a Directory\nimplementation that has a public constructor taking a single File argument default: FSDirectory.\nThis implementation will be wrapped by NRTCachingDirectory, if enabled and not using MMappedDirectory." } }, "title": "Input to settings" @@ -5075,7 +5480,8 @@ "type": "object", "properties": { "response": { - "type": "string" + "type": "string", + "title": "Json string of updated IndexSettings" } }, "title": "Settings Response returned from Server" @@ -5091,7 +5497,8 @@ "$ref": "#/definitions/luceneserverIndexSettings", "title": "Settings to merge into existing settings, or unset to get current settings" } - } + }, + "title": "Input to settingsV2" }, "luceneserverSettingsV2Response": { "type": "object", @@ -5100,24 +5507,29 @@ "$ref": "#/definitions/luceneserverIndexSettings", "title": "Current index settings, including default values" } - } + }, + "title": "Response from Server for settingsV2" }, "luceneserverSnapshotId": { "type": "object", "properties": { "indexGen": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Index generation" }, "taxonomyGen": { "type": "string", - "format": "int64" + "format": "int64", + "title": "Taxonomy index generation" }, "stateGen": { "type": "string", - "format": "int64" + "format": "int64", + "title": "State generation" } - } + }, + "title": "Snapshot id" }, "luceneserverSortFields": { "type": "object", @@ -5126,7 +5538,8 @@ "type": "array", "items": { "$ref": "#/definitions/luceneserverSortType" - } + }, + "title": "Fields to sort on" } }, "title": "Fields to sort on either during index time or search time" @@ -5135,13 +5548,16 @@ "type": "object", "properties": { "fieldName": { - "type": "string" + "type": "string", + "title": "Name of field to sort on" }, "selector": { - "$ref": "#/definitions/luceneserverSelector" + "$ref": "#/definitions/luceneserverSelector", + "title": "For multi valued fields, how to select which value is used for sorting" }, "origin": { - "$ref": "#/definitions/luceneserverPoint" + "$ref": "#/definitions/luceneserverPoint", + "title": "For distance sort, the point that we measure distance from" }, "missingLast": { "type": "boolean", @@ -5156,7 +5572,7 @@ "title": "The unit used for the distance sort. Supported options are m, km and mi, default is m" } }, - "description": "\"The field to sort on. Pass \u003ccode\u003edocid\u003c/code\u003e for index order and \u003ccode\u003escore\u003c/code\u003e for relevance sort." + "description": "The field to sort on. Pass 'docid' for index order and 'score' for relevance sort." }, "luceneserverSpanMultiTermQuery": { "type": "object", @@ -5187,19 +5603,19 @@ "items": { "$ref": "#/definitions/luceneserverSpanQuery" }, - "description": "Clauses for a span near query." + "title": "Clauses for a span near query" }, "slop": { "type": "integer", "format": "int32", - "description": "Maximum number of positions between matching terms." + "title": "Maximum number of positions between matching terms" }, "inOrder": { "type": "boolean", - "description": "True if the matching terms must be in the same order as the query." + "title": "True if the matching terms must be in the same order as the query" } }, - "description": "A query that matches documents containing terms within a specified range." + "title": "A query that matches documents containing terms within a specified range" }, "luceneserverSpanQuery": { "type": "object", @@ -5220,58 +5636,69 @@ "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name" }, "mode": { - "$ref": "#/definitions/luceneserverMode" + "$ref": "#/definitions/luceneserverMode", + "title": "Mode to start this index: Standalone, NRT primary or replica" }, "primaryGen": { "type": "string", - "format": "int64" + "format": "int64", + "description": "Generation of this primary (should increase each time a new primary starts for this index).\nPass -1 use generation based on epoch time." }, "primaryAddress": { - "type": "string" + "type": "string", + "title": "Replica config: the IP address or host name of the remote primary" }, "port": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Replica config: the TCP port of the remote primary" }, "restore": { - "$ref": "#/definitions/luceneserverRestoreIndex" + "$ref": "#/definitions/luceneserverRestoreIndex", + "title": "Restore index from backup" }, "primaryDiscoveryFile": { "type": "string", - "title": "replica, location of discovery file containing primary host/port. Used if primaryAddress is empty. If port is specified in this request, it overrides the value in the file" + "description": "Replica config: location of discovery file containing primary host/port. Used if primaryAddress is empty.\nIf port is specified in this request, it overrides the port value in the file." } }, - "title": "Start the index" + "title": "Input to startIndex" }, "luceneserverStartIndexResponse": { "type": "object", "properties": { "maxDoc": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "One greater than the largest possible document number" }, "numDocs": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Number of documents in this index" }, "segments": { - "type": "string" + "type": "string", + "title": "String representation of the IndexReader implementation" }, "startTimeMS": { "type": "number", - "format": "double" + "format": "double", + "title": "Time taken to start the index" } - } + }, + "title": "Response from Server for startIndex" }, "luceneserverStartIndexV2Request": { "type": "object", "properties": { "indexName": { "type": "string", - "title": "index name" + "title": "Index name" } }, "title": "Start the index using IndexStartConfig configuration" @@ -5280,32 +5707,39 @@ "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name to retrieve state" } - } + }, + "title": "Input to state" }, "luceneserverStateResponse": { "type": "object", "properties": { "response": { - "type": "string" + "type": "string", + "title": "Json string of the current index state" } - } + }, + "title": "Response from Server for state" }, "luceneserverStatsRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name to retrieve stats" } - } + }, + "title": "Input to stats" }, "luceneserverStatsResponse": { "type": "object", "properties": { "ord": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Shard ordinal" }, "maxDoc": { "type": "integer", @@ -5315,116 +5749,127 @@ "numDocs": { "type": "integer", "format": "int32", - "description": "*\nThe total number of docs in this index, including\ndocs not yet flushed (still in the RAM buffer), and\nincluding deletions. NOTE: buffered deletions\nare not counted. If you really need these to be\ncounted you should call {@link IndexWriter#commit()} first." + "description": "The total number of docs in this index, including docs not yet flushed (still in the RAM buffer), and\nincluding deletions. NOTE: buffered deletions are not counted. If you really need these to be\ncounted you should call {@link IndexWriter#commit()} first." }, "dirSize": { "type": "string", - "format": "int64" + "format": "int64", + "title": "The total size of this indexDir" }, "state": { - "type": "string" + "type": "string", + "title": "The state of the index" }, "taxonomy": { - "$ref": "#/definitions/luceneserverTaxonomy" + "$ref": "#/definitions/luceneserverTaxonomy", + "title": "Taxonomy(facets) stats" }, "searchers": { "type": "array", "items": { "$ref": "#/definitions/luceneserverSearcher" - } + }, + "title": "Searcher stats" }, "currentSearcher": { - "$ref": "#/definitions/luceneserverSearcher" + "$ref": "#/definitions/luceneserverSearcher", + "title": "Current Searcher stats" } - } + }, + "title": "Response from Server for stats" }, "luceneserverStopIndexRequest": { "type": "object", "properties": { "indexName": { - "type": "string" + "type": "string", + "title": "Index name to stop" } - } + }, + "title": "Input to stopIndex" }, "luceneserverTaxonomy": { "type": "object", "properties": { "numOrds": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "Number of docs in this taxonomy reader" }, "segments": { - "type": "string" + "type": "string", + "title": "String representation of segments" } - } + }, + "title": "Taxonomy stats" }, "luceneserverTermInSetQuery": { "type": "object", "properties": { "field": { "type": "string", - "description": "Field in the document to query." + "title": "Field in the document to query" }, "textTerms": { "$ref": "#/definitions/TermInSetQueryTextTerms", - "description": "Text terms to search for." + "description": "TEXT terms to search for." }, "intTerms": { "$ref": "#/definitions/TermInSetQueryIntTerms", - "description": "Int terms to search for." + "description": "INT terms to search for." }, "longTerms": { "$ref": "#/definitions/TermInSetQueryLongTerms", - "description": "Long terms to search for." + "description": "LONG terms to search for." }, "floatTerms": { "$ref": "#/definitions/TermInSetQueryFloatTerms", - "description": "Float terms to search for." + "description": "FLOAT terms to search for." }, "doubleTerms": { "$ref": "#/definitions/TermInSetQueryDoubleTerms", - "description": "Double terms to search for." + "description": "DOUBLE terms to search for." } }, - "description": "Specialization for a disjunction over many terms that behaves like a ConstantScoreQuery over a BooleanQuery containing only BooleanClause.Occur.SHOULD clauses. Only ONE of the types of terms needs to be provided - the one that matches the type of the field." + "description": "Specialization for a disjunction over many terms that behaves like a ConstantScoreQuery over a BooleanQuery\ncontaining only BooleanClause.Occur.SHOULD clauses. Only ONE of the types of terms needs to be provided - the\none that matches the type of the field." }, "luceneserverTermQuery": { "type": "object", "properties": { "field": { "type": "string", - "description": "Field in the document to query." + "title": "Field in the document to query" }, "textValue": { "type": "string", - "description": "TEXT FieldType term to search for." + "title": "TEXT FieldType term to search for" }, "intValue": { "type": "integer", "format": "int32", - "description": "INT FieldType term to search for." + "title": "INT FieldType term to search for" }, "longValue": { "type": "string", "format": "int64", - "description": "LONG FieldType term to search for." + "title": "LONG FieldType term to search for" }, "floatValue": { "type": "number", "format": "float", - "description": "FLOAT FieldType term to search for." + "title": "FLOAT FieldType term to search for" }, "doubleValue": { "type": "number", "format": "double", - "description": "DOUBLE FieldType term to search for." + "title": "DOUBLE FieldType term to search for" }, "booleanValue": { "type": "boolean", - "description": "BOOLEAN FieldType term to search for." + "title": "BOOLEAN FieldType term to search for" } }, - "description": "A query that matches documents containing a term." + "title": "A query that matches documents containing a term" }, "luceneserverTermRangeQuery": { "type": "object", @@ -5451,12 +5896,12 @@ }, "rewrite": { "$ref": "#/definitions/luceneserverRewriteMethod", - "description": "Method used to rewrite the query." + "title": "Method used to rewrite the query" }, "rewriteTopTermsSize": { "type": "integer", "format": "int32", - "description": "Specifies the size to use for the TOP_TERMS* rewrite methods." + "title": "Specifies the size to use for the TOP_TERMS* rewrite methods" } }, "title": "Define a message for TermRangeQuery" @@ -5471,30 +5916,31 @@ "TERMS_POSITIONS_OFFSETS_PAYLOADS" ], "default": "NO_TERMVECTORS", - "description": "Whether/how term vectors should be indexed." + "description": "- NO_TERMVECTORS: No term vectors are indexed\n - TERMS: Index terms only\n - TERMS_POSITIONS: Index terms and positions\n - TERMS_POSITIONS_OFFSETS: Index terms, positions and offsets\n - TERMS_POSITIONS_OFFSETS_PAYLOADS: Index terms, positions, offsets and payloads", + "title": "Whether/how term vectors should be indexed" }, "luceneserverTermsCollector": { "type": "object", "properties": { "field": { "type": "string", - "description": "Use field values for terms." + "title": "Use field values for terms" }, "script": { "$ref": "#/definitions/luceneserverScript", - "description": "Use FacetScript definition to produce terms." + "title": "Use FacetScript definition to produce terms" }, "size": { "type": "integer", "format": "int32", - "description": "Maximum number of top terms to return." + "title": "Maximum number of top terms to return" }, "order": { "$ref": "#/definitions/luceneserverBucketOrder", - "description": "How results Buckets should be ordered, defaults to descending Bucket _count." + "title": "How results Buckets should be ordered, defaults to descending Bucket _count" } }, - "description": "Definition of term aggregating collector." + "title": "Definition of term aggregating collector" }, "luceneserverTextDocValuesType": { "type": "string", @@ -5504,7 +5950,8 @@ "TEXT_DOC_VALUES_TYPE_SORTED" ], "default": "TEXT_DOC_VALUES_TYPE_UNSPECIFIED", - "description": " - TEXT_DOC_VALUES_TYPE_BINARY: Binary docvalues support text longer than 32766 bytes and are good when most values are unique or you need to use aggregations on the field.\n - TEXT_DOC_VALUES_TYPE_SORTED: Sorted docvalues only store values shorter than 32766 bytes and are better when most values are not unique." + "description": "- TEXT_DOC_VALUES_TYPE_UNSPECIFIED: Unspecified doc values type, use field default\n - TEXT_DOC_VALUES_TYPE_BINARY: Binary doc values support text longer than 32766 bytes and are good when most values are unique or\nyou don't need to use sorting/aggregations on the field.\n - TEXT_DOC_VALUES_TYPE_SORTED: Sorted doc values only store values shorter than 32766 bytes and are better when many values are not unique.", + "title": "Type of doc values to use for storing text values" }, "luceneserverTopHitsCollector": { "type": "object", @@ -5512,30 +5959,30 @@ "startHit": { "type": "integer", "format": "int32", - "description": "Offset for retrieval of top hits." + "title": "Offset for retrieval of top hits" }, "topHits": { "type": "integer", "format": "int32", - "description": "Total hits to collect, note that the number of hits returned is (topHits - startHit)." + "title": "Total hits to collect, note that the number of hits returned is (topHits - startHit)" }, "querySort": { "$ref": "#/definitions/luceneserverQuerySortField", - "description": "When specified, collector does sort based collection. Otherwise, relevance score is used." + "title": "When specified, collector does sort based collection. Otherwise, relevance score is used" }, "retrieveFields": { "type": "array", "items": { "type": "string" }, - "description": "Which fields to retrieve." + "title": "Which fields to retrieve" }, "explain": { "type": "boolean", "title": "If Lucene explanation should be included in the collector response" } }, - "description": "Definition of top hits based collector." + "title": "Definition of top hits based collector" }, "luceneserverTotalHits": { "type": "object", @@ -5546,20 +5993,24 @@ "value": { "type": "string", "format": "int64", - "description": "* The value of the total hit count. Must be interpreted in the context of * {#relation}." + "description": "The value of the total hit count. Must be interpreted in the context of {#relation}." } - } + }, + "title": "Query total hits" }, "luceneserverTransferStatus": { "type": "object", "properties": { "Message": { - "type": "string" + "type": "string", + "title": "Response message" }, "Code": { - "$ref": "#/definitions/luceneserverTransferStatusCode" + "$ref": "#/definitions/luceneserverTransferStatusCode", + "title": "Transfer status code" } - } + }, + "title": "Response with transfer status" }, "luceneserverTransferStatusCode": { "type": "string", @@ -5569,7 +6020,8 @@ "Failed", "Ongoing" ], - "default": "Unknown" + "default": "Unknown", + "title": "Status of file copy" }, "luceneserverVectorElementType": { "type": "string", @@ -5606,7 +6058,7 @@ "quantizedConfidenceInterval": { "type": "number", "format": "float", - "title": "The confidenceInterval for scalar quantizing the vectors. When unset, it is calculated based on the vector dimension.\nWhen `0`, the quantiles are dynamically determined by sampling many confidence intervals and determining the most accurate pair.\nOtherwise, the value must be between 0.9 and 1.0 (both inclusive). default: unset" + "title": "The confidenceInterval for scalar quantizing the vectors. When unset, it is calculated based on the\nvector dimension. When `0`, the quantiles are dynamically determined by sampling many confidence intervals and\ndetermining the most accurate pair. Otherwise, the value must be between 0.9 and 1.0 (both inclusive).\ndefault: unset" }, "quantizedBits": { "type": "integer", @@ -5615,7 +6067,7 @@ }, "quantizedCompress": { "type": "boolean", - "title": "Whether to compress the vectors, if true, the vectors that are quantized with \u003c= 4 bits will be compressed into\na single byte. If false, the vectors will be stored as is. This provides a trade-off of memory usage and speed. default: false" + "title": "Whether to compress the vectors, if true, the vectors that are quantized with \u003c= 4 bits will be compressed into\na single byte. If false, the vectors will be stored as is. This provides a trade-off of memory usage and speed.\ndefault: false" } }, "title": "Options for indexing a VECTOR field for search" @@ -5624,10 +6076,12 @@ "type": "object", "properties": { "script": { - "$ref": "#/definitions/luceneserverScript" + "$ref": "#/definitions/luceneserverScript", + "title": "Script defining this field's values" }, "name": { - "type": "string" + "type": "string", + "description": "Virtual field's name. Must be different from registered fields and any other virtual fields." } }, "title": "Virtual field used during search" @@ -5636,22 +6090,24 @@ "type": "object", "properties": { "field": { - "type": "string" + "type": "string", + "title": "Field in the document to query" }, "text": { - "type": "string" + "type": "string", + "title": "Pattern to search for" }, "rewrite": { "$ref": "#/definitions/luceneserverRewriteMethod", - "description": "Method used to rewrite the query." + "title": "Method used to rewrite the query" }, "rewriteTopTermsSize": { "type": "integer", "format": "int32", - "description": "Specifies the size to use for the TOP_TERMS* rewrite methods." + "title": "Specifies the size to use for the TOP_TERMS* rewrite methods" } }, - "description": "A query that matches documents containing terms matching a pattern." + "title": "A query that matches documents containing terms matching a pattern" }, "protobufAny": { "type": "object", diff --git a/grpc-gateway/search.pb.go b/grpc-gateway/search.pb.go index cea29b81a..f4d00fe9e 100644 --- a/grpc-gateway/search.pb.go +++ b/grpc-gateway/search.pb.go @@ -26,11 +26,14 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Type of match operator used in MatchQuery type MatchOperator int32 const ( + // Or operation MatchOperator_SHOULD MatchOperator = 0 - MatchOperator_MUST MatchOperator = 1 + // And operation + MatchOperator_MUST MatchOperator = 1 ) // Enum value maps for MatchOperator. @@ -76,17 +79,27 @@ func (MatchOperator) EnumDescriptor() ([]byte, []int) { type RewriteMethod int32 const ( - // Uses the CONSTANT_SCORE_BOOLEAN method for fewer matching terms. Otherwise, this method finds all matching terms in sequence and returns matching documents using a bit set. + // Uses the CONSTANT_SCORE_BOOLEAN method for fewer matching terms. Otherwise, this method finds all matching + // terms in sequence and returns matching documents using a bit set. RewriteMethod_CONSTANT_SCORE RewriteMethod = 0 - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. RewriteMethod_CONSTANT_SCORE_BOOLEAN RewriteMethod = 1 - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates the relevance score for each matching document. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. Calculates the relevance score for each matching document. RewriteMethod_SCORING_BOOLEAN RewriteMethod = 2 - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates a relevance score for each matching document as if all terms had the same frequency, the maximum frequency of all matching terms. The final BooleanQuery query only includes Term queries for the top N (specified separately) scoring terms. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. Calculates a relevance score for each matching document as if all terms had the same frequency, + // the maximum frequency of all matching terms. The final BooleanQuery query only includes Term queries for + // the top N (specified separately) scoring terms. RewriteMethod_TOP_TERMS_BLENDED_FREQS RewriteMethod = 3 - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Assigns each matching document a relevance score equal to the boost parameter. The final BooleanQuery query only includes Term queries for the top N (specified separately) terms. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. Assigns each matching document a relevance score equal to the boost parameter. The final + // BooleanQuery query only includes Term queries for the top N (specified separately) terms. RewriteMethod_TOP_TERMS_BOOST RewriteMethod = 4 - // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each matching term. Calculates a relevance score for each matching document. The final BooleanQuery query only includes Term queries for the top N (specified separately) scoring terms. + // This method changes the original query to a BooleanQuery, containing a SHOULD clause and TermQuery for each + // matching term. Calculates a relevance score for each matching document. The final BooleanQuery query only + // includes Term queries for the top N (specified separately) scoring terms. RewriteMethod_TOP_TERMS RewriteMethod = 5 ) @@ -137,6 +150,7 @@ func (RewriteMethod) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{1} } +// Type of completion query type CompletionQueryType int32 const ( @@ -189,21 +203,21 @@ func (CompletionQueryType) EnumDescriptor() ([]byte, []int) { type RegexpFlag int32 const ( - // Syntax flag, enables all optional regexp syntax. + // Syntax flag, enables all optional regexp syntax RegexpFlag_REGEXP_ALL RegexpFlag = 0 - // Syntax flag, enables anystring (@). + // Syntax flag, enables anystring (@) RegexpFlag_REGEXP_ANYSTRING RegexpFlag = 1 - // Syntax flag, enables named automata (). + // Syntax flag, enables named automata () RegexpFlag_REGEXP_AUTOMATON RegexpFlag = 2 - // Syntax flag, enables complement (~). + // Syntax flag, enables complement (~) RegexpFlag_REGEXP_COMPLEMENT RegexpFlag = 3 - // Syntax flag, enables empty language (#). + // Syntax flag, enables empty language (#) RegexpFlag_REGEXP_EMPTY RegexpFlag = 4 - // Syntax flag, enables intersection (&). + // Syntax flag, enables intersection (&) RegexpFlag_REGEXP_INTERSECTION RegexpFlag = 5 - // Syntax flag, enables numerical intervals ( ). + // Syntax flag, enables numerical intervals () RegexpFlag_REGEXP_INTERVAL RegexpFlag = 6 - // Syntax flag, enables no optional regexp syntax. + // Syntax flag, enables no optional regexp syntax RegexpFlag_REGEXP_NONE RegexpFlag = 7 ) @@ -258,7 +272,7 @@ func (RegexpFlag) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{3} } -// Defines different types of QueryNodes. +// Deprecated: Defines different types of QueryNodes type QueryType int32 const ( @@ -372,10 +386,14 @@ func (QueryType) EnumDescriptor() ([]byte, []int) { type Selector int32 const ( - Selector_MIN Selector = 0 // Minimum value - Selector_MAX Selector = 1 // Maximum value - Selector_MIDDLE_MIN Selector = 2 // Middle value of the set; if there are an even number of values, the lower of the middle two is chosen - Selector_MIDDLE_MAX Selector = 3 // Middle value of the set; if there are an even number of values, the upper of the middle two is chosen + // Minimum value + Selector_MIN Selector = 0 + // Maximum value + Selector_MAX Selector = 1 + // Middle value of the set; if there are an even number of values, the lower of the middle two is chosen + Selector_MIDDLE_MIN Selector = 2 + // Middle value of the set; if there are an even number of values, the upper of the middle two is chosen + Selector_MIDDLE_MAX Selector = 3 ) // Enum value maps for Selector. @@ -474,6 +492,7 @@ func (BooleanClause_Occur) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{0, 0} } +// How child documents score affects final score type NestedQuery_ScoreMode int32 const ( @@ -578,15 +597,15 @@ func (MatchPhraseQuery_ZeroTerms) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{13, 0} } -// Type defining the execution behavior of the match. +// Type defining the execution behavior of the match type MultiMatchQuery_MatchType int32 const ( - // Finds documents which match any field, but uses the _score from the best field. + // Finds documents which match any field, but uses the _score from the best field MultiMatchQuery_BEST_FIELDS MultiMatchQuery_MatchType = 0 - // Runs a MatchPhrasePrefixQuery query on each field and uses the _score from the best field. + // Runs a MatchPhrasePrefixQuery query on each field and uses the _score from the best field MultiMatchQuery_PHRASE_PREFIX MultiMatchQuery_MatchType = 1 - // Finds documents that match across multiple fields, as if they were a single field. + // Finds documents that match across multiple fields, as if they were a single field MultiMatchQuery_CROSS_FIELDS MultiMatchQuery_MatchType = 2 ) @@ -631,6 +650,7 @@ func (MultiMatchQuery_MatchType) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{15, 0} } +// Decay function types type MultiFunctionScoreQuery_DecayType int32 const ( @@ -785,7 +805,7 @@ func (MultiFunctionScoreQuery_BoostMode) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{24, 2} } -// null parameter value +// Null parameter value type Script_ParamNullValue int32 const ( @@ -829,13 +849,13 @@ func (Script_ParamNullValue) EnumDescriptor() ([]byte, []int) { return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{39, 0} } -// * How the {TotalHits#value} should be interpreted. +// How the {TotalHits#value} should be interpreted type TotalHits_Relation int32 const ( - // The total hit count is equal to {@link TotalHits#value}. + // The total hit count is equal to {@link TotalHits#value} TotalHits_EQUAL_TO TotalHits_Relation = 0 - // The total hit count is greater than or equal to {@link TotalHits#value}. + // The total hit count is greater than or equal to {@link TotalHits#value} TotalHits_GREATER_THAN_OR_EQUAL_TO TotalHits_Relation = 1 ) @@ -928,7 +948,8 @@ func (BucketOrder_OrderType) EnumDescriptor() ([]byte, []int) { type Highlight_Type int32 const ( - // When DEFAULT is set in global setting, use fast vector highlighter; when set for field setting, use the type from the global setting. + // When DEFAULT is set in global setting, use fast vector highlighter; when set for field setting, + // use the type from the global setting. Highlight_DEFAULT Highlight_Type = 0 Highlight_FAST_VECTOR Highlight_Type = 1 // not supported yet @@ -985,8 +1006,10 @@ type BooleanClause struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Query *Query `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` // The Query for the clause. - Occur BooleanClause_Occur `protobuf:"varint,2,opt,name=occur,proto3,enum=luceneserver.BooleanClause_Occur" json:"occur,omitempty"` // Specifies how this clause must occur in a matching document. SHOULD by default. + // The Query for the clause + Query *Query `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + // Specifies how this clause must occur in a matching document. SHOULD by default. + Occur BooleanClause_Occur `protobuf:"varint,2,opt,name=occur,proto3,enum=luceneserver.BooleanClause_Occur" json:"occur,omitempty"` } func (x *BooleanClause) Reset() { @@ -1035,16 +1058,25 @@ func (x *BooleanClause) GetOccur() BooleanClause_Occur { return BooleanClause_SHOULD } +// Parameters for fuzzy queries type FuzzyParams struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MaxEdits int32 `protobuf:"varint,1,opt,name=maxEdits,proto3" json:"maxEdits,omitempty"` // The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. Either set this or auto. - PrefixLength int32 `protobuf:"varint,2,opt,name=prefixLength,proto3" json:"prefixLength,omitempty"` // Length of common (non-fuzzy) prefix - MaxExpansions int32 `protobuf:"varint,3,opt,name=maxExpansions,proto3" json:"maxExpansions,omitempty"` // The maximum number of terms to match. - Transpositions bool `protobuf:"varint,4,opt,name=transpositions,proto3" json:"transpositions,omitempty"` // True if transpositions should be treated as a primitive edit operation. If this is false, comparisons will implement the classic Levenshtein algorithm. Default is true. - Auto *FuzzyParams_AutoFuzziness `protobuf:"bytes,5,opt,name=auto,proto3" json:"auto,omitempty"` // Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting. Either set this or maxEdits. + // The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. + // Either set this or auto. + MaxEdits int32 `protobuf:"varint,1,opt,name=maxEdits,proto3" json:"maxEdits,omitempty"` + // Length of common (non-fuzzy) prefix + PrefixLength int32 `protobuf:"varint,2,opt,name=prefixLength,proto3" json:"prefixLength,omitempty"` + // The maximum number of terms to match + MaxExpansions int32 `protobuf:"varint,3,opt,name=maxExpansions,proto3" json:"maxExpansions,omitempty"` + // True if transpositions should be treated as a primitive edit operation. If this is false, comparisons + // will implement the classic Levenshtein algorithm. Default is true. + Transpositions bool `protobuf:"varint,4,opt,name=transpositions,proto3" json:"transpositions,omitempty"` + // Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting. + // Either set this or maxEdits. + Auto *FuzzyParams_AutoFuzziness `protobuf:"bytes,5,opt,name=auto,proto3" json:"auto,omitempty"` } func (x *FuzzyParams) Reset() { @@ -1114,14 +1146,16 @@ func (x *FuzzyParams) GetAuto() *FuzzyParams_AutoFuzziness { return nil } -// A query that matches documents using boolean combinations of other queries. +// A query that matches documents using boolean combinations of other queries type BooleanQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Clauses []*BooleanClause `protobuf:"bytes,1,rep,name=clauses,proto3" json:"clauses,omitempty"` // Clauses for a boolean query. - MinimumNumberShouldMatch int32 `protobuf:"varint,2,opt,name=minimumNumberShouldMatch,proto3" json:"minimumNumberShouldMatch,omitempty"` // Minimum number of optional clauses that must match. + // Clauses for a boolean query + Clauses []*BooleanClause `protobuf:"bytes,1,rep,name=clauses,proto3" json:"clauses,omitempty"` + // Minimum number of optional clauses that must match + MinimumNumberShouldMatch int32 `protobuf:"varint,2,opt,name=minimumNumberShouldMatch,proto3" json:"minimumNumberShouldMatch,omitempty"` } func (x *BooleanQuery) Reset() { @@ -1170,17 +1204,19 @@ func (x *BooleanQuery) GetMinimumNumberShouldMatch() int32 { return 0 } -// A Query that matches documents containing a particular sequence of terms. +// A Query that matches documents containing a particular sequence of terms type PhraseQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Edit distance between respective positions of terms as defined in this PhraseQuery and the positions - // of terms in a document. - Slop int32 `protobuf:"varint,1,opt,name=slop,proto3" json:"slop,omitempty"` - Field string `protobuf:"bytes,2,opt,name=field,proto3" json:"field,omitempty"` // The field in the index that this query applies to. - Terms []string `protobuf:"bytes,3,rep,name=terms,proto3" json:"terms,omitempty"` // Terms to match. + // of terms in a document + Slop int32 `protobuf:"varint,1,opt,name=slop,proto3" json:"slop,omitempty"` + // Field in the document to query + Field string `protobuf:"bytes,2,opt,name=field,proto3" json:"field,omitempty"` + // Terms to match + Terms []string `protobuf:"bytes,3,rep,name=terms,proto3" json:"terms,omitempty"` } func (x *PhraseQuery) Reset() { @@ -1236,19 +1272,19 @@ func (x *PhraseQuery) GetTerms() []string { return nil } -// A query that matches documents that contain a specific prefix in a provided field. +// A query that matches documents that contain a specific prefix in a provided field type PrefixQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Document field name. + // Document field name Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` - // Prefix to search for. + // Prefix to search for Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` - // Method used to rewrite the query. + // Method used to rewrite the query Rewrite RewriteMethod `protobuf:"varint,3,opt,name=rewrite,proto3,enum=luceneserver.RewriteMethod" json:"rewrite,omitempty"` - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods RewriteTopTermsSize int32 `protobuf:"varint,4,opt,name=rewriteTopTermsSize,proto3" json:"rewriteTopTermsSize,omitempty"` } @@ -1328,9 +1364,9 @@ type TermRangeQuery struct { IncludeLower bool `protobuf:"varint,4,opt,name=include_lower,json=includeLower,proto3" json:"include_lower,omitempty"` // Whether to include the upper bound in the range IncludeUpper bool `protobuf:"varint,5,opt,name=include_upper,json=includeUpper,proto3" json:"include_upper,omitempty"` - // Method used to rewrite the query. + // Method used to rewrite the query Rewrite RewriteMethod `protobuf:"varint,6,opt,name=rewrite,proto3,enum=luceneserver.RewriteMethod" json:"rewrite,omitempty"` - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods RewriteTopTermsSize int32 `protobuf:"varint,7,opt,name=rewriteTopTermsSize,proto3" json:"rewriteTopTermsSize,omitempty"` } @@ -1415,14 +1451,16 @@ func (x *TermRangeQuery) GetRewriteTopTermsSize() int32 { return 0 } -// A query that wraps another query and uses custom scoring logic to compute the wrapped query's score. +// A query that wraps another query and uses custom scoring logic to compute the wrapped query's score type FunctionScoreQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Query *Query `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` // Input query - Script *Script `protobuf:"bytes,2,opt,name=script,proto3" json:"script,omitempty"` // script definition to compute a custom document score + // Input query + Query *Query `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + // Script definition to compute a custom document score + Script *Script `protobuf:"bytes,2,opt,name=script,proto3" json:"script,omitempty"` } func (x *FunctionScoreQuery) Reset() { @@ -1477,7 +1515,8 @@ type FunctionFilterQuery struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Script *Script `protobuf:"bytes,1,opt,name=script,proto3" json:"script,omitempty"` // script definition to compute a custom document score + // Script definition to compute a custom document score + Script *Script `protobuf:"bytes,1,opt,name=script,proto3" json:"script,omitempty"` } func (x *FunctionFilterQuery) Reset() { @@ -1519,14 +1558,18 @@ func (x *FunctionFilterQuery) GetScript() *Script { return nil } +// Query that matches nested documents type NestedQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Query *Query `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` // query for the child documents - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // field name of the nested - ScoreMode NestedQuery_ScoreMode `protobuf:"varint,3,opt,name=scoreMode,proto3,enum=luceneserver.NestedQuery_ScoreMode" json:"scoreMode,omitempty"` // how child documents score affects final score + // Query for the child documents + Query *Query `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + // Path to the child document + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + // How child documents score affects final score + ScoreMode NestedQuery_ScoreMode `protobuf:"varint,3,opt,name=scoreMode,proto3,enum=luceneserver.NestedQuery_ScoreMode" json:"scoreMode,omitempty"` } func (x *NestedQuery) Reset() { @@ -1582,13 +1625,13 @@ func (x *NestedQuery) GetScoreMode() NestedQuery_ScoreMode { return NestedQuery_NONE } -// A query that matches documents containing a term. +// A query that matches documents containing a term type TermQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Field in the document to query. + // Field in the document to query Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Types that are assignable to TermTypes: // @@ -1694,32 +1737,32 @@ type isTermQuery_TermTypes interface { } type TermQuery_TextValue struct { - // TEXT FieldType term to search for. + // TEXT FieldType term to search for TextValue string `protobuf:"bytes,2,opt,name=textValue,proto3,oneof"` } type TermQuery_IntValue struct { - // INT FieldType term to search for. + // INT FieldType term to search for IntValue int32 `protobuf:"varint,3,opt,name=intValue,proto3,oneof"` } type TermQuery_LongValue struct { - // LONG FieldType term to search for. + // LONG FieldType term to search for LongValue int64 `protobuf:"varint,4,opt,name=longValue,proto3,oneof"` } type TermQuery_FloatValue struct { - // FLOAT FieldType term to search for. + // FLOAT FieldType term to search for FloatValue float32 `protobuf:"fixed32,5,opt,name=floatValue,proto3,oneof"` } type TermQuery_DoubleValue struct { - // DOUBLE FieldType term to search for. + // DOUBLE FieldType term to search for DoubleValue float64 `protobuf:"fixed64,6,opt,name=doubleValue,proto3,oneof"` } type TermQuery_BooleanValue struct { - // BOOLEAN FieldType term to search for. + // BOOLEAN FieldType term to search for BooleanValue bool `protobuf:"varint,7,opt,name=booleanValue,proto3,oneof"` } @@ -1735,13 +1778,15 @@ func (*TermQuery_DoubleValue) isTermQuery_TermTypes() {} func (*TermQuery_BooleanValue) isTermQuery_TermTypes() {} -// Specialization for a disjunction over many terms that behaves like a ConstantScoreQuery over a BooleanQuery containing only BooleanClause.Occur.SHOULD clauses. Only ONE of the types of terms needs to be provided - the one that matches the type of the field. +// Specialization for a disjunction over many terms that behaves like a ConstantScoreQuery over a BooleanQuery +// containing only BooleanClause.Occur.SHOULD clauses. Only ONE of the types of terms needs to be provided - the +// one that matches the type of the field. type TermInSetQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Field in the document to query. + // Field in the document to query Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Types that are assignable to TermTypes: // @@ -1839,27 +1884,27 @@ type isTermInSetQuery_TermTypes interface { } type TermInSetQuery_TextTerms_ struct { - // Text terms to search for. + // TEXT terms to search for. TextTerms *TermInSetQuery_TextTerms `protobuf:"bytes,2,opt,name=textTerms,proto3,oneof"` } type TermInSetQuery_IntTerms_ struct { - // Int terms to search for. + // INT terms to search for. IntTerms *TermInSetQuery_IntTerms `protobuf:"bytes,3,opt,name=intTerms,proto3,oneof"` } type TermInSetQuery_LongTerms_ struct { - // Long terms to search for. + // LONG terms to search for. LongTerms *TermInSetQuery_LongTerms `protobuf:"bytes,4,opt,name=longTerms,proto3,oneof"` } type TermInSetQuery_FloatTerms_ struct { - // Float terms to search for. + // FLOAT terms to search for. FloatTerms *TermInSetQuery_FloatTerms `protobuf:"bytes,5,opt,name=floatTerms,proto3,oneof"` } type TermInSetQuery_DoubleTerms_ struct { - // Double terms to search for. + // DOUBLE terms to search for. DoubleTerms *TermInSetQuery_DoubleTerms `protobuf:"bytes,6,opt,name=doubleTerms,proto3,oneof"` } @@ -1874,14 +1919,18 @@ func (*TermInSetQuery_FloatTerms_) isTermInSetQuery_TermTypes() {} func (*TermInSetQuery_DoubleTerms_) isTermInSetQuery_TermTypes() {} // A query that generates the union of documents produced by its subqueries, and that scores each document with the -// maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. +// maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional +// matching subqueries. type DisjunctionMaxQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Disjuncts []*Query `protobuf:"bytes,1,rep,name=disjuncts,proto3" json:"disjuncts,omitempty"` // A list of all the disjuncts to add - TieBreakerMultiplier float32 `protobuf:"fixed32,2,opt,name=tieBreakerMultiplier,proto3" json:"tieBreakerMultiplier,omitempty"` // The score of each non-maximum disjunct for a document is multiplied by this weight and added into the final score. + // A list of all the disjuncts to add + Disjuncts []*Query `protobuf:"bytes,1,rep,name=disjuncts,proto3" json:"disjuncts,omitempty"` + // The score of each non-maximum disjunct for a document is multiplied by this weight and added into the + // final score + TieBreakerMultiplier float32 `protobuf:"fixed32,2,opt,name=tieBreakerMultiplier,proto3" json:"tieBreakerMultiplier,omitempty"` } func (x *DisjunctionMaxQuery) Reset() { @@ -1930,18 +1979,26 @@ func (x *DisjunctionMaxQuery) GetTieBreakerMultiplier() float32 { return 0 } -// A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are combined using term queries in boolean clauses. +// A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are +// combined using term queries in boolean clauses. type MatchQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Field in the document to query. - Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` // The text to query with. - Operator MatchOperator `protobuf:"varint,3,opt,name=operator,proto3,enum=luceneserver.MatchOperator" json:"operator,omitempty"` // Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST. - MinimumNumberShouldMatch int32 `protobuf:"varint,4,opt,name=minimumNumberShouldMatch,proto3" json:"minimumNumberShouldMatch,omitempty"` // Minimum number of optional clauses that must match. - Analyzer *Analyzer `protobuf:"bytes,5,opt,name=analyzer,proto3" json:"analyzer,omitempty"` // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead. - FuzzyParams *FuzzyParams `protobuf:"bytes,6,opt,name=fuzzyParams,proto3" json:"fuzzyParams,omitempty"` // Parameters to set the fuzziness of the query + // Field in the document to query + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + // The text to query with + Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` + // Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST. + Operator MatchOperator `protobuf:"varint,3,opt,name=operator,proto3,enum=luceneserver.MatchOperator" json:"operator,omitempty"` + // Minimum number of optional clauses that must match + MinimumNumberShouldMatch int32 `protobuf:"varint,4,opt,name=minimumNumberShouldMatch,proto3" json:"minimumNumberShouldMatch,omitempty"` + // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be + // used instead. + Analyzer *Analyzer `protobuf:"bytes,5,opt,name=analyzer,proto3" json:"analyzer,omitempty"` + // Parameters to set the fuzziness of the query + FuzzyParams *FuzzyParams `protobuf:"bytes,6,opt,name=fuzzyParams,proto3" json:"fuzzyParams,omitempty"` } func (x *MatchQuery) Reset() { @@ -2018,17 +2075,26 @@ func (x *MatchQuery) GetFuzzyParams() *FuzzyParams { return nil } -// A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are combined into a PhraseQuery. +// A query that analyzes the text before finding matching documents. The tokens resulting from the analysis are +// combined into a PhraseQuery. type MatchPhraseQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Field in the document to query. - Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` // The text to query with. - Slop int32 `protobuf:"varint,3,opt,name=slop,proto3" json:"slop,omitempty"` // Edit distance between respective positions of tokens generated by analyzing this query and the positions of terms in a document. - Analyzer *Analyzer `protobuf:"bytes,4,opt,name=analyzer,proto3" json:"analyzer,omitempty"` // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead. - ZeroTermsQuery MatchPhraseQuery_ZeroTerms `protobuf:"varint,5,opt,name=zeroTermsQuery,proto3,enum=luceneserver.MatchPhraseQuery_ZeroTerms" json:"zeroTermsQuery,omitempty"` // Indicates whether none or all documents are returned if the analyzer removes all tokens. Valid values are NONE_ZERO_TERMS and ALL_ZERO_TERMS. + // Field in the document to query + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + // The text to query with + Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` + // Edit distance between respective positions of tokens generated by analyzing this query and the positions of + // terms in a document + Slop int32 `protobuf:"varint,3,opt,name=slop,proto3" json:"slop,omitempty"` + // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be + // used instead. + Analyzer *Analyzer `protobuf:"bytes,4,opt,name=analyzer,proto3" json:"analyzer,omitempty"` + // Indicates whether none or all documents are returned if the analyzer removes all tokens. Valid values + // are NONE_ZERO_TERMS and ALL_ZERO_TERMS. + ZeroTermsQuery MatchPhraseQuery_ZeroTerms `protobuf:"varint,5,opt,name=zeroTermsQuery,proto3,enum=luceneserver.MatchPhraseQuery_ZeroTerms" json:"zeroTermsQuery,omitempty"` } func (x *MatchPhraseQuery) Reset() { @@ -2098,19 +2164,22 @@ func (x *MatchPhraseQuery) GetZeroTermsQuery() MatchPhraseQuery_ZeroTerms { return MatchPhraseQuery_NONE_ZERO_TERMS } -// A query that matches documents containing terms in the same order as those in the analyzed query string. The final analyzed token is treated as a prefix +// A query that matches documents containing terms in the same order as those in the analyzed query string. +// The final analyzed token is treated as a prefix type MatchPhrasePrefixQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Field in the document to query. + // Field in the document to query Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` - // The text to query with. + // The text to query with Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` - // Edit distance between respective positions of tokens generated by analyzing this query and the positions of terms in a document. + // Edit distance between respective positions of tokens generated by analyzing this query and the positions + // of terms in a document Slop int32 `protobuf:"varint,3,opt,name=slop,proto3" json:"slop,omitempty"` - // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead. + // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would + // be used instead. Analyzer *Analyzer `protobuf:"bytes,4,opt,name=analyzer,proto3" json:"analyzer,omitempty"` // Maximum number of terms to which the last provided term of the query value will expand. Defaults to 50. MaxExpansions int32 `protobuf:"varint,5,opt,name=max_expansions,json=maxExpansions,proto3" json:"max_expansions,omitempty"` @@ -2183,23 +2252,35 @@ func (x *MatchPhrasePrefixQuery) GetMaxExpansions() int32 { return 0 } -// A query that creates a match query for each field provided and wraps all the match queries in a disjunction max query. +// A query that creates a match query for each field provided and wraps all the match queries in a +// disjunction max query. type MultiMatchQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Fields []string `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty"` // Fields in the document to query. - Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` // The text to query with. - FieldBoosts map[string]float32 `protobuf:"bytes,3,rep,name=fieldBoosts,proto3" json:"fieldBoosts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"` // Boosts for each field, if any. - Operator MatchOperator `protobuf:"varint,4,opt,name=operator,proto3,enum=luceneserver.MatchOperator" json:"operator,omitempty"` // Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST. - MinimumNumberShouldMatch int32 `protobuf:"varint,5,opt,name=minimumNumberShouldMatch,proto3" json:"minimumNumberShouldMatch,omitempty"` // Minimum number of optional clauses that must match. - Analyzer *Analyzer `protobuf:"bytes,6,opt,name=analyzer,proto3" json:"analyzer,omitempty"` // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would be used instead. - FuzzyParams *FuzzyParams `protobuf:"bytes,7,opt,name=fuzzyParams,proto3" json:"fuzzyParams,omitempty"` // Parameters to set the fuzziness of the query - TieBreakerMultiplier float32 `protobuf:"fixed32,8,opt,name=tieBreakerMultiplier,proto3" json:"tieBreakerMultiplier,omitempty"` // The score of each non-maximum match query disjunct for a document will be multiplied by this weight and added into the final score. - // Type defining match behavior of query. + // Fields in the document to query + Fields []string `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty"` + // The text to query with + Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` + // Boosts for each field, if any + FieldBoosts map[string]float32 `protobuf:"bytes,3,rep,name=fieldBoosts,proto3" json:"fieldBoosts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"` + // Boolean logic used to interpret text in the query. The possible values are SHOULD (default) and MUST. + Operator MatchOperator `protobuf:"varint,4,opt,name=operator,proto3,enum=luceneserver.MatchOperator" json:"operator,omitempty"` + // Minimum number of optional clauses that must match + MinimumNumberShouldMatch int32 `protobuf:"varint,5,opt,name=minimumNumberShouldMatch,proto3" json:"minimumNumberShouldMatch,omitempty"` + // Analyzer used to analyze the query. If not provided, the default search analyzer for the field would + // be used instead. + Analyzer *Analyzer `protobuf:"bytes,6,opt,name=analyzer,proto3" json:"analyzer,omitempty"` + // Parameters to set the fuzziness of the query + FuzzyParams *FuzzyParams `protobuf:"bytes,7,opt,name=fuzzyParams,proto3" json:"fuzzyParams,omitempty"` + // The score of each non-maximum match query disjunct for a document will be multiplied by this weight + // and added into the final score + TieBreakerMultiplier float32 `protobuf:"fixed32,8,opt,name=tieBreakerMultiplier,proto3" json:"tieBreakerMultiplier,omitempty"` + // Type defining match behavior of query Type MultiMatchQuery_MatchType `protobuf:"varint,9,opt,name=type,proto3,enum=luceneserver.MultiMatchQuery_MatchType" json:"type,omitempty"` - // Edit distance between respective positions of tokens generated by analyzing this query and the positions of terms in a document, applies to PHRASE_PREFIX type matching. + // Edit distance between respective positions of tokens generated by analyzing this query and the positions + // of terms in a document, applies to PHRASE_PREFIX type matching Slop int32 `protobuf:"varint,10,opt,name=slop,proto3" json:"slop,omitempty"` // Maximum number of terms to which the prefix token will expand when using PHRASE_PREFIX matching. Defaults to 50. MaxExpansions int32 `protobuf:"varint,11,opt,name=maxExpansions,proto3" json:"maxExpansions,omitempty"` @@ -2314,17 +2395,24 @@ func (x *MultiMatchQuery) GetMaxExpansions() int32 { return 0 } -// A query that matches documents with values within the specified range. The lower and upper values though provided as strings will be converted to the type of the field. This works with INT, LONG, FLOAT, DOUBLE and DATE_TIME field types. +// A query that matches documents with values within the specified range. The lower and upper values though provided +// as strings will be converted to the type of the field. This works with INT, LONG, FLOAT, DOUBLE and DATE_TIME +// field types. type RangeQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Field in the document to query - Lower string `protobuf:"bytes,2,opt,name=lower,proto3" json:"lower,omitempty"` // Lower bound, inclusive by default - Upper string `protobuf:"bytes,3,opt,name=upper,proto3" json:"upper,omitempty"` // Upper bound, inclusive by default - LowerExclusive bool `protobuf:"varint,4,opt,name=lowerExclusive,proto3" json:"lowerExclusive,omitempty"` // Set true to make lower bound exclusive - UpperExclusive bool `protobuf:"varint,5,opt,name=upperExclusive,proto3" json:"upperExclusive,omitempty"` // Set true to make upper bound exclusive + // Field in the document to query + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + // Lower bound, inclusive by default + Lower string `protobuf:"bytes,2,opt,name=lower,proto3" json:"lower,omitempty"` + // Upper bound, inclusive by default + Upper string `protobuf:"bytes,3,opt,name=upper,proto3" json:"upper,omitempty"` + // Set true to make lower bound exclusive + LowerExclusive bool `protobuf:"varint,4,opt,name=lowerExclusive,proto3" json:"lowerExclusive,omitempty"` + // Set true to make upper bound exclusive + UpperExclusive bool `protobuf:"varint,5,opt,name=upperExclusive,proto3" json:"upperExclusive,omitempty"` } func (x *RangeQuery) Reset() { @@ -2394,15 +2482,18 @@ func (x *RangeQuery) GetUpperExclusive() bool { return false } -// A query that matches documents with geopoint within the geo box. +// A query that matches documents with geopoint within the geo box type GeoBoundingBoxQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Field in the document to query - TopLeft *latlng.LatLng `protobuf:"bytes,2,opt,name=topLeft,proto3" json:"topLeft,omitempty"` // top left corner of the geo box - BottomRight *latlng.LatLng `protobuf:"bytes,3,opt,name=bottomRight,proto3" json:"bottomRight,omitempty"` // bottom right corner of the geo box + // Field in the document to query + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + // Top left corner of the geo box + TopLeft *latlng.LatLng `protobuf:"bytes,2,opt,name=topLeft,proto3" json:"topLeft,omitempty"` + // Bottom right corner of the geo box + BottomRight *latlng.LatLng `protobuf:"bytes,3,opt,name=bottomRight,proto3" json:"bottomRight,omitempty"` } func (x *GeoBoundingBoxQuery) Reset() { @@ -2464,9 +2555,12 @@ type GeoRadiusQuery struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Field in the document to query - Center *latlng.LatLng `protobuf:"bytes,2,opt,name=center,proto3" json:"center,omitempty"` // target center geo point to calculate distance - Radius string `protobuf:"bytes,3,opt,name=radius,proto3" json:"radius,omitempty"` // distance radius like "12 km". supports m, km and mi, default to m + // Field in the document to query + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + // Target center geo point to calculate distance + Center *latlng.LatLng `protobuf:"bytes,2,opt,name=center,proto3" json:"center,omitempty"` + // Distance radius like "12 km". supports m, km and mi, default to m + Radius string `protobuf:"bytes,3,opt,name=radius,proto3" json:"radius,omitempty"` } func (x *GeoRadiusQuery) Reset() { @@ -2522,14 +2616,16 @@ func (x *GeoRadiusQuery) GetRadius() string { return "" } -// A query that matches documents with polygon that contains the geo point. +// A query that matches documents with polygon that contains the geo point type GeoPointQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Field in the document to query - Point *latlng.LatLng `protobuf:"bytes,2,opt,name=point,proto3" json:"point,omitempty"` // point used to query whether the polygon contains it. + // Field in the document to query + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + // Point to check if the polygon contains + Point *latlng.LatLng `protobuf:"bytes,2,opt,name=point,proto3" json:"point,omitempty"` } func (x *GeoPointQuery) Reset() { @@ -2584,7 +2680,9 @@ type Polygon struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be self-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian. Instead, use two polygons: one on each side. + // Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be + // self-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian. + // Instead, use two polygons: one on each side. Points []*latlng.LatLng `protobuf:"bytes,1,rep,name=points,proto3" json:"points,omitempty"` // Specify holes in the polygon. Hole polygons cannot themselves contain holes. Holes []*Polygon `protobuf:"bytes,2,rep,name=holes,proto3" json:"holes,omitempty"` @@ -2694,13 +2792,14 @@ func (x *GeoPolygonQuery) GetPolygons() []*Polygon { return nil } -// A query that matches documents which contain a value for a field. +// A query that matches documents which contain a value for a field type ExistsQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` // Field in the document to query + // Field in the document to query + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` } func (x *ExistsQuery) Reset() { @@ -2834,7 +2933,7 @@ type MultiFunctionScoreQuery struct { BoostMode MultiFunctionScoreQuery_BoostMode `protobuf:"varint,4,opt,name=boost_mode,json=boostMode,proto3,enum=luceneserver.MultiFunctionScoreQuery_BoostMode" json:"boost_mode,omitempty"` // Optional minimal score to match a document. By default, it's 0. MinScore float32 `protobuf:"fixed32,5,opt,name=min_score,json=minScore,proto3" json:"min_score,omitempty"` - // Determine minimal score is excluded or not. By default, it's false; + // Determine minimal score is excluded or not. By default, it's false. MinExcluded bool `protobuf:"varint,6,opt,name=min_excluded,json=minExcluded,proto3" json:"min_excluded,omitempty"` } @@ -2912,7 +3011,7 @@ func (x *MultiFunctionScoreQuery) GetMinExcluded() bool { return false } -// Query that produces a score of 1.0 (modifiable by query boost value) for documents that match the filter query. +// Query that produces a score of 1.0 (modifiable by query boost value) for documents that match the filter query type ConstantScoreQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3057,17 +3156,19 @@ func (*SpanQuery_SpanNearQuery) isSpanQuery_Query() {} func (*SpanQuery_SpanMultiTermQuery) isSpanQuery_Query() {} -// A query that matches documents containing terms matching a pattern. +// A query that matches documents containing terms matching a pattern type WildcardQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Field in the document to query Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` - // Method used to rewrite the query. + // Pattern to search for + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + // Method used to rewrite the query Rewrite RewriteMethod `protobuf:"varint,3,opt,name=rewrite,proto3,enum=luceneserver.RewriteMethod" json:"rewrite,omitempty"` - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods RewriteTopTermsSize int32 `protobuf:"varint,4,opt,name=rewriteTopTermsSize,proto3" json:"rewriteTopTermsSize,omitempty"` } @@ -3131,27 +3232,33 @@ func (x *WildcardQuery) GetRewriteTopTermsSize() int32 { return 0 } -// A query that matches documents containing terms similar to the specified term. +// A query that matches documents containing terms similar to the specified term type FuzzyQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Field in the document to query Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` - // The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. Either set this or auto. Default is 2. + // Term to search for + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + // The maximum allowed Levenshtein Edit Distance (or number of edits). Possible values are 0, 1 and 2. + // Either set this or auto. Default is 2. MaxEdits *int32 `protobuf:"varint,3,opt,name=maxEdits,proto3,oneof" json:"maxEdits,omitempty"` // Length of common (non-fuzzy) prefix. Default is 0. PrefixLength *int32 `protobuf:"varint,4,opt,name=prefixLength,proto3,oneof" json:"prefixLength,omitempty"` // The maximum number of terms to match. Default is 50. MaxExpansions *int32 `protobuf:"varint,5,opt,name=maxExpansions,proto3,oneof" json:"maxExpansions,omitempty"` - // True if transpositions should be treated as a primitive edit operation. If this is false, comparisons will implement the classic Levenshtein algorithm. Default is true. + // True if transpositions should be treated as a primitive edit operation. If this is false, comparisons will + // implement the classic Levenshtein algorithm. Default is true. Transpositions *bool `protobuf:"varint,6,opt,name=transpositions,proto3,oneof" json:"transpositions,omitempty"` - // Method used to rewrite the query. + // Method used to rewrite the query Rewrite RewriteMethod `protobuf:"varint,7,opt,name=rewrite,proto3,enum=luceneserver.RewriteMethod" json:"rewrite,omitempty"` - // Specifies the size to use for the TOP_TERMS* rewrite methods. - RewriteTopTermsSize int32 `protobuf:"varint,8,opt,name=rewriteTopTermsSize,proto3" json:"rewriteTopTermsSize,omitempty"` - Auto *FuzzyParams_AutoFuzziness `protobuf:"bytes,9,opt,name=auto,proto3" json:"auto,omitempty"` // Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting. Either set this or maxEdits. + // Specifies the size to use for the TOP_TERMS* rewrite methods + RewriteTopTermsSize int32 `protobuf:"varint,8,opt,name=rewriteTopTermsSize,proto3" json:"rewriteTopTermsSize,omitempty"` + // Auto fuzziness which determines the max edits based on the term length. AUTO is the preferred setting. + // Either set this or maxEdits. + Auto *FuzzyParams_AutoFuzziness `protobuf:"bytes,9,opt,name=auto,proto3" json:"auto,omitempty"` } func (x *FuzzyQuery) Reset() { @@ -3381,15 +3488,18 @@ type RegexpQuery struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Field in the document to query Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + // Regular expression to search for + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` // Optional flags for the regular expression Flag RegexpFlag `protobuf:"varint,3,opt,name=flag,proto3,enum=luceneserver.RegexpFlag" json:"flag,omitempty"` - // maximum number of states that compiling the automaton for the regexp can result in. Set higher to allow more complex queries and lower to prevent memory exhaustion. Default is 10000. + // Maximum number of states that compiling the automaton for the regexp can result in. Set higher to allow more + // complex queries and lower to prevent memory exhaustion. Default is 10000. MaxDeterminizedStates *int32 `protobuf:"varint,4,opt,name=maxDeterminizedStates,proto3,oneof" json:"maxDeterminizedStates,omitempty"` - // Method used to rewrite the query. + // Method used to rewrite the query Rewrite RewriteMethod `protobuf:"varint,5,opt,name=rewrite,proto3,enum=luceneserver.RewriteMethod" json:"rewrite,omitempty"` - // Specifies the size to use for the TOP_TERMS* rewrite methods. + // Specifies the size to use for the TOP_TERMS* rewrite methods RewriteTopTermsSize int32 `protobuf:"varint,6,opt,name=rewriteTopTermsSize,proto3" json:"rewriteTopTermsSize,omitempty"` } @@ -3467,17 +3577,17 @@ func (x *RegexpQuery) GetRewriteTopTermsSize() int32 { return 0 } -// A query that matches documents containing terms within a specified range. +// A query that matches documents containing terms within a specified range type SpanNearQuery struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Clauses for a span near query. + // Clauses for a span near query Clauses []*SpanQuery `protobuf:"bytes,1,rep,name=clauses,proto3" json:"clauses,omitempty"` - // Maximum number of positions between matching terms. + // Maximum number of positions between matching terms Slop int32 `protobuf:"varint,2,opt,name=slop,proto3" json:"slop,omitempty"` - // True if the matching terms must be in the same order as the query. + // True if the matching terms must be in the same order as the query InOrder bool `protobuf:"varint,3,opt,name=inOrder,proto3" json:"inOrder,omitempty"` } @@ -3573,15 +3683,20 @@ func (*MatchAllQuery) Descriptor() ([]byte, []int) { return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{32} } -// Defines a full query consisting of a QueryNode which may be one of several types. +// Defines a full query consisting of a QueryNode which may be one of several types type Query struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // No longer needed, type inferred from set QueryNode + // // Deprecated: Do not use. - QueryType QueryType `protobuf:"varint,1,opt,name=queryType,proto3,enum=luceneserver.QueryType" json:"queryType,omitempty"` // no longer needed, type inferred from set QueryNode - Boost float32 `protobuf:"fixed32,2,opt,name=boost,proto3" json:"boost,omitempty"` // Boost values that are less than one will give less importance to this query compared to other ones while values that are greater than one will give more importance to the scores returned by this query. Boost value of zero will do nothing (default). Boost less than 0 is invalid. + QueryType QueryType `protobuf:"varint,1,opt,name=queryType,proto3,enum=luceneserver.QueryType" json:"queryType,omitempty"` + // Boost values that are less than one will give less importance to this query compared to other ones while + // values that are greater than one will give more importance to the scores returned by this query. Boost + // value of zero will do nothing (default). Boost less than 0 is invalid. + Boost float32 `protobuf:"fixed32,2,opt,name=boost,proto3" json:"boost,omitempty"` // Types that are assignable to QueryNode: // // *Query_BooleanQuery @@ -3981,43 +4096,64 @@ func (*Query_SpanQuery) isQuery_QueryNode() {} func (*Query_MatchAllQuery) isQuery_QueryNode() {} +// Search query request type SearchRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` //index to search against - StartHit int32 `protobuf:"varint,2,opt,name=startHit,proto3" json:"startHit,omitempty"` // Which hit to start from (for pagination); default: 0 - TopHits int32 `protobuf:"varint,3,opt,name=topHits,proto3" json:"topHits,omitempty"` // How many top hits to retrieve; default: 10. It limits the hits returned, starting from index 0. For pagination: set it to startHit + window_size. + // Index to search against + IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` + // Which hit to start from (for pagination); default: 0 + StartHit int32 `protobuf:"varint,2,opt,name=startHit,proto3" json:"startHit,omitempty"` + // How many top hits to retrieve; default: 10. It limits the hits returned, starting from index 0. + // For pagination: set it to startHit + window_size. + TopHits int32 `protobuf:"varint,3,opt,name=topHits,proto3" json:"topHits,omitempty"` // Maximum number of seconds spent on each collection phase; note that for // multi-pass searches (e.g. query-time grouping), this timeout applies to each phase. - TimeoutSec float64 `protobuf:"fixed64,4,opt,name=timeoutSec,proto3" json:"timeoutSec,omitempty"` - RetrieveFields []string `protobuf:"bytes,5,rep,name=retrieveFields,proto3" json:"retrieveFields,omitempty"` //Which fields to highlight or retrieve. - QueryText string `protobuf:"bytes,6,opt,name=queryText,proto3" json:"queryText,omitempty"` //Query text to parse using the specified QueryParser. - VirtualFields []*VirtualField `protobuf:"bytes,7,rep,name=virtualFields,proto3" json:"virtualFields,omitempty"` //Defines virtual fields (name'd dynamic expressions) for this query. - Query *Query `protobuf:"bytes,8,opt,name=query,proto3" json:"query,omitempty"` // Full query to execute using QueryNodes - QuerySort *QuerySortField `protobuf:"bytes,9,opt,name=querySort,proto3" json:"querySort,omitempty"` //Sort hits by field (default is by relevance). + TimeoutSec float64 `protobuf:"fixed64,4,opt,name=timeoutSec,proto3" json:"timeoutSec,omitempty"` + // Which fields to retrieve + RetrieveFields []string `protobuf:"bytes,5,rep,name=retrieveFields,proto3" json:"retrieveFields,omitempty"` + // Query text to parse using the specified QueryParser. If query is provided, this is ignored. + QueryText string `protobuf:"bytes,6,opt,name=queryText,proto3" json:"queryText,omitempty"` + // Defines virtual fields (named dynamic expressions) for this query + VirtualFields []*VirtualField `protobuf:"bytes,7,rep,name=virtualFields,proto3" json:"virtualFields,omitempty"` + // Full query to execute + Query *Query `protobuf:"bytes,8,opt,name=query,proto3" json:"query,omitempty"` + // Sort hits by field (default is by relevance) + QuerySort *QuerySortField `protobuf:"bytes,9,opt,name=querySort,proto3" json:"querySort,omitempty"` // Types that are assignable to Searcher: // // *SearchRequest_IndexGen // *SearchRequest_Version // *SearchRequest_Snapshot - Searcher isSearchRequest_Searcher `protobuf_oneof:"Searcher"` - TotalHitsThreshold int32 `protobuf:"varint,13,opt,name=totalHitsThreshold,proto3" json:"totalHitsThreshold,omitempty"` //By default we count hits accurately up to 1000. This makes sure that we don't spend most time on computing hit counts - Facets []*Facet `protobuf:"bytes,14,rep,name=facets,proto3" json:"facets,omitempty"` // Which facets to retrieve - FetchTasks []*FetchTask `protobuf:"bytes,15,rep,name=fetchTasks,proto3" json:"fetchTasks,omitempty"` //Any custom tasks that should be performed on top documents after ranking - DisallowPartialResults bool `protobuf:"varint,16,opt,name=disallowPartialResults,proto3" json:"disallowPartialResults,omitempty"` //Should partial result be a failure condition. Applies when a search request times out. If false, the top documents ranking at the point of timeout are used and the request continues. Also, hitTimeout is set to true in the response. - QueryNestedPath string `protobuf:"bytes,17,opt,name=queryNestedPath,proto3" json:"queryNestedPath,omitempty"` //nested path we want to query by if we want to query child documents. - Rescorers []*Rescorer `protobuf:"bytes,18,rep,name=rescorers,proto3" json:"rescorers,omitempty"` // Rescorers which are executed in-order after the first pass + Searcher isSearchRequest_Searcher `protobuf_oneof:"Searcher"` + // By default we count hits accurately up to 1000. This makes sure that we don't spend most time on + // computing hit counts. + TotalHitsThreshold int32 `protobuf:"varint,13,opt,name=totalHitsThreshold,proto3" json:"totalHitsThreshold,omitempty"` + // Which facets to retrieve + Facets []*Facet `protobuf:"bytes,14,rep,name=facets,proto3" json:"facets,omitempty"` + // Any custom tasks that should be performed on top documents after ranking + FetchTasks []*FetchTask `protobuf:"bytes,15,rep,name=fetchTasks,proto3" json:"fetchTasks,omitempty"` + // Should partial result be a failure condition. Applies when a search request times out. If false, the top + // documents ranking at the point of timeout are used and the request continues. Also, hitTimeout is set to + // true in the response. + DisallowPartialResults bool `protobuf:"varint,16,opt,name=disallowPartialResults,proto3" json:"disallowPartialResults,omitempty"` + // Nested path we want to query by if we want to query child documents + QueryNestedPath string `protobuf:"bytes,17,opt,name=queryNestedPath,proto3" json:"queryNestedPath,omitempty"` + // Rescorers which are executed in-order after the first pass + Rescorers []*Rescorer `protobuf:"bytes,18,rep,name=rescorers,proto3" json:"rescorers,omitempty"` // If detailed request execution profiling should be included in the response Profile bool `protobuf:"varint,19,opt,name=profile,proto3" json:"profile,omitempty"` - // Check the search timeout condition after each collection of n documents in a segment. If 0, timeout is only checked on the segment boundary. + // Check the search timeout condition after each collection of n documents in a segment. + // If 0, timeout is only checked on the segment boundary. TimeoutCheckEvery int32 `protobuf:"varint,20,opt,name=timeoutCheckEvery,proto3" json:"timeoutCheckEvery,omitempty"` // Additional document collectors. Provides support for operations such as aggregation. Collectors map[string]*Collector `protobuf:"bytes,21,rep,name=collectors,proto3" json:"collectors,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Stop document collection in search phase after this many documents, 0 for unlimited. + // Stop document collection in search phase after this many documents, 0 for unlimited TerminateAfter int32 `protobuf:"varint,22,opt,name=terminateAfter,proto3" json:"terminateAfter,omitempty"` - // Set gRPC compression codec to use for response message. If value is unset or invalid, falls back to uncompressed. Valid codecs: identity, gzip, lz4 + // Set gRPC compression codec to use for response message. If value is unset or invalid, falls back to + // uncompressed. Valid codecs: identity, gzip, lz4 ResponseCompression string `protobuf:"bytes,23,opt,name=responseCompression,proto3" json:"responseCompression,omitempty"` // Specify how to highlight matched text Highlight *Highlight `protobuf:"bytes,24,opt,name=highlight,proto3" json:"highlight,omitempty"` @@ -4027,13 +4163,15 @@ type SearchRequest struct { InnerHits map[string]*InnerHit `protobuf:"bytes,26,rep,name=inner_hits,json=innerHits,proto3" json:"inner_hits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Defines runtime fields for this query RuntimeFields []*RuntimeField `protobuf:"bytes,27,rep,name=runtimeFields,proto3" json:"runtimeFields,omitempty"` - // Stop document collection in search phase after this many recalled documents, after terminateAfter docs will be counted but not scored upto terminateAfterMaxRecallCount. + // Stop document collection in search phase after this many recalled documents, after terminateAfter docs + // will be counted but not scored upto terminateAfterMaxRecallCount TerminateAfterMaxRecallCount int32 `protobuf:"varint,28,opt,name=terminateAfterMaxRecallCount,proto3" json:"terminateAfterMaxRecallCount,omitempty"` // Any custom logging that should log hits after ranking LoggingHits *LoggingHits `protobuf:"bytes,29,opt,name=loggingHits,proto3" json:"loggingHits,omitempty"` // Keeps tracks of last hit for search after SearchAfter *LastHitInfo `protobuf:"bytes,30,opt,name=searchAfter,proto3" json:"searchAfter,omitempty"` - // Request kNN vector search queries, results will be combined with the standard query (if provided) using the boolean query SHOULD logic + // Request kNN vector search queries, results will be combined with the standard query (if provided) using + // the boolean query SHOULD logic Knn []*KnnQuery `protobuf:"bytes,31,rep,name=knn,proto3" json:"knn,omitempty"` } @@ -4298,15 +4436,21 @@ type isSearchRequest_Searcher interface { } type SearchRequest_IndexGen struct { - IndexGen int64 `protobuf:"varint,10,opt,name=indexGen,proto3,oneof"` //Search a generation previously returned by an indexing operation such as #addDocument. Use this to search a non-committed (near-real-time) view of the index. + // Search a generation previously returned by an indexing operation such as #addDocument. + // Use this to search a non-committed (near-real-time) view of the index. + IndexGen int64 `protobuf:"varint,10,opt,name=indexGen,proto3,oneof"` } type SearchRequest_Version struct { - Version int64 `protobuf:"varint,11,opt,name=version,proto3,oneof"` //Search a specific searcher version. This is typically used by follow-on searches (e.g., user clicks next page, drills down, or changes sort, etc.) to get the same searcher used by the original search. + // Search a specific searcher version. This is typically used by follow-on searches + // (e.g., user clicks next page, drills down, or changes sort, etc.) to get the same searcher used by + // the original search. + Version int64 `protobuf:"varint,11,opt,name=version,proto3,oneof"` } type SearchRequest_Snapshot struct { - Snapshot string `protobuf:"bytes,12,opt,name=snapshot,proto3,oneof"` //Search a snapshot previously created with #createSnapshot + // Search a snapshot previously created with #createSnapshot + Snapshot string `protobuf:"bytes,12,opt,name=snapshot,proto3,oneof"` } func (*SearchRequest_IndexGen) isSearchRequest_Searcher() {} @@ -4321,9 +4465,12 @@ type LastHitInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Last hit sort field values LastFieldValues []string `protobuf:"bytes,1,rep,name=lastFieldValues,proto3" json:"lastFieldValues,omitempty"` - LastDocId int32 `protobuf:"varint,2,opt,name=lastDocId,proto3" json:"lastDocId,omitempty"` - LastScore float32 `protobuf:"fixed32,3,opt,name=lastScore,proto3" json:"lastScore,omitempty"` + // Last hit Lucene doc id + LastDocId int32 `protobuf:"varint,2,opt,name=lastDocId,proto3" json:"lastDocId,omitempty"` + // Last hit score + LastScore float32 `protobuf:"fixed32,3,opt,name=lastScore,proto3" json:"lastScore,omitempty"` } func (x *LastHitInfo) Reset() { @@ -4385,19 +4532,20 @@ type InnerHit struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Nested path to search against assuming same index as the parent Query. + // Nested path to search against assuming same index as the parent Query QueryNestedPath string `protobuf:"bytes,1,opt,name=query_nested_path,json=queryNestedPath,proto3" json:"query_nested_path,omitempty"` // Which hit to start from (for pagination); default: 0 StartHit int32 `protobuf:"varint,2,opt,name=start_hit,json=startHit,proto3" json:"start_hit,omitempty"` - // How many top hits to retrieve; default: 3. It limits the hits returned, starting from index 0. For pagination: set it to startHit + window_size. + // How many top hits to retrieve; default: 3. It limits the hits returned, starting from index 0. + // For pagination: set it to startHit + window_size. TopHits int32 `protobuf:"varint,3,opt,name=top_hits,json=topHits,proto3" json:"top_hits,omitempty"` - // InnerHit query to query against the nested documents specified by queryNestedPath. + // InnerHit query to query against the nested documents specified by queryNestedPath InnerQuery *Query `protobuf:"bytes,4,opt,name=inner_query,json=innerQuery,proto3" json:"inner_query,omitempty"` - // Fields to retrieve; Parent's fields except its id field are unavailable in the innerHit. + // Fields to retrieve; Parent's fields except its id field are unavailable in the innerHit RetrieveFields []string `protobuf:"bytes,5,rep,name=retrieve_fields,json=retrieveFields,proto3" json:"retrieve_fields,omitempty"` - // Sort hits by field (default is by relevance). + // Sort hits by field (default is by relevance) QuerySort *QuerySortField `protobuf:"bytes,6,opt,name=query_sort,json=querySort,proto3" json:"query_sort,omitempty"` - // Highlight the children documents. + // Highlight the children documents Highlight *Highlight `protobuf:"bytes,7,opt,name=highlight,proto3" json:"highlight,omitempty"` } @@ -4488,8 +4636,10 @@ type VirtualField struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Script *Script `protobuf:"bytes,1,opt,name=script,proto3" json:"script,omitempty"` // Script defining this field's values. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Virtual field's name. Must be different from registered fields and any other virtual fields. + // Script defining this field's values + Script *Script `protobuf:"bytes,1,opt,name=script,proto3" json:"script,omitempty"` + // Virtual field's name. Must be different from registered fields and any other virtual fields. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } func (x *VirtualField) Reset() { @@ -4544,7 +4694,7 @@ type RuntimeField struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Script defining this field's values. + // Script defining this field's values Script *Script `protobuf:"bytes,1,opt,name=script,proto3" json:"script,omitempty"` // Runtime field's name. Must be different from registered fields and any other runtime fields. Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` @@ -4596,14 +4746,18 @@ func (x *RuntimeField) GetName() string { return "" } +// Definition of user-defined script type Script struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Lang string `protobuf:"bytes,1,opt,name=lang,proto3" json:"lang,omitempty"` // script language - Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` // script source - Params map[string]*Script_ParamValue `protobuf:"bytes,7,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // parameters passed into script execution + // Script language + Lang string `protobuf:"bytes,1,opt,name=lang,proto3" json:"lang,omitempty"` + // Script source + Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` + // Parameters passed into script execution + Params map[string]*Script_ParamValue `protobuf:"bytes,7,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Script) Reset() { @@ -4659,14 +4813,18 @@ func (x *Script) GetParams() map[string]*Script_ParamValue { return nil } +// Definition doing ranking by sorting on fields type QuerySortField struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DoDocScores bool `protobuf:"varint,1,opt,name=doDocScores,proto3" json:"doDocScores,omitempty"` //Compute the doc score for each collected (costs added CPU); default:false - DoMaxScore bool `protobuf:"varint,2,opt,name=doMaxScore,proto3" json:"doMaxScore,omitempty"` //Compute the max score across all hits (costs added CPU); default: false - Fields *SortFields `protobuf:"bytes,3,opt,name=fields,proto3" json:"fields,omitempty"` //List of Fields to sort on. + // Compute the doc score for each collected (costs added CPU); default:false + DoDocScores bool `protobuf:"varint,1,opt,name=doDocScores,proto3" json:"doDocScores,omitempty"` + // Compute the max score across all hits (costs added CPU); default: false + DoMaxScore bool `protobuf:"varint,2,opt,name=doMaxScore,proto3" json:"doMaxScore,omitempty"` + // List of Fields to sort on + Fields *SortFields `protobuf:"bytes,3,opt,name=fields,proto3" json:"fields,omitempty"` } func (x *QuerySortField) Reset() { @@ -4728,6 +4886,7 @@ type SortFields struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Fields to sort on SortedFields []*SortType `protobuf:"bytes,1,rep,name=sortedFields,proto3" json:"sortedFields,omitempty"` } @@ -4770,15 +4929,18 @@ func (x *SortFields) GetSortedFields() []*SortType { return nil } -// "The field to sort on. Pass docid for index order and score for relevance sort. +// The field to sort on. Pass 'docid' for index order and 'score' for relevance sort. type SortType struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FieldName string `protobuf:"bytes,1,opt,name=fieldName,proto3" json:"fieldName,omitempty"` // name of field to sort - Selector Selector `protobuf:"varint,2,opt,name=selector,proto3,enum=luceneserver.Selector" json:"selector,omitempty"` // For multi valued fields, how to select which value is used for sorting - Origin *Point `protobuf:"bytes,3,opt,name=origin,proto3" json:"origin,omitempty"` // For distance sort, the point that we measure distance from + // Name of field to sort on + FieldName string `protobuf:"bytes,1,opt,name=fieldName,proto3" json:"fieldName,omitempty"` + // For multi valued fields, how to select which value is used for sorting + Selector Selector `protobuf:"varint,2,opt,name=selector,proto3,enum=luceneserver.Selector" json:"selector,omitempty"` + // For distance sort, the point that we measure distance from + Origin *Point `protobuf:"bytes,3,opt,name=origin,proto3" json:"origin,omitempty"` // Whether missing values should sort last instead of first. // Note that this runs \"before\" reverse, so if you sort missing first and reverse=true then missing values will // be at the end. @@ -4863,13 +5025,14 @@ func (x *SortType) GetUnit() string { return "" } +// Query total hits type TotalHits struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Relation TotalHits_Relation `protobuf:"varint,1,opt,name=relation,proto3,enum=luceneserver.TotalHits_Relation" json:"relation,omitempty"` - // * The value of the total hit count. Must be interpreted in the context of * {#relation}. + // The value of the total hit count. Must be interpreted in the context of {#relation}. Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` } @@ -4925,8 +5088,10 @@ type Point struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Latitude float64 `protobuf:"fixed64,1,opt,name=latitude,proto3" json:"latitude,omitempty"` // Latitude of the point - Longitude float64 `protobuf:"fixed64,2,opt,name=longitude,proto3" json:"longitude,omitempty"` // Longitude of the point + // Latitude of the point + Latitude float64 `protobuf:"fixed64,1,opt,name=latitude,proto3" json:"latitude,omitempty"` + // Longitude of the point + Longitude float64 `protobuf:"fixed64,2,opt,name=longitude,proto3" json:"longitude,omitempty"` } func (x *Point) Reset() { @@ -4975,17 +5140,24 @@ func (x *Point) GetLongitude() float64 { return 0 } +// Response to a search request type SearchResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Query diagnostics Diagnostics *SearchResponse_Diagnostics `protobuf:"bytes,1,opt,name=diagnostics,proto3" json:"diagnostics,omitempty"` - HitTimeout bool `protobuf:"varint,2,opt,name=hitTimeout,proto3" json:"hitTimeout,omitempty"` // Set to true if search times out and a degraded response is returned - TotalHits *TotalHits `protobuf:"bytes,3,opt,name=totalHits,proto3" json:"totalHits,omitempty"` - Hits []*SearchResponse_Hit `protobuf:"bytes,4,rep,name=hits,proto3" json:"hits,omitempty"` + // Set to true if search times out and a degraded response is returned + HitTimeout bool `protobuf:"varint,2,opt,name=hitTimeout,proto3" json:"hitTimeout,omitempty"` + // Total hits for the query + TotalHits *TotalHits `protobuf:"bytes,3,opt,name=totalHits,proto3" json:"totalHits,omitempty"` + // Ranked top hits + Hits []*SearchResponse_Hit `protobuf:"bytes,4,rep,name=hits,proto3" json:"hits,omitempty"` + // State for use in subsequent searches (search after) SearchState *SearchResponse_SearchState `protobuf:"bytes,5,opt,name=searchState,proto3" json:"searchState,omitempty"` - FacetResult []*FacetResult `protobuf:"bytes,6,rep,name=facetResult,proto3" json:"facetResult,omitempty"` ////Counts or aggregates for a single dimension + // Counts or aggregates for a single dimension + FacetResult []*FacetResult `protobuf:"bytes,6,rep,name=facetResult,proto3" json:"facetResult,omitempty"` // Detailed stats returned when profile=true in request ProfileResult *ProfileResult `protobuf:"bytes,7,opt,name=profileResult,proto3" json:"profileResult,omitempty"` // Results from any additional document collectors @@ -5089,16 +5261,22 @@ func (x *SearchResponse) GetTerminatedEarly() bool { return false } +// Define numeric range for facet type NumericRangeType struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Label string `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"` //Label for this range - Min int64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"` //Min value for the range - MinInclusive bool `protobuf:"varint,3,opt,name=minInclusive,proto3" json:"minInclusive,omitempty"` //True if the min value is inclusive - Max int64 `protobuf:"varint,4,opt,name=max,proto3" json:"max,omitempty"` //Max value for the range - MaxInclusive bool `protobuf:"varint,5,opt,name=maxInclusive,proto3" json:"maxInclusive,omitempty"` //True if the max value is inclusive + // Label for this range + Label string `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"` + // Min value for the range + Min int64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"` + // True if the min value is inclusive + MinInclusive bool `protobuf:"varint,3,opt,name=minInclusive,proto3" json:"minInclusive,omitempty"` + // Max value for the range + Max int64 `protobuf:"varint,4,opt,name=max,proto3" json:"max,omitempty"` + // True if the max value is inclusive + MaxInclusive bool `protobuf:"varint,5,opt,name=maxInclusive,proto3" json:"maxInclusive,omitempty"` } func (x *NumericRangeType) Reset() { @@ -5168,21 +5346,32 @@ func (x *NumericRangeType) GetMaxInclusive() bool { return false } +// Facet request definition type Facet struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Dim string `protobuf:"bytes,1,opt,name=dim,proto3" json:"dim,omitempty"` //Dimension (field) - Paths []string `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"` //Prefix path to facet 'under' - NumericRange []*NumericRangeType `protobuf:"bytes,3,rep,name=numericRange,proto3" json:"numericRange,omitempty"` //Custom numeric ranges. Field must be indexed with facet=numericRange. + // Dimension (field) + Dim string `protobuf:"bytes,1,opt,name=dim,proto3" json:"dim,omitempty"` + // Prefix path to facet 'under' + Paths []string `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"` + // Custom numeric ranges. Field must be indexed with facet=numericRange. + NumericRange []*NumericRangeType `protobuf:"bytes,3,rep,name=numericRange,proto3" json:"numericRange,omitempty"` + // No longer used + // // Deprecated: Do not use. - UseOrdsCache bool `protobuf:"varint,4,opt,name=useOrdsCache,proto3" json:"useOrdsCache,omitempty"` // True if the ordinals cache should be used - Labels []string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty"` // Specific facet labels to retrieve - TopN int32 `protobuf:"varint,6,opt,name=topN,proto3" json:"topN,omitempty"` //How many top facets to return - Script *Script `protobuf:"bytes,7,opt,name=script,proto3" json:"script,omitempty"` //FacetScript definition to use in place of index facet - SampleTopDocs int32 `protobuf:"varint,8,opt,name=sampleTopDocs,proto3" json:"sampleTopDocs,omitempty"` //Facet over the top N ranked documents, instead of all hits. Only works with field doc values. - Name string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"` //Name for this facet + UseOrdsCache bool `protobuf:"varint,4,opt,name=useOrdsCache,proto3" json:"useOrdsCache,omitempty"` + // Specific facet labels to retrieve + Labels []string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty"` + // How many top facets to return + TopN int32 `protobuf:"varint,6,opt,name=topN,proto3" json:"topN,omitempty"` + // FacetScript definition to use in place of index facet + Script *Script `protobuf:"bytes,7,opt,name=script,proto3" json:"script,omitempty"` + // Facet over the top N ranked documents, instead of all hits. Only works with field doc values. + SampleTopDocs int32 `protobuf:"varint,8,opt,name=sampleTopDocs,proto3" json:"sampleTopDocs,omitempty"` + // Name for this facet + Name string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"` } func (x *Facet) Reset() { @@ -5281,17 +5470,25 @@ func (x *Facet) GetName() string { return "" } +// Result of facet collection type FacetResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Dim string `protobuf:"bytes,1,opt,name=dim,proto3" json:"dim,omitempty"` //Dimension that was requested - Path []string `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` //Path whose children were requested. - Value float64 `protobuf:"fixed64,3,opt,name=value,proto3" json:"value,omitempty"` //Total value for this path (sum of all child counts, or sum of all child values), even those not included in the topN. - LabelValues []*LabelAndValue `protobuf:"bytes,4,rep,name=labelValues,proto3" json:"labelValues,omitempty"` // Child counts. - ChildCount int64 `protobuf:"varint,5,opt,name=childCount,proto3" json:"childCount,omitempty"` //How many child labels were encountered. - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` //Name for this facet + // Dimension that was requested + Dim string `protobuf:"bytes,1,opt,name=dim,proto3" json:"dim,omitempty"` + // Path whose children were requested + Path []string `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` + // Total value for this path (sum of all child counts, or sum of all child values), even those not included + // in the topN + Value float64 `protobuf:"fixed64,3,opt,name=value,proto3" json:"value,omitempty"` + // Child counts + LabelValues []*LabelAndValue `protobuf:"bytes,4,rep,name=labelValues,proto3" json:"labelValues,omitempty"` + // How many child labels were encountered + ChildCount int64 `protobuf:"varint,5,opt,name=childCount,proto3" json:"childCount,omitempty"` + // Name for this facet + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` } func (x *FacetResult) Reset() { @@ -5368,6 +5565,7 @@ func (x *FacetResult) GetName() string { return "" } +// Facet result label and value type LabelAndValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5423,13 +5621,16 @@ func (x *LabelAndValue) GetValue() float64 { return 0 } +// Define additional task to perform in the fetch phase type FetchTask struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` //Name of task, as registered by a FetchTaskPlugin - Params *structpb.Struct `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` //Optional task parameters + // Name of task, as registered by a FetchTaskPlugin + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Optional task parameters + Params *structpb.Struct `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` } func (x *FetchTask) Reset() { @@ -5484,8 +5685,10 @@ type PluginRescorer struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Params *structpb.Struct `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` // arguments passed to the plugin + // Rescorer name registered by plugin + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Arguments passed to the plugin rescorer + Params *structpb.Struct `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` } func (x *PluginRescorer) Reset() { @@ -5540,8 +5743,11 @@ type QueryRescorer struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RescoreQuery *Query `protobuf:"bytes,1,opt,name=rescoreQuery,proto3" json:"rescoreQuery,omitempty"` - QueryWeight float64 `protobuf:"fixed64,2,opt,name=queryWeight,proto3" json:"queryWeight,omitempty"` + // Query to rescore documents + RescoreQuery *Query `protobuf:"bytes,1,opt,name=rescoreQuery,proto3" json:"rescoreQuery,omitempty"` + // Weight to multiply with original query score + QueryWeight float64 `protobuf:"fixed64,2,opt,name=queryWeight,proto3" json:"queryWeight,omitempty"` + // Weight to multiply with rescore query score RescoreQueryWeight float64 `protobuf:"fixed64,3,opt,name=rescoreQueryWeight,proto3" json:"rescoreQueryWeight,omitempty"` } @@ -5604,6 +5810,7 @@ type Rescorer struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Maximum number of hits from previous phase to rescore WindowSize int32 `protobuf:"varint,1,opt,name=windowSize,proto3" json:"windowSize,omitempty"` // Types that are assignable to Rescorers: // @@ -5686,10 +5893,12 @@ type isRescorer_Rescorers interface { } type Rescorer_QueryRescorer struct { + // Rescore with Lucene query QueryRescorer *QueryRescorer `protobuf:"bytes,2,opt,name=queryRescorer,proto3,oneof"` } type Rescorer_PluginRescorer struct { + // Rescore with plugin registered rescorer PluginRescorer *PluginRescorer `protobuf:"bytes,3,opt,name=pluginRescorer,proto3,oneof"` } @@ -5703,10 +5912,14 @@ type ProfileResult struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SearchStats *ProfileResult_SearchStats `protobuf:"bytes,1,opt,name=searchStats,proto3" json:"searchStats,omitempty"` - ParsedQuery string `protobuf:"bytes,2,opt,name=parsedQuery,proto3" json:"parsedQuery,omitempty"` - RewrittenQuery string `protobuf:"bytes,3,opt,name=rewrittenQuery,proto3" json:"rewrittenQuery,omitempty"` - DrillDownQuery string `protobuf:"bytes,4,opt,name=drillDownQuery,proto3" json:"drillDownQuery,omitempty"` + // Stats for search phase + SearchStats *ProfileResult_SearchStats `protobuf:"bytes,1,opt,name=searchStats,proto3" json:"searchStats,omitempty"` + // Parsed query string + ParsedQuery string `protobuf:"bytes,2,opt,name=parsedQuery,proto3" json:"parsedQuery,omitempty"` + // Rewritten query string + RewrittenQuery string `protobuf:"bytes,3,opt,name=rewrittenQuery,proto3" json:"rewrittenQuery,omitempty"` + // Drill down query string + DrillDownQuery string `protobuf:"bytes,4,opt,name=drillDownQuery,proto3" json:"drillDownQuery,omitempty"` } func (x *ProfileResult) Reset() { @@ -5769,7 +5982,7 @@ func (x *ProfileResult) GetDrillDownQuery() string { return "" } -// Definition of additional document collector. +// Definition of additional document collector type Collector struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5784,7 +5997,7 @@ type Collector struct { // *Collector_Max // *Collector_Min Collectors isCollector_Collectors `protobuf_oneof:"Collectors"` - // Nested collectors that define sub-aggregations per bucket, supported by bucket based collectors. + // Nested collectors that define sub-aggregations per bucket, supported by bucket based collectors NestedCollectors map[string]*Collector `protobuf:"bytes,3,rep,name=nestedCollectors,proto3" json:"nestedCollectors,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -5881,7 +6094,7 @@ type isCollector_Collectors interface { } type Collector_Terms struct { - // Collector for aggregating based on term values. + // Collector for aggregating based on term values Terms *TermsCollector `protobuf:"bytes,1,opt,name=terms,proto3,oneof"` } @@ -5890,7 +6103,7 @@ type Collector_PluginCollector struct { } type Collector_TopHitsCollector struct { - // Collector for getting top hits based on score or sorting. + // Collector for getting top hits based on score or sorting TopHitsCollector *TopHitsCollector `protobuf:"bytes,4,opt,name=topHitsCollector,proto3,oneof"` } @@ -5900,12 +6113,12 @@ type Collector_Filter struct { } type Collector_Max struct { - // Collector for finding a max double value from collected documents. + // Collector for finding a max double value from collected documents Max *MaxCollector `protobuf:"bytes,6,opt,name=max,proto3,oneof"` } type Collector_Min struct { - // Collector for finding a min double value from collected documents. + // Collector for finding a min double value from collected documents Min *MinCollector `protobuf:"bytes,7,opt,name=min,proto3,oneof"` } @@ -5927,8 +6140,10 @@ type PluginCollector struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Params *structpb.Struct `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` // arguments passed to the plugin + // Name of plugin registered collector + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Arguments passed to the plugin collector + Params *structpb.Struct `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` } func (x *PluginCollector) Reset() { @@ -5977,7 +6192,7 @@ func (x *PluginCollector) GetParams() *structpb.Struct { return nil } -// Definition of term aggregating collector. +// Definition of term aggregating collector type TermsCollector struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5988,9 +6203,9 @@ type TermsCollector struct { // *TermsCollector_Field // *TermsCollector_Script TermsSource isTermsCollector_TermsSource `protobuf_oneof:"TermsSource"` - // Maximum number of top terms to return. + // Maximum number of top terms to return Size int32 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"` - // How results Buckets should be ordered, defaults to descending Bucket _count. + // How results Buckets should be ordered, defaults to descending Bucket _count Order *BucketOrder `protobuf:"bytes,4,opt,name=order,proto3" json:"order,omitempty"` } @@ -6066,12 +6281,12 @@ type isTermsCollector_TermsSource interface { } type TermsCollector_Field struct { - // Use field values for terms. + // Use field values for terms Field string `protobuf:"bytes,1,opt,name=field,proto3,oneof"` } type TermsCollector_Script struct { - // Use FacetScript definition to produce terms. + // Use FacetScript definition to produce terms Script *Script `protobuf:"bytes,2,opt,name=script,proto3,oneof"` } @@ -6079,19 +6294,19 @@ func (*TermsCollector_Field) isTermsCollector_TermsSource() {} func (*TermsCollector_Script) isTermsCollector_TermsSource() {} -// Definition of top hits based collector. +// Definition of top hits based collector type TopHitsCollector struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Offset for retrieval of top hits. + // Offset for retrieval of top hits StartHit int32 `protobuf:"varint,1,opt,name=startHit,proto3" json:"startHit,omitempty"` - // Total hits to collect, note that the number of hits returned is (topHits - startHit). + // Total hits to collect, note that the number of hits returned is (topHits - startHit) TopHits int32 `protobuf:"varint,2,opt,name=topHits,proto3" json:"topHits,omitempty"` - // When specified, collector does sort based collection. Otherwise, relevance score is used. + // When specified, collector does sort based collection. Otherwise, relevance score is used QuerySort *QuerySortField `protobuf:"bytes,3,opt,name=querySort,proto3" json:"querySort,omitempty"` - // Which fields to retrieve. + // Which fields to retrieve RetrieveFields []string `protobuf:"bytes,4,rep,name=retrieveFields,proto3" json:"retrieveFields,omitempty"` // If Lucene explanation should be included in the collector response Explain bool `protobuf:"varint,5,opt,name=explain,proto3" json:"explain,omitempty"` @@ -6164,7 +6379,7 @@ func (x *TopHitsCollector) GetExplain() bool { return false } -// Definition of filtering collector, there must be at least one nested collector specified in the Collector message. +// Definition of filtering collector, there must be at least one nested collector specified in the Collector message type FilterCollector struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6235,12 +6450,13 @@ type isFilterCollector_Filter interface { } type FilterCollector_Query struct { - // Only propagate documents that match the given query. + // Only propagate documents that match the given query Query *Query `protobuf:"bytes,1,opt,name=query,proto3,oneof"` } type FilterCollector_SetQuery struct { - // Specialized implementation for set queries, checks if field doc values are in the provided set. This can be useful for large set sizes with lower recall, where building the scorer would be expensive. + // Specialized implementation for set queries, checks if field doc values are in the provided set. + // This can be useful for large set sizes with lower recall, where building the scorer would be expensive. SetQuery *TermInSetQuery `protobuf:"bytes,2,opt,name=setQuery,proto3,oneof"` } @@ -6248,7 +6464,8 @@ func (*FilterCollector_Query) isFilterCollector_Filter() {} func (*FilterCollector_SetQuery) isFilterCollector_Filter() {} -// Definition of collector to find a max double value over documents. Currently only allows for script based value production. +// Definition of collector to find a max double value over documents. Currently only allows for script based +// value production. type MaxCollector struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6317,7 +6534,8 @@ type MaxCollector_Script struct { func (*MaxCollector_Script) isMaxCollector_ValueSource() {} -// Definition of collector to find a min double value over documents. Currently only allows for script based value production. +// Definition of collector to find a min double value over documents. Currently only allows for script based +// value production. type MinCollector struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6386,6 +6604,7 @@ type MinCollector_Script struct { func (*MinCollector_Script) isMinCollector_ValueSource() {} +// Result of aggregating collector type CollectorResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6480,7 +6699,7 @@ type isCollectorResult_CollectorResults interface { } type CollectorResult_BucketResult struct { - // Result of collector that produces buckets and counts. + // Result of collector that produces buckets and counts BucketResult *BucketResult `protobuf:"bytes,1,opt,name=bucketResult,proto3,oneof"` } @@ -6490,17 +6709,17 @@ type CollectorResult_AnyResult struct { } type CollectorResult_HitsResult struct { - // Result of collector that returns document hits. + // Result of collector that returns document hits HitsResult *HitsResult `protobuf:"bytes,4,opt,name=hitsResult,proto3,oneof"` } type CollectorResult_FilterResult struct { - // Result of collector that filters documents. + // Result of collector that filters documents FilterResult *FilterResult `protobuf:"bytes,5,opt,name=filterResult,proto3,oneof"` } type CollectorResult_DoubleResult struct { - // Result of collector that produces a single double value. + // Result of collector that produces a single double value DoubleResult *wrapperspb.DoubleValue `protobuf:"bytes,6,opt,name=doubleResult,proto3,oneof"` } @@ -6514,13 +6733,14 @@ func (*CollectorResult_FilterResult) isCollectorResult_CollectorResults() {} func (*CollectorResult_DoubleResult) isCollectorResult_CollectorResults() {} -// Defines how Buckets should be ordered in BucketResult. +// Defines how Buckets should be ordered in BucketResult type BucketOrder struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // What to use for sorting. This can be _count for Bucket count, or the name of a nested collector that supports ordering. + // What to use for sorting. This can be _count for Bucket count, or the name of a nested collector that + // supports ordering. Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // Sorting order Order BucketOrder_OrderType `protobuf:"varint,2,opt,name=order,proto3,enum=luceneserver.BucketOrder_OrderType" json:"order,omitempty"` @@ -6572,15 +6792,17 @@ func (x *BucketOrder) GetOrder() BucketOrder_OrderType { return BucketOrder_DESC } +// Results from bucketing collector type BucketResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Buckets Buckets []*BucketResult_Bucket `protobuf:"bytes,1,rep,name=buckets,proto3" json:"buckets,omitempty"` - // Number of unique buckets, including those not in the buckets list. + // Number of unique buckets, including those not in the buckets list TotalBuckets int32 `protobuf:"varint,2,opt,name=totalBuckets,proto3" json:"totalBuckets,omitempty"` - // Number of other collected counts not represented in the buckets' counts. + // Number of other collected counts not represented in the buckets' counts TotalOtherCounts int32 `protobuf:"varint,3,opt,name=totalOtherCounts,proto3" json:"totalOtherCounts,omitempty"` } @@ -6637,14 +6859,15 @@ func (x *BucketResult) GetTotalOtherCounts() int32 { return 0 } +// Result from top hits collector type HitsResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Total hit information. + // Total hit information TotalHits *TotalHits `protobuf:"bytes,3,opt,name=totalHits,proto3" json:"totalHits,omitempty"` - // Ordered hits with scoring/sorting info and retrieved fields. + // Ordered hits with scoring/sorting info and retrieved fields Hits []*SearchResponse_Hit `protobuf:"bytes,4,rep,name=hits,proto3" json:"hits,omitempty"` } @@ -6694,14 +6917,15 @@ func (x *HitsResult) GetHits() []*SearchResponse_Hit { return nil } +// Result from filter collector type FilterResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Number of documents that passed the filter. + // Number of documents that passed the filter DocCount int32 `protobuf:"varint,1,opt,name=docCount,proto3" json:"docCount,omitempty"` - // Results from nested collectors. + // Results from nested collectors NestedCollectorResults map[string]*CollectorResult `protobuf:"bytes,2,rep,name=nestedCollectorResults,proto3" json:"nestedCollectorResults,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -6751,12 +6975,13 @@ func (x *FilterResult) GetNestedCollectorResults() map[string]*CollectorResult { return nil } +// Defines logger for search hits type LoggingHits struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // name of the hits logger to be called, as registered by a HitsLoggerPlugin + // Name of the hits logger to be called, as registered by a HitsLoggerPlugin Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Optional logging parameters Params *structpb.Struct `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` @@ -6887,7 +7112,8 @@ type KnnQuery struct { Filter *Query `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"` // Number of top nearest neighbor documents to collect, must be <= num_candidates K int32 `protobuf:"varint,3,opt,name=k,proto3" json:"k,omitempty"` - // Number of nearest neighbors to consider per segment. A larger value produces a more accurate top k. Must be <= 10000. + // Number of nearest neighbors to consider per segment. A larger value produces a more accurate top k. + // Must be <= 10000. NumCandidates int32 `protobuf:"varint,4,opt,name=num_candidates,json=numCandidates,proto3" json:"num_candidates,omitempty"` // Vector value to use for query vector, for fields with float element type QueryVector []float32 `protobuf:"fixed32,5,rep,packed,name=query_vector,json=queryVector,proto3" json:"query_vector,omitempty"` @@ -6978,14 +7204,17 @@ func (x *KnnQuery) GetBoost() float32 { return 0 } -// Optional low and high values for auto fuzziness. Defaults to low: 3 and high: 6 if both are unset. Valid values are low >= 0 and low < high +// Optional low and high values for auto fuzziness. Defaults to low: 3 and high: 6 if both are unset. +// Valid values are low >= 0 and low < high type FuzzyParams_AutoFuzziness struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Low int32 `protobuf:"varint,6,opt,name=low,proto3" json:"low,omitempty"` // Optional low distance argument. - High int32 `protobuf:"varint,7,opt,name=high,proto3" json:"high,omitempty"` // Optional high distance argument. + // Optional low distance argument + Low int32 `protobuf:"varint,6,opt,name=low,proto3" json:"low,omitempty"` + // Optional high distance argument + High int32 `protobuf:"varint,7,opt,name=high,proto3" json:"high,omitempty"` } func (x *FuzzyParams_AutoFuzziness) Reset() { @@ -7039,6 +7268,7 @@ type TermInSetQuery_TextTerms struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // TEXT field terms Terms []string `protobuf:"bytes,1,rep,name=terms,proto3" json:"terms,omitempty"` } @@ -7086,6 +7316,7 @@ type TermInSetQuery_IntTerms struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // INT field terms Terms []int32 `protobuf:"varint,1,rep,packed,name=terms,proto3" json:"terms,omitempty"` } @@ -7133,6 +7364,7 @@ type TermInSetQuery_LongTerms struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // LONG field terms Terms []int64 `protobuf:"varint,1,rep,packed,name=terms,proto3" json:"terms,omitempty"` } @@ -7180,6 +7412,7 @@ type TermInSetQuery_FloatTerms struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // FLOAT field terms Terms []float32 `protobuf:"fixed32,1,rep,packed,name=terms,proto3" json:"terms,omitempty"` } @@ -7227,6 +7460,7 @@ type TermInSetQuery_DoubleTerms struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // DOUBLE field terms Terms []float64 `protobuf:"fixed64,1,rep,packed,name=terms,proto3" json:"terms,omitempty"` } @@ -7392,9 +7626,12 @@ type MultiFunctionScoreQuery_DecayFunction struct { // *MultiFunctionScoreQuery_DecayFunction_GeoPoint Origin isMultiFunctionScoreQuery_DecayFunction_Origin `protobuf_oneof:"Origin"` // Currently only distance based scale and offset units are supported - // Distance from origin + offset at which computed score will be equal to decay. Scale should be distance, unit (m, km, mi) with space is optional. Default unit will be meters. Ex: "10", "15 km", "5 m", "7 mi" + // Distance from origin + offset at which computed score will be equal to decay. Scale should be distance, + // unit (m, km, mi) with space is optional. Default unit will be meters. Ex: "10", "15 km", "5 m", "7 mi" Scale string `protobuf:"bytes,4,opt,name=scale,proto3" json:"scale,omitempty"` - // Compute decay function for docs with a distance greater than offset, will be 0.0 if none is set. Offset should be distance, unit (m, km, mi) with space is optional. Default unit will be meters. Ex: "10", "15 km", "5 m", "7 mi" + // Compute decay function for docs with a distance greater than offset, will be 0.0 if none is set. Offset + // should be distance, unit (m, km, mi) with space is optional. Default unit will be meters. + // Ex: "10", "15 km", "5 m", "7 mi" Offset string `protobuf:"bytes,5,opt,name=offset,proto3" json:"offset,omitempty"` // Defines decay rate for scoring. Should be between (0, 1) Decay float32 `protobuf:"fixed32,6,opt,name=decay,proto3" json:"decay,omitempty"` @@ -7492,7 +7729,7 @@ type MultiFunctionScoreQuery_DecayFunction_GeoPoint struct { func (*MultiFunctionScoreQuery_DecayFunction_GeoPoint) isMultiFunctionScoreQuery_DecayFunction_Origin() { } -// script parameter entry +// Script parameter entry type Script_ParamValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7686,12 +7923,13 @@ func (*Script_ParamValue_StructValue) isScript_ParamValue_ParamValues() {} func (*Script_ParamValue_FloatVectorValue) isScript_ParamValue_ParamValues() {} -// map parameter value +// Map parameter value type Script_ParamStructValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Parameter values map Fields map[string]*Script_ParamValue `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -7734,12 +7972,13 @@ func (x *Script_ParamStructValue) GetFields() map[string]*Script_ParamValue { return nil } -// list parameter value +// List parameter value type Script_ParamListValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Parameter values list Values []*Script_ParamValue `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` } @@ -7782,11 +8021,13 @@ func (x *Script_ParamListValue) GetValues() []*Script_ParamValue { return nil } +// Float vector parameter value type Script_ParamFloatVectorValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Float vector value Values []float32 `protobuf:"fixed32,1,rep,packed,name=values,proto3" json:"values,omitempty"` } @@ -7841,18 +8082,29 @@ type SearchResponse_Diagnostics struct { // Deprecated: Do not use. RewrittenQuery string `protobuf:"bytes,2,opt,name=rewrittenQuery,proto3" json:"rewrittenQuery,omitempty"` // Deprecated: Do not use. - DrillDownQuery string `protobuf:"bytes,3,opt,name=drillDownQuery,proto3" json:"drillDownQuery,omitempty"` - FirstPassSearchTimeMs float64 `protobuf:"fixed64,4,opt,name=firstPassSearchTimeMs,proto3" json:"firstPassSearchTimeMs,omitempty"` - HighlightTimeMs float64 `protobuf:"fixed64,5,opt,name=highlightTimeMs,proto3" json:"highlightTimeMs,omitempty"` - GetFieldsTimeMs float64 `protobuf:"fixed64,6,opt,name=getFieldsTimeMs,proto3" json:"getFieldsTimeMs,omitempty"` - NewSnapshotSearcherOpenMs float64 `protobuf:"fixed64,7,opt,name=newSnapshotSearcherOpenMs,proto3" json:"newSnapshotSearcherOpenMs,omitempty"` - NrtWaitTimeMs float64 `protobuf:"fixed64,8,opt,name=nrtWaitTimeMs,proto3" json:"nrtWaitTimeMs,omitempty"` - FacetTimeMs map[string]float64 `protobuf:"bytes,9,rep,name=facetTimeMs,proto3" json:"facetTimeMs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` - RescoreTimeMs float64 `protobuf:"fixed64,10,opt,name=rescoreTimeMs,proto3" json:"rescoreTimeMs,omitempty"` - RescorersTimeMs map[string]float64 `protobuf:"bytes,11,rep,name=rescorersTimeMs,proto3" json:"rescorersTimeMs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` - InnerHitsDiagnostics map[string]*SearchResponse_Diagnostics `protobuf:"bytes,12,rep,name=innerHitsDiagnostics,proto3" json:"innerHitsDiagnostics,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - VectorDiagnostics []*SearchResponse_Diagnostics_VectorDiagnostics `protobuf:"bytes,13,rep,name=vectorDiagnostics,proto3" json:"vectorDiagnostics,omitempty"` - InitialDeadlineMs float64 `protobuf:"fixed64,14,opt,name=initialDeadlineMs,proto3" json:"initialDeadlineMs,omitempty"` + DrillDownQuery string `protobuf:"bytes,3,opt,name=drillDownQuery,proto3" json:"drillDownQuery,omitempty"` + // Time for initial recall and ranking + FirstPassSearchTimeMs float64 `protobuf:"fixed64,4,opt,name=firstPassSearchTimeMs,proto3" json:"firstPassSearchTimeMs,omitempty"` + // Time for highlighting + HighlightTimeMs float64 `protobuf:"fixed64,5,opt,name=highlightTimeMs,proto3" json:"highlightTimeMs,omitempty"` + // Time to fetch fields and perform other fetch tasks + GetFieldsTimeMs float64 `protobuf:"fixed64,6,opt,name=getFieldsTimeMs,proto3" json:"getFieldsTimeMs,omitempty"` + // Time to open a new snapshot searcher + NewSnapshotSearcherOpenMs float64 `protobuf:"fixed64,7,opt,name=newSnapshotSearcherOpenMs,proto3" json:"newSnapshotSearcherOpenMs,omitempty"` + // Time waiting for nrt replication + NrtWaitTimeMs float64 `protobuf:"fixed64,8,opt,name=nrtWaitTimeMs,proto3" json:"nrtWaitTimeMs,omitempty"` + // Time to execute facets + FacetTimeMs map[string]float64 `protobuf:"bytes,9,rep,name=facetTimeMs,proto3" json:"facetTimeMs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + // Time to execute rescorers + RescoreTimeMs float64 `protobuf:"fixed64,10,opt,name=rescoreTimeMs,proto3" json:"rescoreTimeMs,omitempty"` + // Time to execute each rescorer + RescorersTimeMs map[string]float64 `protobuf:"bytes,11,rep,name=rescorersTimeMs,proto3" json:"rescorersTimeMs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + // Inner hits diagnostics + InnerHitsDiagnostics map[string]*SearchResponse_Diagnostics `protobuf:"bytes,12,rep,name=innerHitsDiagnostics,proto3" json:"innerHitsDiagnostics,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Diagnostic info related to kNN vector search queries + VectorDiagnostics []*SearchResponse_Diagnostics_VectorDiagnostics `protobuf:"bytes,13,rep,name=vectorDiagnostics,proto3" json:"vectorDiagnostics,omitempty"` + // Amount of gRPC request deadline remaining at the start of search processing + InitialDeadlineMs float64 `protobuf:"fixed64,14,opt,name=initialDeadlineMs,proto3" json:"initialDeadlineMs,omitempty"` } func (x *SearchResponse_Diagnostics) Reset() { @@ -7988,15 +8240,20 @@ func (x *SearchResponse_Diagnostics) GetInitialDeadlineMs() float64 { return 0 } +// Message for query document hit type SearchResponse_Hit struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LuceneDocId int32 `protobuf:"varint,1,opt,name=luceneDocId,proto3" json:"luceneDocId,omitempty"` - Score float64 `protobuf:"fixed64,2,opt,name=score,proto3" json:"score,omitempty"` - Fields map[string]*SearchResponse_Hit_CompositeFieldValue `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Field name to value - SortedFields map[string]*SearchResponse_Hit_CompositeFieldValue `protobuf:"bytes,4,rep,name=sortedFields,proto3" json:"sortedFields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Sorted field name to value + // Lucene document id + LuceneDocId int32 `protobuf:"varint,1,opt,name=luceneDocId,proto3" json:"luceneDocId,omitempty"` + // Document score + Score float64 `protobuf:"fixed64,2,opt,name=score,proto3" json:"score,omitempty"` + // Retrieved field data + Fields map[string]*SearchResponse_Hit_CompositeFieldValue `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // When using query sorting, sorted field names to values + SortedFields map[string]*SearchResponse_Hit_CompositeFieldValue `protobuf:"bytes,4,rep,name=sortedFields,proto3" json:"sortedFields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Field name to highlighted text fragments Highlights map[string]*SearchResponse_Hit_Highlights `protobuf:"bytes,5,rep,name=highlights,proto3" json:"highlights,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Lucene explanation of the hit @@ -8086,19 +8343,29 @@ func (x *SearchResponse_Hit) GetInnerHits() map[string]*HitsResult { return nil } +// State for use in subsequent searches (search after) type SearchResponse_SearchState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Query time + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Index searcher version SearcherVersion int64 `protobuf:"varint,2,opt,name=searcherVersion,proto3" json:"searcherVersion,omitempty"` + // replaced by lastHitInfo + // // Deprecated: Do not use. - LastDocId int32 `protobuf:"varint,3,opt,name=lastDocId,proto3" json:"lastDocId,omitempty"` // replaced by lastHitInfo + LastDocId int32 `protobuf:"varint,3,opt,name=lastDocId,proto3" json:"lastDocId,omitempty"` + // replaced by lastHitInfo + // // Deprecated: Do not use. - LastFieldValues []string `protobuf:"bytes,4,rep,name=lastFieldValues,proto3" json:"lastFieldValues,omitempty"` // replaced by lastHitInfo + LastFieldValues []string `protobuf:"bytes,4,rep,name=lastFieldValues,proto3" json:"lastFieldValues,omitempty"` + // replaced by lastHitInfo + // // Deprecated: Do not use. - LastScore float32 `protobuf:"fixed32,5,opt,name=lastScore,proto3" json:"lastScore,omitempty"` // replaced by lastHitInfo + LastScore float32 `protobuf:"fixed32,5,opt,name=lastScore,proto3" json:"lastScore,omitempty"` + // Last hit info for search after LastHitInfo *LastHitInfo `protobuf:"bytes,6,opt,name=lastHitInfo,proto3" json:"lastHitInfo,omitempty"` } @@ -8237,6 +8504,7 @@ func (x *SearchResponse_Diagnostics_VectorDiagnostics) GetTotalHits() *TotalHits return nil } +// Field value for a hit type SearchResponse_Hit_FieldValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8371,35 +8639,43 @@ type isSearchResponse_Hit_FieldValue_FieldValues interface { } type SearchResponse_Hit_FieldValue_TextValue struct { - TextValue string `protobuf:"bytes,1,opt,name=textValue,proto3,oneof"` // Value for ATOM and TEXT FieldType + // Value for ATOM and TEXT FieldType + TextValue string `protobuf:"bytes,1,opt,name=textValue,proto3,oneof"` } type SearchResponse_Hit_FieldValue_BooleanValue struct { - BooleanValue bool `protobuf:"varint,2,opt,name=booleanValue,proto3,oneof"` // Value for BOOLEAN FieldType + // Value for BOOLEAN FieldType + BooleanValue bool `protobuf:"varint,2,opt,name=booleanValue,proto3,oneof"` } type SearchResponse_Hit_FieldValue_IntValue struct { - IntValue int32 `protobuf:"varint,3,opt,name=intValue,proto3,oneof"` // Value for INT FieldType + // Value for INT FieldType + IntValue int32 `protobuf:"varint,3,opt,name=intValue,proto3,oneof"` } type SearchResponse_Hit_FieldValue_LongValue struct { - LongValue int64 `protobuf:"varint,4,opt,name=longValue,proto3,oneof"` // Value for LONG and DATE_TIME (as milliseconds since epoch in UTC zone) FieldType + // Value for LONG and DATE_TIME (as milliseconds since epoch in UTC zone) FieldType + LongValue int64 `protobuf:"varint,4,opt,name=longValue,proto3,oneof"` } type SearchResponse_Hit_FieldValue_FloatValue struct { - FloatValue float32 `protobuf:"fixed32,5,opt,name=floatValue,proto3,oneof"` // Value for FLOAT FieldType + // Value for FLOAT FieldType + FloatValue float32 `protobuf:"fixed32,5,opt,name=floatValue,proto3,oneof"` } type SearchResponse_Hit_FieldValue_DoubleValue struct { - DoubleValue float64 `protobuf:"fixed64,6,opt,name=doubleValue,proto3,oneof"` // Value for DOUBLE FieldType + // Value for DOUBLE FieldType + DoubleValue float64 `protobuf:"fixed64,6,opt,name=doubleValue,proto3,oneof"` } type SearchResponse_Hit_FieldValue_LatLngValue struct { - LatLngValue *latlng.LatLng `protobuf:"bytes,7,opt,name=latLngValue,proto3,oneof"` // Value for LAT_LON FieldType + // Value for LAT_LON FieldType + LatLngValue *latlng.LatLng `protobuf:"bytes,7,opt,name=latLngValue,proto3,oneof"` } type SearchResponse_Hit_FieldValue_StructValue struct { - StructValue *structpb.Struct `protobuf:"bytes,8,opt,name=structValue,proto3,oneof"` // Value for structured data + // Value for structured data + StructValue *structpb.Struct `protobuf:"bytes,8,opt,name=structValue,proto3,oneof"` } type SearchResponse_Hit_FieldValue_VectorValue struct { @@ -8408,6 +8684,7 @@ type SearchResponse_Hit_FieldValue_VectorValue struct { } type SearchResponse_Hit_FieldValue_ListValue struct { + // List of values ListValue *structpb.ListValue `protobuf:"bytes,10,opt,name=listValue,proto3,oneof"` } @@ -8431,11 +8708,13 @@ func (*SearchResponse_Hit_FieldValue_VectorValue) isSearchResponse_Hit_FieldValu func (*SearchResponse_Hit_FieldValue_ListValue) isSearchResponse_Hit_FieldValue_FieldValues() {} +// Field with multiple values type SearchResponse_Hit_CompositeFieldValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Field values FieldValue []*SearchResponse_Hit_FieldValue `protobuf:"bytes,3,rep,name=fieldValue,proto3" json:"fieldValue,omitempty"` } @@ -8478,6 +8757,7 @@ func (x *SearchResponse_Hit_CompositeFieldValue) GetFieldValue() []*SearchRespon return nil } +// Highlighted text result type SearchResponse_Hit_Highlights struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8583,6 +8863,7 @@ func (x *SearchResponse_Hit_FieldValue_Vector) GetBytesValue() []byte { return nil } +// Stats for aggregating collector type ProfileResult_AdditionalCollectorStats struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8631,13 +8912,15 @@ func (x *ProfileResult_AdditionalCollectorStats) GetCollectTimeMs() float64 { return 0 } +// Stats for parallel search collector type ProfileResult_CollectorStats struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // If collection for this index slice was terminated early, such as by a timeout. - Terminated bool `protobuf:"varint,1,opt,name=terminated,proto3" json:"terminated,omitempty"` + // If collection for this index slice was terminated early, such as by a timeout + Terminated bool `protobuf:"varint,1,opt,name=terminated,proto3" json:"terminated,omitempty"` + // Stats for each collector segment SegmentStats []*ProfileResult_SegmentStats `protobuf:"bytes,2,rep,name=segmentStats,proto3" json:"segmentStats,omitempty"` // Total docs collected by this collector TotalCollectedCount int32 `protobuf:"varint,3,opt,name=totalCollectedCount,proto3" json:"totalCollectedCount,omitempty"` @@ -8714,6 +8997,7 @@ func (x *ProfileResult_CollectorStats) GetAdditionalCollectorStats() map[string] return nil } +// Stats for a single collector segment type ProfileResult_SegmentStats struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8798,6 +9082,7 @@ func (x *ProfileResult_SegmentStats) GetCollectTimeMs() float64 { return 0 } +// Stats for search phase type ProfileResult_SearchStats struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8806,8 +9091,9 @@ type ProfileResult_SearchStats struct { // Total time for all document collection TotalCollectTimeMs float64 `protobuf:"fixed64,1,opt,name=totalCollectTimeMs,proto3" json:"totalCollectTimeMs,omitempty"` // Total time to reduce results from all parallel search slices - TotalReduceTimeMs float64 `protobuf:"fixed64,2,opt,name=totalReduceTimeMs,proto3" json:"totalReduceTimeMs,omitempty"` - CollectorStats []*ProfileResult_CollectorStats `protobuf:"bytes,3,rep,name=collectorStats,proto3" json:"collectorStats,omitempty"` + TotalReduceTimeMs float64 `protobuf:"fixed64,2,opt,name=totalReduceTimeMs,proto3" json:"totalReduceTimeMs,omitempty"` + // Stats for each collector + CollectorStats []*ProfileResult_CollectorStats `protobuf:"bytes,3,rep,name=collectorStats,proto3" json:"collectorStats,omitempty"` } func (x *ProfileResult_SearchStats) Reset() { @@ -8868,9 +9154,11 @@ type BucketResult_Bucket struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Count int32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` - // Nested collector results for sub-aggregations of this bucket. + // Bucket key + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // Bucket item count + Count int32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + // Nested collector results for sub-aggregations of this bucket NestedCollectorResults map[string]*CollectorResult `protobuf:"bytes,8,rep,name=nestedCollectorResults,proto3" json:"nestedCollectorResults,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -8934,33 +9222,40 @@ type Highlight_Settings struct { // Specify type of highlighter to use. Ignored right now in nrtsearch. HighlighterType Highlight_Type `protobuf:"varint,1,opt,name=highlighter_type,json=highlighterType,proto3,enum=luceneserver.Highlight_Type" json:"highlighter_type,omitempty"` - // Used along with post_tags to specify how to wrap the highlighted text. + // Used along with post_tags to specify how to wrap the highlighted text PreTags []string `protobuf:"bytes,2,rep,name=pre_tags,json=preTags,proto3" json:"pre_tags,omitempty"` - // Used along with pre_tags to specify how to wrap the highlighted text. + // Used along with pre_tags to specify how to wrap the highlighted text PostTags []string `protobuf:"bytes,3,rep,name=post_tags,json=postTags,proto3" json:"post_tags,omitempty"` // Number of characters in highlighted fragment, 100 by default. Set it to be 0 to fetch the entire field. FragmentSize *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=fragment_size,json=fragmentSize,proto3" json:"fragment_size,omitempty"` - // Maximum number of highlight fragments to return, 5 by default. If set to 0 returns entire text as a single fragment ignoring fragment_size. + // Maximum number of highlight fragments to return, 5 by default. If set to 0 returns entire text as a single + // fragment ignoring fragment_size. MaxNumberOfFragments *wrapperspb.UInt32Value `protobuf:"bytes,5,opt,name=max_number_of_fragments,json=maxNumberOfFragments,proto3" json:"max_number_of_fragments,omitempty"` - // Specify a query here if highlighting is desired against a different query than the search query. + // Specify a query here if highlighting is desired against a different query than the search query HighlightQuery *Query `protobuf:"bytes,6,opt,name=highlight_query,json=highlightQuery,proto3" json:"highlight_query,omitempty"` - // Set to true to highlight fields only if specified in the search query. + // Set to true to highlight fields only if specified in the search query FieldMatch *wrapperspb.BoolValue `protobuf:"bytes,7,opt,name=field_match,json=fieldMatch,proto3" json:"field_match,omitempty"` - // Sorts highlighted fragments by score when set to true. By default, fragments will be output in the order they appear in the field. (Default is true) + // Sorts highlighted fragments by score when set to true. By default, fragments will be output in the order + // they appear in the field. (Default is true) ScoreOrdered *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=score_ordered,json=scoreOrdered,proto3" json:"score_ordered,omitempty"` // Select Fragmenter between span (default) and simple. This is only applicable for plain highlighters. Fragmenter *wrapperspb.StringValue `protobuf:"bytes,9,opt,name=fragmenter,proto3" json:"fragmenter,omitempty"` - // Let the fragment builder respect the multivalue fields. Each fragment won't cross multiple value fields if set true. (Default is false) + // Let the fragment builder respect the multivalue fields. Each fragment won't cross multiple value fields + // if set true. (Default is false) DiscreteMultivalue *wrapperspb.BoolValue `protobuf:"bytes,10,opt,name=discrete_multivalue,json=discreteMultivalue,proto3" json:"discrete_multivalue,omitempty"` - // When highlighter_type is CUSTOM, use this string identifier to specify the highlighter. It is ignored for any other highlighter_types. + // When highlighter_type is CUSTOM, use this string identifier to specify the highlighter. It is ignored for + // any other highlighter_types. CustomHighlighterName string `protobuf:"bytes,11,opt,name=custom_highlighter_name,json=customHighlighterName,proto3" json:"custom_highlighter_name,omitempty"` - // Optional Custom parameters for custom highlighters. If a field overriding is present, the global setting will be omitted for this field, and no merge will happen. + // Optional Custom parameters for custom highlighters. If a field overriding is present, the global setting + // will be omitted for this field, and no merge will happen. CustomHighlighterParams *structpb.Struct `protobuf:"bytes,12,opt,name=custom_highlighter_params,json=customHighlighterParams,proto3" json:"custom_highlighter_params,omitempty"` - // Define the boundary decision when creating fragments. Options are "simple" (default in fast vector highlighter), "word" or "sentence". + // Define the boundary decision when creating fragments. Options are "simple" (default in fast vector + // highlighter), "word" or "sentence". BoundaryScanner *wrapperspb.StringValue `protobuf:"bytes,13,opt,name=boundary_scanner,json=boundaryScanner,proto3" json:"boundary_scanner,omitempty"` - // Terminating chars when using "simple" boundary_scanner. The default is ".,!? \t\n". + // Terminating chars when using "simple" boundary_scanner. The default is ".,!? \t\n" BoundaryChars *wrapperspb.StringValue `protobuf:"bytes,14,opt,name=boundary_chars,json=boundaryChars,proto3" json:"boundary_chars,omitempty"` - // Number of chars to scan before finding the boundary_chars if using "simple" boundary scanner; If "boundary_chars" is not found after max scan, fragments will start/end at the original place. Default is 20. + // Number of chars to scan before finding the boundary_chars if using "simple" boundary scanner; If + // "boundary_chars" is not found after max scan, fragments will start/end at the original place. Default is 20. BoundaryMaxScan *wrapperspb.UInt32Value `protobuf:"bytes,15,opt,name=boundary_max_scan,json=boundaryMaxScan,proto3" json:"boundary_max_scan,omitempty"` // Locale used in boundary scanner when using "word" or "sentence" boundary_scanner. Examples: "en-US", "ch-ZH". BoundaryScannerLocale *wrapperspb.StringValue `protobuf:"bytes,16,opt,name=boundary_scanner_locale,json=boundaryScannerLocale,proto3" json:"boundary_scanner_locale,omitempty"`