Peringkat kustom (v4beta1)

Fitur peringkat kustom memungkinkan Anda memperkenalkan logika bisnis Anda sendiri untuk mengontrol peringkat pekerjaan yang ditampilkan oleh Cloud Talent Solution. Pencari kerja yang melakukan penelusuran di situs dapat menetapkan kueri penelusuran dan filter lainnya seperti biasa, dan Anda dapat menambahkan ekspresi peringkat ke permintaan penelusuran. Cloud Talent Solution menentukan pekerjaan yang relevan dengan kueri yang ditentukan oleh pencari kerja, dan memberi peringkat hasilnya berdasarkan ekspresi peringkat kustom. Daftar peringkat ini kemudian dikembalikan kepada Anda sehingga dapat ditampilkan kepada pencari kerja. Tutorial video tentang cara menerapkan peringkat kustom juga tersedia.

Manfaat

Dengan peringkat kustom, Anda dapat mengontrol cara hasil dicantumkan. Penggunaan peringkat kustom memungkinkan Anda menentukan bobot yang dapat ditetapkan ke atribut khusus. Anda dapat menggunakan kombinasi bobot dan atribut khusus untuk membuat ekspresi peringkat kustom guna menentukan urutan listingan yang ditampilkan.

Peringkat kustom dibangun berdasarkan layanan penelusuran yang ada. Pendekatan ini memanfaatkan nilai yang diberikan dalam setiap kombinasi atribut khusus yang ditentukan pelanggan.

Contoh kasus penggunaan

Pengguna akhir menelusuri "Software Engineer". Bisnis Anda ingin menampilkan listingan hasil yang lebih tinggi untuk "Software Engineer". Dengan menggunakan Peringkat Kustom, Anda dapat menempatkan nilai pada listingan ini dan menampilkannya kepada pengguna akhir dalam urutan yang ditentukan oleh ekspresi peringkat kustom.

Misalnya, Anda memiliki dua listingan pekerjaan yang hampir identik dengan tugas-A yang memiliki nilai biaya per klik (CPC) lebih tinggi daripada tugas-B. Anda dapat menggunakan peringkat kustom untuk meningkatkan visibilitas pekerjaan-A dengan menetapkan penyesuaian peringkat atribut khusus CPC dengan bobot.

Cara menggunakan

Peringkat kustom mendukung operator matematika berikut: +, -, *, /, (, )

Anda dapat menggunakan nama kolom atribut khusus dan operator matematika ini untuk menentukan ekspresi peringkat kustom.

Misalnya, anggap Anda memiliki dua atribut khusus: CPC dan keaktualan, dengan keaktualan adalah jumlah hari sejak lowongan diposting. Anda ingin memberi peringkat pekerjaan berdasarkan CPC dan keaktualan, dengan CPC menghitung 75% peringkat dan keaktualan sebesar 25%. Anda dapat membuat ekspresi peringkat kustom sebagai berikut:

(0.75*CPC) + (0.25 *Freshness)

Contoh Kode

Contoh berikut membuat ekspresi peringkat kustom menggunakan dua atribut khusus, cpc_value dan freshness_value. Metode ini menetapkan ekspresi peringkat kustom ke (cpc_value / 2) - freshness_value.

Go

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

Untuk mengautentikasi 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"
)

// customRankingSearch searches for jobs based on custom ranking.
func customRankingSearch(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("taleng.NewJobClient: %w", err)
	}
	defer c.Close()

	// Construct a searchJobs request.
	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",
		},
		JobQuery: &talentpb.JobQuery{
			Companies: []string{fmt.Sprintf("projects/%s/companies/%s", projectID, companyID)},
		},
		// More info on customRankingInfo.
		// https://godoc.org/google.golang.org/genproto/googleapis/cloud/talent/v4beta1#SearchJobsRequest_CustomRankingInfo
		CustomRankingInfo: &talentpb.SearchJobsRequest_CustomRankingInfo{
			ImportanceLevel:   talentpb.SearchJobsRequest_CustomRankingInfo_EXTREME,
			RankingExpression: "(someFieldLong + 25) * 0.25",
		},
		OrderBy: "custom_ranking desc",
	}

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

	for _, job := range resp.GetMatchingJobs() {
		fmt.Fprintf(w, "Job: %q\n", job.GetJob().GetName())
	}

	return nil
}

Java

Untuk mengetahui informasi selengkapnya tentang cara menginstal dan membuat klien Cloud Talent Solution, lihat Library Klien Cloud Talent Solution.


import com.google.cloud.talent.v4beta1.Job;
import com.google.cloud.talent.v4beta1.JobServiceClient;
import com.google.cloud.talent.v4beta1.RequestMetadata;
import com.google.cloud.talent.v4beta1.SearchJobsRequest;
import com.google.cloud.talent.v4beta1.SearchJobsResponse;
import com.google.cloud.talent.v4beta1.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).iterateAll()) {
        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());
      }
    }
  }
}

Python

Untuk mengetahui informasi selengkapnya tentang cara menginstal dan membuat klien Cloud Talent Solution, lihat Library Klien Cloud Talent Solution.

# 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
#
#     https://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.

from google.cloud import talent

def search_jobs(project_id, tenant_id):
    """Search Jobs using custom rankings"""

    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
    )
    importance_level = (
        talent.SearchJobsRequest.CustomRankingInfo.ImportanceLevel.EXTREME
    )
    ranking_expression = "(someFieldLong + 25) * 0.25"
    custom_ranking_info = {
        "importance_level": importance_level,
        "ranking_expression": ranking_expression,
    }
    order_by = "custom_ranking desc"

    # Iterate over all results
    results = []
    request = talent.SearchJobsRequest(
        parent=parent,
        request_metadata=request_metadata,
        custom_ranking_info=custom_ranking_info,
        order_by=order_by,
    )
    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