Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / google-proto-files / google / cloud / talent / v4beta1 / job_service.proto
1 // Copyright 2019 Google LLC.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15
16 syntax = "proto3";
17
18 package google.cloud.talent.v4beta1;
19
20 import "google/api/annotations.proto";
21 import "google/cloud/talent/v4beta1/batch.proto";
22 import "google/cloud/talent/v4beta1/common.proto";
23 import "google/cloud/talent/v4beta1/filters.proto";
24 import "google/cloud/talent/v4beta1/histogram.proto";
25 import "google/cloud/talent/v4beta1/job.proto";
26 import "google/longrunning/operations.proto";
27 import "google/protobuf/duration.proto";
28 import "google/protobuf/empty.proto";
29 import "google/protobuf/field_mask.proto";
30
31 option go_package = "google.golang.org/genproto/googleapis/cloud/talent/v4beta1;talent";
32 option java_multiple_files = true;
33 option java_outer_classname = "JobServiceProto";
34 option java_package = "com.google.cloud.talent.v4beta1";
35 option objc_class_prefix = "CTS";
36
37 // A service handles job management, including job CRUD, enumeration and search.
38 service JobService {
39   // Creates a new job.
40   //
41   // Typically, the job becomes searchable within 10 seconds, but it may take
42   // up to 5 minutes.
43   rpc CreateJob(CreateJobRequest) returns (Job) {
44     option (google.api.http) = {
45       post: "/v4beta1/{parent=projects/*}/jobs"
46       body: "*"
47     };
48   }
49
50   // Retrieves the specified job, whose status is OPEN or recently EXPIRED
51   // within the last 90 days.
52   rpc GetJob(GetJobRequest) returns (Job) {
53     option (google.api.http) = {
54       get: "/v4beta1/{name=projects/*/jobs/*}"
55     };
56   }
57
58   // Updates specified job.
59   //
60   // Typically, updated contents become visible in search results within 10
61   // seconds, but it may take up to 5 minutes.
62   rpc UpdateJob(UpdateJobRequest) returns (Job) {
63     option (google.api.http) = {
64       patch: "/v4beta1/{job.name=projects/*/jobs/*}"
65       body: "*"
66     };
67   }
68
69   // Deletes the specified job.
70   //
71   // Typically, the job becomes unsearchable within 10 seconds, but it may take
72   // up to 5 minutes.
73   rpc DeleteJob(DeleteJobRequest) returns (google.protobuf.Empty) {
74     option (google.api.http) = {
75       delete: "/v4beta1/{name=projects/*/jobs/*}"
76     };
77   }
78
79   // Lists jobs by filter.
80   rpc ListJobs(ListJobsRequest) returns (ListJobsResponse) {
81     option (google.api.http) = {
82       get: "/v4beta1/{parent=projects/*}/jobs"
83     };
84   }
85
86   // Deletes a list of [Job][google.cloud.talent.v4beta1.Job]s by filter.
87   rpc BatchDeleteJobs(BatchDeleteJobsRequest) returns (google.protobuf.Empty) {
88     option (google.api.http) = {
89       post: "/v4beta1/{parent=projects/*}/jobs:batchDelete"
90       body: "*"
91     };
92   }
93
94   // Searches for jobs using the provided
95   // [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
96   //
97   // This call constrains the
98   // [visibility][google.cloud.talent.v4beta1.Job.visibility] of jobs present in
99   // the database, and only returns jobs that the caller has permission to
100   // search against.
101   rpc SearchJobs(SearchJobsRequest) returns (SearchJobsResponse) {
102     option (google.api.http) = {
103       post: "/v4beta1/{parent=projects/*}/jobs:search"
104       body: "*"
105     };
106   }
107
108   // Searches for jobs using the provided
109   // [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
110   //
111   // This API call is intended for the use case of targeting passive job
112   // seekers (for example, job seekers who have signed up to receive email
113   // alerts about potential job opportunities), and has different algorithmic
114   // adjustments that are targeted to passive job seekers.
115   //
116   // This call constrains the
117   // [visibility][google.cloud.talent.v4beta1.Job.visibility] of jobs present in
118   // the database, and only returns jobs the caller has permission to search
119   // against.
120   rpc SearchJobsForAlert(SearchJobsRequest) returns (SearchJobsResponse) {
121     option (google.api.http) = {
122       post: "/v4beta1/{parent=projects/*}/jobs:searchForAlert"
123       body: "*"
124     };
125   }
126 }
127
128 // Input only.
129 //
130 // Create job request.
131 message CreateJobRequest {
132   // Required.
133   //
134   // The resource name of the project under which the job is created.
135   //
136   // The format is "projects/{project_id}", for example,
137   // "projects/api-test-project".
138   string parent = 1;
139
140   // Required.
141   //
142   // The Job to be created.
143   Job job = 2;
144 }
145
146 // Input only.
147 //
148 // Get job request.
149 message GetJobRequest {
150   // Required.
151   //
152   // The resource name of the job to retrieve.
153   //
154   // The format is "projects/{project_id}/jobs/{job_id}",
155   // for example, "projects/api-test-project/jobs/1234".
156   string name = 1;
157 }
158
159 // Input only.
160 //
161 // Update job request.
162 message UpdateJobRequest {
163   // Required.
164   //
165   // The Job to be updated.
166   Job job = 1;
167
168   // Optional but strongly recommended to be provided for the best service
169   // experience.
170   //
171   // If [update_mask][google.cloud.talent.v4beta1.UpdateJobRequest.update_mask]
172   // is provided, only the specified fields in
173   // [job][google.cloud.talent.v4beta1.UpdateJobRequest.job] are updated.
174   // Otherwise all the fields are updated.
175   //
176   // A field mask to restrict the fields that are updated. Only
177   // top level fields of [Job][google.cloud.talent.v4beta1.Job] are supported.
178   google.protobuf.FieldMask update_mask = 2;
179 }
180
181 // Input only.
182 //
183 // Delete job request.
184 message DeleteJobRequest {
185   // Required.
186   //
187   // The resource name of the job to be deleted.
188   //
189   // The format is "projects/{project_id}/jobs/{job_id}",
190   // for example, "projects/api-test-project/jobs/1234".
191   string name = 1;
192 }
193
194 // Input only.
195 //
196 // Batch delete jobs request.
197 message BatchDeleteJobsRequest {
198   // Required.
199   //
200   // The resource name of the project under which the job is created.
201   //
202   // The format is "projects/{project_id}", for example,
203   // "projects/api-test-project".
204   string parent = 1;
205
206   // Required.
207   //
208   // The filter string specifies the jobs to be deleted.
209   //
210   // Supported operator: =, AND
211   //
212   // The fields eligible for filtering are:
213   //
214   // * `companyName` (Required)
215   // * `requisitionId` (Required)
216   //
217   // Sample Query: companyName = "projects/api-test-project/companies/123" AND
218   // requisitionId = "req-1"
219   string filter = 2;
220 }
221
222 // Input only.
223 //
224 // List jobs request.
225 message ListJobsRequest {
226   // Required.
227   //
228   // The resource name of the project under which the job is created.
229   //
230   // The format is "projects/{project_id}", for example,
231   // "projects/api-test-project".
232   string parent = 1;
233
234   // Required.
235   //
236   // The filter string specifies the jobs to be enumerated.
237   //
238   // Supported operator: =, AND
239   //
240   // The fields eligible for filtering are:
241   //
242   // * `companyName` (Required)
243   // * `requisitionId` (Optional)
244   // * `status` (Optional) Available values: OPEN, EXPIRED, ALL. Defaults to
245   // OPEN if no value is specified.
246   //
247   // Sample Query:
248   //
249   // * companyName = "projects/api-test-project/companies/123"
250   // * companyName = "projects/api-test-project/companies/123" AND requisitionId
251   // = "req-1"
252   // * companyName = "projects/api-test-project/companies/123" AND status =
253   // "EXPIRED"
254   string filter = 2;
255
256   // Optional.
257   //
258   // The starting point of a query result.
259   string page_token = 3;
260
261   // Optional.
262   //
263   // The maximum number of jobs to be returned per page of results.
264   //
265   // If [job_view][google.cloud.talent.v4beta1.ListJobsRequest.job_view] is set
266   // to
267   // [JobView.JOB_VIEW_ID_ONLY][google.cloud.talent.v4beta1.JobView.JOB_VIEW_ID_ONLY],
268   // the maximum allowed page size is 1000. Otherwise, the maximum allowed page
269   // size is 100.
270   //
271   // Default is 100 if empty or a number < 1 is specified.
272   int32 page_size = 4;
273
274   // Optional.
275   //
276   // The desired job attributes returned for jobs in the
277   // search response. Defaults to
278   // [JobView.JOB_VIEW_FULL][google.cloud.talent.v4beta1.JobView.JOB_VIEW_FULL]
279   // if no value is specified.
280   JobView job_view = 5;
281 }
282
283 // An enum that specifies the job attributes that are returned in the
284 // [MatchingJob.Job][] in
285 // [SearchJobsResponse][google.cloud.talent.v4beta1.SearchJobsResponse] or
286 // [Job][google.cloud.talent.v4beta1.Job] objects in
287 // [ListJobsResponse][google.cloud.talent.v4beta1.ListJobsResponse].
288 enum JobView {
289   // Default value.
290   JOB_VIEW_UNSPECIFIED = 0;
291
292   // A ID only view of job, with following attributes:
293   // [Job.name][google.cloud.talent.v4beta1.Job.name],
294   // [Job.requisition_id][google.cloud.talent.v4beta1.Job.requisition_id],
295   // [Job.language_code][google.cloud.talent.v4beta1.Job.language_code].
296   JOB_VIEW_ID_ONLY = 1;
297
298   // A minimal view of the job, with the following attributes:
299   // [Job.name][google.cloud.talent.v4beta1.Job.name],
300   // [Job.requisition_id][google.cloud.talent.v4beta1.Job.requisition_id],
301   // [Job.job_title][],
302   // [Job.company_name][google.cloud.talent.v4beta1.Job.company_name],
303   // [Job.DerivedInfo.locations][google.cloud.talent.v4beta1.Job.DerivedInfo.locations],
304   // [Job.language_code][google.cloud.talent.v4beta1.Job.language_code].
305   JOB_VIEW_MINIMAL = 2;
306
307   // A small view of the job, with the following attributes in the search
308   // results: [Job.name][google.cloud.talent.v4beta1.Job.name],
309   // [Job.requisition_id][google.cloud.talent.v4beta1.Job.requisition_id],
310   // [Job.job_title][],
311   // [Job.company_name][google.cloud.talent.v4beta1.Job.company_name],
312   // [Job.DerivedInfo.locations][google.cloud.talent.v4beta1.Job.DerivedInfo.locations],
313   // [Job.visibility][google.cloud.talent.v4beta1.Job.visibility],
314   // [Job.language_code][google.cloud.talent.v4beta1.Job.language_code],
315   // [Job.description][google.cloud.talent.v4beta1.Job.description].
316   JOB_VIEW_SMALL = 3;
317
318   // All available attributes are included in the search results.
319   JOB_VIEW_FULL = 4;
320 }
321
322 // Output only.
323 //
324 // List jobs response.
325 message ListJobsResponse {
326   // The Jobs for a given company.
327   //
328   // The maximum number of items returned is based on the limit field
329   // provided in the request.
330   repeated Job jobs = 1;
331
332   // A token to retrieve the next page of results.
333   string next_page_token = 2;
334
335   // Additional information for the API invocation, such as the request
336   // tracking id.
337   ResponseMetadata metadata = 3;
338 }
339
340 // Input only.
341 //
342 // The Request body of the `SearchJobs` call.
343 message SearchJobsRequest {
344   // Input only.
345   //
346   // Custom ranking information for
347   // [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
348   message CustomRankingInfo {
349     // The importance level for
350     // [CustomRankingInfo.ranking_expression][google.cloud.talent.v4beta1.SearchJobsRequest.CustomRankingInfo.ranking_expression].
351     enum ImportanceLevel {
352       // Default value if the importance level isn't specified.
353       IMPORTANCE_LEVEL_UNSPECIFIED = 0;
354
355       // The given ranking expression is of None importance, existing relevance
356       // score (determined by API algorithm) dominates job's final ranking
357       // position.
358       NONE = 1;
359
360       // The given ranking expression is of Low importance in terms of job's
361       // final ranking position compared to existing relevance
362       // score (determined by API algorithm).
363       LOW = 2;
364
365       // The given ranking expression is of Mild importance in terms of job's
366       // final ranking position compared to existing relevance
367       // score (determined by API algorithm).
368       MILD = 3;
369
370       // The given ranking expression is of Medium importance in terms of job's
371       // final ranking position compared to existing relevance
372       // score (determined by API algorithm).
373       MEDIUM = 4;
374
375       // The given ranking expression is of High importance in terms of job's
376       // final ranking position compared to existing relevance
377       // score (determined by API algorithm).
378       HIGH = 5;
379
380       // The given ranking expression is of Extreme importance, and dominates
381       // job's final ranking position with existing relevance
382       // score (determined by API algorithm) ignored.
383       EXTREME = 6;
384     }
385
386     // Required.
387     //
388     // Controls over how important the score of
389     // [CustomRankingInfo.ranking_expression][google.cloud.talent.v4beta1.SearchJobsRequest.CustomRankingInfo.ranking_expression]
390     // gets applied to job's final ranking position.
391     //
392     // An error is thrown if not specified.
393     ImportanceLevel importance_level = 1;
394
395     // Required.
396     //
397     // Controls over how job documents get ranked on top of existing relevance
398     // score (determined by API algorithm). The product of ranking expression
399     // and relevance score is used to determine job's final ranking position.
400     //
401     // The syntax for this expression is a subset of Google SQL syntax.
402     //
403     // Supported operators are: +, -, *, /, where the left and right side of
404     // the operator is either a numeric
405     // [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes]
406     // key, integer/double value or an expression that can be evaluated to a
407     // number.
408     //
409     // Parenthesis are supported to adjust calculation precedence. The
410     // expression must be < 100 characters in length.
411     //
412     // Sample ranking expression
413     // (year + 25) * 0.25 - (freshness / 0.5)
414     string ranking_expression = 2;
415   }
416
417   // A string-represented enumeration of the job search mode. The service
418   // operate differently for different modes of service.
419   enum SearchMode {
420     // The mode of the search method isn't specified.
421     SEARCH_MODE_UNSPECIFIED = 0;
422
423     // The job search matches against all jobs, and featured jobs
424     // (jobs with promotionValue > 0) are not specially handled.
425     JOB_SEARCH = 1;
426
427     // The job search matches only against featured jobs (jobs with a
428     // promotionValue > 0). This method doesn't return any jobs having a
429     // promotionValue <= 0. The search results order is determined by the
430     // promotionValue (jobs with a higher promotionValue are returned higher up
431     // in the search results), with relevance being used as a tiebreaker.
432     FEATURED_JOB_SEARCH = 2;
433   }
434
435   // Controls whether highly similar jobs are returned next to each other in
436   // the search results. Jobs are identified as highly similar based on
437   // their titles, job categories, and locations. Highly similar results are
438   // clustered so that only one representative job of the cluster is
439   // displayed to the job seeker higher up in the results, with the other jobs
440   // being displayed lower down in the results.
441   enum DiversificationLevel {
442     // The diversification level isn't specified.
443     DIVERSIFICATION_LEVEL_UNSPECIFIED = 0;
444
445     // Disables diversification. Jobs that would normally be pushed to the last
446     // page would not have their positions altered. This may result in highly
447     // similar jobs appearing in sequence in the search results.
448     DISABLED = 1;
449
450     // Default diversifying behavior. The result list is ordered so that
451     // highly similar results are pushed to the end of the last page of search
452     // results.
453     SIMPLE = 2;
454   }
455
456   // Required.
457   //
458   // The resource name of the project to search within.
459   //
460   // The format is "projects/{project_id}", for example,
461   // "projects/api-test-project".
462   string parent = 1;
463
464   // Optional.
465   //
466   // Mode of a search.
467   //
468   // Defaults to
469   // [SearchMode.JOB_SEARCH][google.cloud.talent.v4beta1.SearchJobsRequest.SearchMode.JOB_SEARCH].
470   SearchMode search_mode = 2;
471
472   // Required.
473   //
474   // The meta information collected about the job searcher, used to improve the
475   // search quality of the service.. The identifiers, (such as `user_id`) are
476   // provided by users, and must be unique and consistent.
477   RequestMetadata request_metadata = 3;
478
479   // Optional.
480   //
481   // Query used to search against jobs, such as keyword, location filters, etc.
482   JobQuery job_query = 4;
483
484   // Optional.
485   //
486   // Controls whether to broaden the search when it produces sparse results.
487   // Broadened queries append results to the end of the matching results
488   // list.
489   //
490   // Defaults to false.
491   bool enable_broadening = 5;
492
493   // Optional.
494   //
495   // Controls if the search job request requires the return of a precise
496   // count of the first 300 results. Setting this to `true` ensures
497   // consistency in the number of results per page. Best practice is to set this
498   // value to true if a client allows users to jump directly to a
499   // non-sequential search results page.
500   //
501   // Enabling this flag may adversely impact performance.
502   //
503   // Defaults to false.
504   bool require_precise_result_size = 6;
505
506   // Optional.
507   //
508   // An expression specifies a histogram request against matching jobs.
509   //
510   // Expression syntax is an aggregation function call with histogram facets and
511   // other options.
512   //
513   // Available aggregation function calls are:
514   // * `count(string_histogram_facet)`: Count the number of matching entities,
515   // for each distinct attribute value.
516   // * `count(numeric_histogram_facet, list of buckets)`: Count the number of
517   // matching entities within each bucket.
518   //
519   // Data types:
520   //
521   // * Histogram facet: facet names with format [a-zA-Z][a-zA-Z0-9_]+.
522   // * String: string like "any string with backslash escape for quote(\")."
523   // * Number: whole number and floating point number like 10, -1 and -0.01.
524   // * List: list of elements with comma(,) separator surrounded by square
525   // brackets, for example, [1, 2, 3] and ["one", "two", "three"].
526   //
527   // Built-in constants:
528   //
529   // * MIN (minimum number similar to java Double.MIN_VALUE)
530   // * MAX (maximum number similar to java Double.MAX_VALUE)
531   //
532   // Built-in functions:
533   //
534   // * bucket(start, end[, label]): bucket built-in function creates a bucket
535   // with range of [start, end). Note that the end is exclusive, for example,
536   // bucket(1, MAX, "positive number") or bucket(1, 10).
537   //
538   // Job histogram facets:
539   //
540   // * company_id: histogram by [Job.distributor_company_id][].
541   // * company_display_name: histogram by
542   // [Job.company_display_name][google.cloud.talent.v4beta1.Job.company_display_name].
543   // * employment_type: histogram by
544   // [Job.employment_types][google.cloud.talent.v4beta1.Job.employment_types],
545   // for example, "FULL_TIME", "PART_TIME".
546   // * company_size: histogram by
547   // [CompanySize][google.cloud.talent.v4beta1.CompanySize], for example,
548   // "SMALL", "MEDIUM", "BIG".
549   // * publish_time_in_month: histogram by the [Job.publish_time][] in months.
550   // Must specify list of numeric buckets in spec.
551   // * publish_time_in_year: histogram by the [Job.publish_time][] in years.
552   // Must specify list of numeric buckets in spec.
553   // * degree_type: histogram by the [Job.degree_type][], for example,
554   // "Bachelors", "Masters".
555   // * job_level: histogram by the
556   // [Job.job_level][google.cloud.talent.v4beta1.Job.job_level], for example,
557   // "Entry Level".
558   // * country: histogram by the country code of jobs, for example, "US", "FR".
559   // * admin1: histogram by the admin1 code of jobs, which is a global
560   // placeholder referring to the state, province, or the particular term a
561   // country uses to define the geographic structure below the country level,
562   // for example, "CA", "IL".
563   // * city: histogram by a combination of the "city name, admin1 code". For
564   // example,  "Mountain View, CA", "New York, NY".
565   // * admin1_country: histogram by a combination of the "admin1 code, country",
566   // for example, "CA, US", "IL, US".
567   // * city_coordinate: histogram by the city center's GPS coordinates (latitude
568   // and longitude), for example, 37.4038522,-122.0987765. Since the coordinates
569   // of a city center can change, customers may need to refresh them
570   // periodically.
571   // * locale: histogram by the
572   // [Job.language_code][google.cloud.talent.v4beta1.Job.language_code], for
573   // example, "en-US", "fr-FR".
574   // * language: histogram by the language subtag of the
575   // [Job.language_code][google.cloud.talent.v4beta1.Job.language_code], for
576   // example, "en", "fr".
577   // * category: histogram by the
578   // [JobCategory][google.cloud.talent.v4beta1.JobCategory], for example,
579   // "COMPUTER_AND_IT", "HEALTHCARE".
580   // * base_compensation_unit: histogram by the [CompensationUnit][] of base
581   // salary, for example, "WEEKLY", "MONTHLY".
582   // * base_compensation: histogram by the base salary. Must specify list of
583   // numeric buckets to group results by.
584   // * annualized_base_compensation: histogram by the base annualized salary.
585   // Must specify list of numeric buckets to group results by.
586   // * annualized_total_compensation: histogram by the total annualized salary.
587   // Must specify list of numeric buckets to group results by.
588   // * string_custom_attribute: histogram by string
589   // [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes].
590   // Values can be accessed via square bracket notations like
591   // string_custom_attribute["key1"].
592   // * numeric_custom_attribute: histogram by numeric
593   // [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes].
594   // Values can be accessed via square bracket notations like
595   // numeric_custom_attribute["key1"]. Must specify list of numeric buckets to
596   // group results by.
597   //
598   // Example expressions:
599   // * count(admin1)
600   // * count(base_compensation, [bucket(1000, 10000), bucket(10000, 100000),
601   // bucket(100000, MAX)])
602   // * count(string_custom_attribute["some-string-custom-attribute"])
603   // * count(numeric_custom_attribute["some-numeric-custom-attribute"],
604   // [bucket(MIN, 0, "negative"), bucket(0, MAX, "non-negative"])
605   repeated HistogramQuery histogram_queries = 7;
606
607   // Optional.
608   //
609   // The desired job attributes returned for jobs in the
610   // search response. Defaults to [JobView.SMALL][] if no value is specified.
611   JobView job_view = 8;
612
613   // Optional.
614   //
615   // An integer that specifies the current offset (that is, starting result
616   // location, amongst the jobs deemed by the API as relevant) in search
617   // results. This field is only considered if
618   // [page_token][google.cloud.talent.v4beta1.SearchJobsRequest.page_token] is
619   // unset.
620   //
621   // For example, 0 means to  return results starting from the first matching
622   // job, and 10 means to return from the 11th job. This can be used for
623   // pagination, (for example, pageSize = 10 and offset = 10 means to return
624   // from the second page).
625   int32 offset = 9;
626
627   // Optional.
628   //
629   // A limit on the number of jobs returned in the search results.
630   // Increasing this value above the default value of 10 can increase search
631   // response time. The value can be between 1 and 100.
632   int32 page_size = 10;
633
634   // Optional.
635   //
636   // The token specifying the current offset within
637   // search results. See
638   // [SearchJobsResponse.next_page_token][google.cloud.talent.v4beta1.SearchJobsResponse.next_page_token]
639   // for an explanation of how to obtain the next set of query results.
640   string page_token = 11;
641
642   // Optional.
643   //
644   // The criteria determining how search results are sorted. Default is
645   // "relevance desc".
646   //
647   // Supported options are:
648   //
649   // * "relevance desc": By relevance descending, as determined by the API
650   // algorithms. Relevance thresholding of query results is only available
651   // with this ordering.
652   // * "posting`_`publish`_`time desc": By
653   // [Job.posting_publish_time][google.cloud.talent.v4beta1.Job.posting_publish_time]
654   // descending.
655   // * "posting`_`update`_`time desc": By
656   // [Job.posting_update_time][google.cloud.talent.v4beta1.Job.posting_update_time]
657   // descending.
658   // * "title": By [Job.title][google.cloud.talent.v4beta1.Job.title] ascending.
659   // * "title desc": By [Job.title][google.cloud.talent.v4beta1.Job.title]
660   // descending.
661   // * "annualized`_`base`_`compensation": By job's
662   // [CompensationInfo.annualized_base_compensation_range][google.cloud.talent.v4beta1.CompensationInfo.annualized_base_compensation_range]
663   // ascending. Jobs whose annualized base compensation is unspecified are put
664   // at the end of search results.
665   // * "annualized`_`base`_`compensation desc": By job's
666   // [CompensationInfo.annualized_base_compensation_range][google.cloud.talent.v4beta1.CompensationInfo.annualized_base_compensation_range]
667   // descending. Jobs whose annualized base compensation is unspecified are put
668   // at the end of search results.
669   // * "annualized`_`total`_`compensation": By job's
670   // [CompensationInfo.annualized_total_compensation_range][google.cloud.talent.v4beta1.CompensationInfo.annualized_total_compensation_range]
671   // ascending. Jobs whose annualized base compensation is unspecified are put
672   // at the end of search results.
673   // * "annualized`_`total`_`compensation desc": By job's
674   // [CompensationInfo.annualized_total_compensation_range][google.cloud.talent.v4beta1.CompensationInfo.annualized_total_compensation_range]
675   // descending. Jobs whose annualized base compensation is unspecified are put
676   // at the end of search results.
677   // * "custom`_`ranking desc": By the relevance score adjusted to the
678   // [SearchJobsRequest.custom_ranking_info.ranking_expression][] with weight
679   // factor assigned by
680   // [SearchJobsRequest.custom_ranking_info.importance_level][] in descending
681   // order.
682   // * "location`_`distance": By the distance between the location on jobs and
683   //  locations specified in the
684   // [SearchJobsRequest.job_query.location_filters][].
685   // When this order is selected, the
686   // [SearchJobsRequest.job_query.location_filters][] must not be empty. When
687   // a job has multiple locations, the location closest to one of the locations
688   // specified in the location filter will be used to calculate location
689   // distance. Distance is calculated by the distance between two lat/long
690   // coordinates, with a precision of 10e-4 degrees (11.3 meters).
691   // Jobs that don't have locations specified will be ranked below jobs having
692   // locations.
693   // Diversification strategy is still applied unless explicitly disabled in
694   // [SearchJobsRequest.diversification_level][google.cloud.talent.v4beta1.SearchJobsRequest.diversification_level].
695   string order_by = 12;
696
697   // Optional.
698   //
699   // Controls whether highly similar jobs are returned next to each other in
700   // the search results. Jobs are identified as highly similar based on
701   // their titles, job categories, and locations. Highly similar results are
702   // clustered so that only one representative job of the cluster is
703   // displayed to the job seeker higher up in the results, with the other jobs
704   // being displayed lower down in the results.
705   //
706   // Defaults to
707   // [DiversificationLevel.SIMPLE][google.cloud.talent.v4beta1.SearchJobsRequest.DiversificationLevel.SIMPLE]
708   // if no value is specified.
709   DiversificationLevel diversification_level = 13;
710
711   // Optional.
712   //
713   // Controls over how job documents get ranked on top of existing relevance
714   // score (determined by API algorithm).
715   CustomRankingInfo custom_ranking_info = 14;
716
717   // Optional.
718   //
719   // Controls whether to disable exact keyword match on [Job.job_title][],
720   // [Job.description][google.cloud.talent.v4beta1.Job.description],
721   // [Job.company_display_name][google.cloud.talent.v4beta1.Job.company_display_name],
722   // [Job.locations][0],
723   // [Job.qualifications][google.cloud.talent.v4beta1.Job.qualifications]. When
724   // disable keyword match is turned off, a keyword match returns jobs that do
725   // not match given category filters when there are matching keywords. For
726   // example, for the query "program manager," a result is returned even if the
727   // job posting has the title "software developer," which doesn't fall into
728   // "program manager" ontology, but does have "program manager" appearing in
729   // its description.
730   //
731   // For queries like "cloud" that don't contain title or
732   // location specific ontology, jobs with "cloud" keyword matches are returned
733   // regardless of this flag's value.
734   //
735   // Please use [Company.keyword_searchable_custom_fields][] or
736   // [Company.keyword_searchable_custom_attributes][] if company specific
737   // globally matched custom field/attribute string values is needed. Enabling
738   // keyword match improves recall of subsequent search requests.
739   //
740   // Defaults to false.
741   bool disable_keyword_match = 16;
742 }
743
744 // Output only.
745 //
746 // Response for SearchJob method.
747 message SearchJobsResponse {
748   // Output only.
749   //
750   // Job entry with metadata inside
751   // [SearchJobsResponse][google.cloud.talent.v4beta1.SearchJobsResponse].
752   message MatchingJob {
753     // Job resource that matches the specified
754     // [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
755     Job job = 1;
756
757     // A summary of the job with core information that's displayed on the search
758     // results listing page.
759     string job_summary = 2;
760
761     // Contains snippets of text from the [Job.job_title][] field most
762     // closely matching a search query's keywords, if available. The matching
763     // query keywords are enclosed in HTML bold tags.
764     string job_title_snippet = 3;
765
766     // Contains snippets of text from the
767     // [Job.description][google.cloud.talent.v4beta1.Job.description] and
768     // similar fields that most closely match a search query's keywords, if
769     // available. All HTML tags in the original fields are stripped when
770     // returned in this field, and matching query keywords are enclosed in HTML
771     // bold tags.
772     string search_text_snippet = 4;
773
774     // Commute information which is generated based on specified
775     //  [CommuteFilter][google.cloud.talent.v4beta1.CommuteFilter].
776     CommuteInfo commute_info = 5;
777   }
778
779   // Output only.
780   //
781   // Commute details related to this job.
782   message CommuteInfo {
783     // Location used as the destination in the commute calculation.
784     Location job_location = 1;
785
786     // The number of seconds required to travel to the job location from the
787     // query location. A duration of 0 seconds indicates that the job isn't
788     // reachable within the requested duration, but was returned as part of an
789     // expanded query.
790     google.protobuf.Duration travel_duration = 2;
791   }
792
793   // The Job entities that match the specified
794   // [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
795   repeated MatchingJob matching_jobs = 1;
796
797   // The histogram results that match with specified
798   // [SearchJobsRequest.histogram_queries][google.cloud.talent.v4beta1.SearchJobsRequest.histogram_queries].
799   repeated HistogramQueryResult histogram_query_results = 2;
800
801   // The token that specifies the starting position of the next page of results.
802   // This field is empty if there are no more results.
803   string next_page_token = 3;
804
805   // The location filters that the service applied to the specified query. If
806   // any filters are lat-lng based, the [JobLocation.location_type][] is
807   // [JobLocation.LocationType#LOCATION_TYPE_UNSPECIFIED][].
808   repeated Location location_filters = 4;
809
810   // An estimation of the number of jobs that match the specified query.
811   //
812   // This number isn't guaranteed to be accurate. For accurate results,
813   // see [enable_precise_result_size][].
814   int32 estimated_total_size = 5;
815
816   // The precise result count, which is available only if the client set
817   // [enable_precise_result_size][] to `true`, or if the response
818   // is the last page of results. Otherwise, the value is `-1`.
819   int32 total_size = 6;
820
821   // Additional information for the API invocation, such as the request
822   // tracking id.
823   ResponseMetadata metadata = 7;
824
825   // If query broadening is enabled, we may append additional results from the
826   // broadened query. This number indicates how many of the jobs returned in the
827   // jobs field are from the broadened query. These results are always at the
828   // end of the jobs list. In particular, a value of 0, or if the field isn't
829   // set, all the jobs in the jobs list are from the original
830   // (without broadening) query. If this field is non-zero, subsequent requests
831   // with offset after this result set should contain all broadened results.
832   int32 broadened_query_jobs_count = 8;
833
834   // The spell checking result, and correction.
835   SpellingCorrection spell_correction = 9;
836 }