Skip to content

Commit

Permalink
samples: add Job Search v4 samples (#275)
Browse files Browse the repository at this point in the history
* Sample code for Jobs - V4

Sample code for Jobs v4 APIs.

* feat: Add Job Search v4 API

* Updated as per comment

* No more required.

samples/snippets/pom.xml will take care of specific version

* Migrated to parent folder

Maintaing v4 as the defacto version for now. Later it can be moved to version specific package if required.

* test: configure extra cts environment variables

* fixed listjobs test

fixed listjobs test

* fixed lint.

Co-authored-by: Jeff Ching <[email protected]>
  • Loading branch information
saumyasahu-bot and chingor13 authored Oct 14, 2020
1 parent 63bd2e2 commit 62438ad
Show file tree
Hide file tree
Showing 35 changed files with 2,216 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.jobs;

// [START job_search_commute_search]

import com.google.cloud.talent.v4.CommuteFilter;
import com.google.cloud.talent.v4.CommuteMethod;
import com.google.cloud.talent.v4.Job;
import com.google.cloud.talent.v4.JobQuery;
import com.google.cloud.talent.v4.JobServiceClient;
import com.google.cloud.talent.v4.RequestMetadata;
import com.google.cloud.talent.v4.SearchJobsRequest;
import com.google.cloud.talent.v4.SearchJobsResponse;
import com.google.cloud.talent.v4.TenantName;
import com.google.protobuf.Duration;
import com.google.type.LatLng;
import java.io.IOException;

public class CommuteSearchJobs {

public static void searchJobs() throws IOException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";
String tenantId = "your-tenant-id";
searchJobs(projectId, tenantId);
}

// Search Jobs with histogram queries.
public static void searchJobs(String projectId, String tenantId) throws IOException {
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests. After completing all of your requests, call
// the "close" method on the client to safely clean up any remaining background resources.
try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
TenantName parent = TenantName.of(projectId, tenantId);
String domain = "www.example.com";
String sessionId = "Hashed session identifier";
String userId = "Hashed user identifier";
RequestMetadata requestMetadata =
RequestMetadata.newBuilder()
.setDomain(domain)
.setSessionId(sessionId)
.setUserId(userId)
.build();

CommuteMethod commuteMethod = CommuteMethod.DRIVING;
long seconds = 3600L;
Duration travelDuration = Duration.newBuilder().setSeconds(seconds).build();

double latitude = 37.422408;
double longitude = -122.084068;
LatLng startCoordinates =
LatLng.newBuilder().setLatitude(latitude).setLongitude(longitude).build();

CommuteFilter commuteFilter =
CommuteFilter.newBuilder()
.setCommuteMethod(commuteMethod)
.setTravelDuration(travelDuration)
.setStartCoordinates(startCoordinates)
.build();

JobQuery jobQuery = JobQuery.newBuilder().setCommuteFilter(commuteFilter).build();
SearchJobsRequest request =
SearchJobsRequest.newBuilder()
.setParent(parent.toString())
.setRequestMetadata(requestMetadata)
.setJobQuery(jobQuery)
.build();

for (SearchJobsResponse.MatchingJob responseItem :
jobServiceClient.searchJobs(request).getMatchingJobsList()) {
System.out.format("Job summary: %s%n", responseItem.getJobSummary());
System.out.format("Job title snippet: %s%n", responseItem.getJobTitleSnippet());
Job job = responseItem.getJob();
System.out.format("Job name: %s%n", job.getName());
System.out.format("Job title: %s%n", job.getTitle());
}
}
}
}
// [END job_search_commute_search]
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.jobs;

// [START job_search_custom_ranking_search]

import com.google.cloud.talent.v4.Job;
import com.google.cloud.talent.v4.JobServiceClient;
import com.google.cloud.talent.v4.RequestMetadata;
import com.google.cloud.talent.v4.SearchJobsRequest;
import com.google.cloud.talent.v4.SearchJobsResponse;
import com.google.cloud.talent.v4.TenantName;
import java.io.IOException;

public class CustomRankingSearchJobs {

public static void searchCustomRankingJobs() throws IOException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";
String tenantId = "your-tenant-id";
searchCustomRankingJobs(projectId, tenantId);
}

