Menerapkan penelusuran perjalanan di UI Anda

Anda dapat mengintegrasikan penelusuran perjalanan ke dalam UI untuk memungkinkan pencari kerja menelusuri lowongan dalam area geografis yang ditetapkan berdasarkan waktu perjalanan. Penelusuran perjalanan memperkirakan waktu perjalanan berdasarkan mode transportasi umum yang dipilih pengguna dan waktu yang mereka rencanakan untuk melakukan perjalanan.

  1. Sebelum Anda dapat menerapkan penelusuran perjalanan, Cloud Talent Solution harus terhubung ke UI Anda. Ikuti panduan memulai cepat untuk menyiapkan Cloud Talent Solution.

  2. Penelusuran perjalanan menggunakan data alamat yang Anda upload dengan pekerjaan selama penerapan CTS untuk menghitung waktu perjalanan. Untuk mengaktifkan fitur ini di UI CTS yang ada, kirim permintaan jobs.search dan sertakan objek CommuteFilter di kolom JobQuery.commuteFilter. commuteMethod, travelDuration, startCoordinates, dan roadTraffic atau departureTime adalah kolom wajib.

Go

Untuk mempelajari cara menginstal dan menggunakan library klien untuk CTS, lihat Library klien CTS. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi CTS Go API.

Untuk melakukan autentikasi ke CTS, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

import (
	"context"
	"fmt"
	"io"

	talent "cloud.google.com/go/talent/apiv4beta1"
	"cloud.google.com/go/talent/apiv4beta1/talentpb"
	"github.com/golang/protobuf/ptypes/duration"
	"google.golang.org/genproto/googleapis/type/latlng"
)

// commuteSearch searches for jobs within commute filter.
func commuteSearch(w io.Writer, projectID, companyID string) error {
	ctx := context.Background()

	// Initialize a jobService client.
	c, err := talent.NewJobClient(ctx)
	if err != nil {
		return fmt.Errorf("talent.NewJobClient: %w", err)
	}
	defer c.Close()

	// Construct a jobQuery request with a commute filter.
	jobQuery := &talentpb.JobQuery{
		CommuteFilter: &talentpb.CommuteFilter{
			CommuteMethod:  talentpb.CommuteMethod_TRANSIT,
			TravelDuration: &duration.Duration{Seconds: 1800},
			StartCoordinates: &latlng.LatLng{
				Latitude:  37.422408,
				Longitude: -122.085609,
			},
		},
	}
	if companyID != "" {
		jobQuery.Companies = []string{fmt.Sprintf("projects/%s/companies/%s", projectID, companyID)}
	}

	// Construct a searchJobs request with a jobQuery.
	req := &talentpb.SearchJobsRequest{
		Parent: fmt.Sprintf("projects/%s", projectID),
		// Make sure to set the RequestMetadata the same as the associated
		// search request.
		RequestMetadata: &talentpb.RequestMetadata{
			// Make sure to hash your userID.
			UserId: "HashedUsrID",
			// Make sure to hash the sessionID.
			SessionId: "HashedSessionID",
			// Domain of the website where the search is conducted.
			Domain: "www.googlesample.com",
		},
		// Set the actual search term as defined in the jobQuery.
		JobQuery: jobQuery,
	}

	resp, err := c.SearchJobs(ctx, req)
	if err != nil {
		return fmt.Errorf("SearchJobs: %w", err)
	}

	for _, job := range resp.GetMatchingJobs() {
		fmt.Fprintf(w, "Matcing Job: %q\n", job.GetJob().GetName())
		fmt.Fprintf(w, "Job address: %v\n", job.GetCommuteInfo().GetJobLocation().GetPostalAddress().GetAddressLines())
	}

	return nil
}

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk CTS, lihat Library klien CTS. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi CTS Java API.

Untuk melakukan autentikasi ke CTS, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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());
      }
    }
  }
}

Node.js

Untuk mempelajari cara menginstal dan menggunakan library klien untuk CTS, lihat Library klien CTS. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi CTS Node.js API.

Untuk melakukan autentikasi ke CTS, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


const talent = require('@google-cloud/talent').v4;