// Search Jobs using custom rankings.
public static void searchCustomRankingJobs(String projectId, String tenantId) throws IOException {
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests. After completing all of your requests, call
// the "close" method on the client to safely clean up any remaining background resources.
try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
TenantName parent = TenantName.of(projectId, tenantId);
String domain = "www.example.com";
String sessionId = "Hashed session identifier";
String userId = "Hashed user identifier";
RequestMetadata requestMetadata =
RequestMetadata.newBuilder()
.setDomain(domain)
.setSessionId(sessionId)
.setUserId(userId)
.build();
SearchJobsRequest.CustomRankingInfo.ImportanceLevel importanceLevel =
SearchJobsRequest.CustomRankingInfo.ImportanceLevel.EXTREME;
String rankingExpression = "(someFieldLong + 25) * 0.25";
SearchJobsRequest.CustomRankingInfo customRankingInfo =
SearchJobsRequest.CustomRankingInfo.newBuilder()
.setImportanceLevel(importanceLevel)
.setRankingExpression(rankingExpression)
.build();
String orderBy = "custom_ranking desc";
SearchJobsRequest request =
SearchJobsRequest.newBuilder()
.setParent(parent.toString())
.setRequestMetadata(requestMetadata)
.setCustomRankingInfo(customRankingInfo)
.setOrderBy(orderBy)
.build();
for (SearchJobsResponse.MatchingJob responseItem :
jobServiceClient.searchJobs(request).getMatchingJobsList()) {
System.out.format("Job summary: %s%n", responseItem.getJobSummary());
System.out.format("Job title snippet: %s%n", responseItem.getJobTitleSnippet());
Job job = responseItem.getJob();
System.out.format("Job name: %s%n", job.getName());
System.out.format("Job title: %s%n", job.getTitle());
}
}
}
}
// [END job_search_custom_ranking_search]
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.jobs;

// [START job_search_histogram_search]

import com.google.cloud.talent.v4.HistogramQuery;
import com.google.cloud.talent.v4.Job;
import com.google.cloud.talent.v4.JobServiceClient;
import com.google.cloud.talent.v4.RequestMetadata;
import com.google.cloud.talent.v4.SearchJobsRequest;
import com.google.cloud.talent.v4.SearchJobsResponse;
import com.google.cloud.talent.v4.TenantName;
import java.io.IOException;

public class HistogramSearchJobs {

public static void searchJobs() throws IOException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";
String tenantId = "your-tenant-id";
String query = "count(base_compensation, [bucket(12, 20)])";
searchJobs(projectId, tenantId, query);
}

// Search Jobs with histogram queries.
public static void searchJobs(String projectId, String tenantId, String query)
throws IOException {
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests. After completing all of your requests, call
// the "close" method on the client to safely clean up any remaining background resources.
try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
TenantName parent = TenantName.of(projectId, tenantId);

String domain = "http://www.jobUrl.com";
String sessionId = "Hashed session identifier";
String userId = "Hashed user identifier";
RequestMetadata requestMetadata =
RequestMetadata.newBuilder()
.setDomain(domain)
.setSessionId(sessionId)
.setUserId(userId)
.build();
HistogramQuery histogramQueriesElement =
HistogramQuery.newBuilder().setHistogramQuery(query).build();
SearchJobsRequest request =
SearchJobsRequest.newBuilder()
.setParent(parent.toString())
.setRequestMetadata(requestMetadata)
.addHistogramQueries(histogramQueriesElement)
.build();

for (SearchJobsResponse.MatchingJob responseItem :
jobServiceClient.searchJobs(request).getMatchingJobsList()) {
System.out.format("Job summary: %s%n", responseItem.getJobSummary());
System.out.format("Job title snippet: %s%n", responseItem.getJobTitleSnippet());
Job job = responseItem.getJob();
System.out.format("Job name: %s%n", job.getName());
System.out.format("Job title: %s%n", job.getTitle());
}
}
}
}
// [END job_search_histogram_search]
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.jobs;

// [START job_search_autocomplete_job_title]

import com.google.cloud.talent.v4.CompleteQueryRequest;
import com.google.cloud.talent.v4.CompleteQueryResponse;
import com.google.cloud.talent.v4.CompletionClient;
import com.google.cloud.talent.v4.TenantName;
import java.io.IOException;

public class JobSearchAutoCompleteJobTitle {

public static void completeQuery() throws IOException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";
String tenantId = "your-tenant-id";
String query = "your-query-for-job-title";
completeQuery(projectId, tenantId, query);
}

// Complete job title given partial text (autocomplete).
public static void completeQuery(String projectId, String tenantId, String query)
throws IOException {
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests. After completing all of your requests, call
// the "close" method on the client to safely clean up any remaining background resources.
try (CompletionClient completionClient = CompletionClient.create()) {
TenantName parent = TenantName.of(projectId, tenantId);
CompleteQueryRequest request =
CompleteQueryRequest.newBuilder()
.setTenant(parent.toString())
.setQuery(query)
.setPageSize(5) // limit for number of results
.addLanguageCodes("en-US") // language code
.build();
CompleteQueryResponse response = completionClient.completeQuery(request);
for (CompleteQueryResponse.CompletionResult result : response.getCompletionResultsList()) {
System.out.format("Suggested title: %s%n", result.getSuggestion());
// Suggestion type is JOB_TITLE or COMPANY_TITLE
System.out.format("Suggestion type: %s%n", result.getType());
}
}
}
}
// [END job_search_autocomplete_job_title]
Loading

0 comments on commit 62438ad

Please sign in to comment.