/** Search Jobs using commute distance */
function sampleSearchJobs(projectId, tenantId) {
  const client = new talent.JobServiceClient();
  // Iterate over all elements.
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  const formattedParent = client.tenantPath(projectId, tenantId);
  const domain = 'www.example.com';
  const sessionId = 'Hashed session identifier';
  const userId = 'Hashed user identifier';
  const requestMetadata = {
    domain: domain,
    sessionId: sessionId,
    userId: userId,
  };
  const commuteMethod = 'TRANSIT';
  const seconds = 1800;
  const travelDuration = {
    seconds: seconds,
  };
  const latitude = 37.422408;
  const longitude = 122.084068;
  const startCoordinates = {
    latitude: latitude,
    longitude: longitude,
  };
  const commuteFilter = {
    commuteMethod: commuteMethod,
    travelDuration: travelDuration,
    startCoordinates: startCoordinates,
  };
  const jobQuery = {
    commuteFilter: commuteFilter,
  };
  const request = {
    parent: formattedParent,
    requestMetadata: requestMetadata,
    jobQuery: jobQuery,
  };

  client
    .searchJobs(request)
    .then(responses => {
      const resources = responses[0];
      for (const resource of resources) {
        console.log(`Job summary: ${resource.jobSummary}`);
        console.log(`Job title snippet: ${resource.jobTitleSnippet}`);
        const job = resource.job;
        console.log(`Job name: ${job.name}`);
        console.log(`Job title: ${job.title}`);
      }
    })
    .catch(err => {
      console.error(err);
    });
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk CTS, lihat Library klien CTS. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi CTS Python API.

Untuk melakukan autentikasi ke CTS, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


from google.cloud import talent


def search_jobs(project_id, tenant_id):
    """Search Jobs using commute distance"""

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    parent = f"projects/{project_id}/tenants/{tenant_id}"
    domain = "www.example.com"
    session_id = "Hashed session identifier"
    user_id = "Hashed user identifier"
    request_metadata = talent.RequestMetadata(
        domain=domain, session_id=session_id, user_id=user_id
    )
    commute_method = talent.CommuteMethod.TRANSIT
    seconds = 1800
    travel_duration = {"seconds": seconds}
    latitude = 37.422408
    longitude = -122.084068
    start_coordinates = {"latitude": latitude, "longitude": longitude}
    commute_filter = talent.CommuteFilter(
        commute_method=commute_method,
        travel_duration=travel_duration,
        start_coordinates=start_coordinates,
    )
    job_query = talent.JobQuery(commute_filter=commute_filter)

    # Iterate over all results
    results = []
    request = talent.SearchJobsRequest(
        parent=parent,
        request_metadata=request_metadata,
        job_query=job_query,
    )
    for response_item in client.search_jobs(request=request).matching_jobs:
        print(f"Job summary: {response_item.job_summary}")
        print(f"Job title snippet: {response_item.job_title_snippet}")
        job = response_item.job
        results.append(job.name)
        print(f"Job name: {job.name}")
        print(f"Job title: {job.title}")
    return results

Rekomendasi UI

  1. Cloud Talent Solution tidak mengizinkan penelusuran berdasarkan jarak (menggunakan filter lokasi CTS) dan waktu perjalanan dalam panggilan API yang sama. Untuk mengizinkan pencari kerja mengakses kedua opsi tersebut, gunakan pendekatan 2 tab atau yang serupa.

  2. Ubah frontend aplikasi Anda untuk memastikan bahwa backend otomatis mengisi informasi yang relevan dari pencari kerja ke dalam filter perjalanan. Backend harus memanggil API seperti yang dilakukan dalam permintaan penelusuran biasa.

  3. Sertakan item di UI Anda:

    • Opsi untuk memilih penelusuran jarak atau penelusuran perjalanan. Misalnya, UI Penelusuran Anda dapat terlihat seperti contoh di bawah:

    • Menu drop-down opsi metode perjalanan.

    • Opsi untuk menyesuaikan kondisi lalu lintas.

    • Total waktu perjalanan (waktu perjalanan maksimum yang didukung adalah 60 menit).

    • Waktu mulai perjalanan.

  4. Informasi waktu perjalanan yang ditampilkan dari API digunakan untuk menampilkan informasi kepada pencari kerja. Hanya lowongan yang relevan yang berada dalam area waktu perjalanan yang ditetapkan yang ditampilkan dalam daftar hasil. Lihat dokumentasi Praktik Terbaik Penelusuran Lowongan untuk mengetahui diskusi tentang cara menyesuaikan urutan dan jumlah lowongan yang ditampilkan dalam area ini.

  5. Hasil penelusuran perjalanan didasarkan pada data historis dan gabungan, bukan kondisi lalu lintas real time. Kondisi traffic departureTime dihitung dari kondisi traffic rata-rata pada waktu tertentu. Opsi BUSY_HOUR/TRAFFIC_FREE di bagian roadTraffic masing-masing adalah kondisi lalu lintas rata-rata pada jam sibuk pagi dan tengah malam. Pengguna menerima hasil penelusuran perjalanan yang sama, terlepas dari waktu pengiriman kueri.

Anda dapat memanfaatkan Google Maps untuk membuat peta berdasarkan informasi waktu perjalanan yang ditampilkan dari CTS dan menyematkannya ke dalam hasil yang ditampilkan kepada pencari kerja. Suite Maps API memiliki beberapa opsi untuk menampilkan peta. Beberapa opsi Maps API lebih efektif daripada yang lain. Misalnya, visualisasi Peta Panas JavaScript Google Maps yang disambungkan dengan pengelompokan penanda adalah cara efektif untuk memvisualisasikan lowongan yang relevan yang ditampilkan kepada pencari kerja di dalam area yang ditentukan oleh preferensi perjalanan yang ditetapkan. Sebaliknya, Mode Rute tidak menampilkan semua tugas yang ditampilkan dalam permintaan penelusuran dan bukan opsi yang direkomendasikan.

Untuk informasi selengkapnya tentang cara menerapkan penelusuran berbasis perjalanan, lihat Panduan cara kerja Penelusuran Perjalanan.