Classement personnalisé

La fonctionnalité de classement personnalisé vous permet d'intégrer votre propre logique métier afin de contrôler le classement des postes renvoyés par Cloud Talent Solution. Un demandeur d'emploi qui effectue une recherche sur un site peut définir sa requête de recherche ainsi que d'autres filtres, comme d'habitude. De votre côté, vous pouvez ajouter à la requête de recherche une expression de classement. Cloud Talent Solution détermine les offres d'emploi pertinentes correspondant à la requête définie par le demandeur d'emploi et classe les résultats en fonction de l'expression de classement personnalisée. Une fois le classement terminé, cette liste vous est renvoyée et vous pouvez l'afficher pour le demandeur d'emploi. Un tutoriel vidéo sur la mise en œuvre du classement personnalisé est également disponible.

Avantages

Le classement personnalisé vous permet de gérer la manière dont les résultats sont répertoriés. L'utilisation d'un classement personnalisé vous permet de définir la pondération que vous assignez à des attributs personnalisés. Vous pouvez utiliser une combinaison de poids et d'attributs personnalisés pour créer une expression de classement personnalisée et ainsi déterminer l'ordre dans lequel les offres sont renvoyées.

Le classement personnalisé est basé sur le service de recherche existant. Il exploite les valeurs fournies par n'importe quelle combinaison d'attributs personnalisés définie par le client.

Exemple d'utilisation

L'utilisateur final effectue la recherche suivante : "Ingénieur logiciel". Votre entreprise souhaite mettre en avant des offres correspondant à "Ingénieur logiciel". L'utilisation du classement personnalisé vous permet d'attribuer une valeur à ces offres et de les montrer à l'utilisateur final dans l'ordre déterminé par l'expression de classement personnalisé.

Par exemple, vous avez deux offres d'emploi presque identiques, le poste A ayant un coût par clic (CPC) supérieur à celui du poste B. Le classement personnalisé peut être utilisé pour améliorer la visibilité du poste A en ajustant la pondération pour baser le classement sur l'attribut personnalisé du CPC.

Utilisation

Le classement personnalisé accepte les opérateurs mathématiques suivants : +, -, *, /, (, )

Vous pouvez utiliser les noms de champ des attributs personnalisés ainsi que ces opérateurs mathématiques pour définir une expression de classement personnalisée.

Par exemple, supposons que vous ayez deux attributs personnalisés : le CPC et l'ancienneté, où l'ancienneté correspond au nombre de jours depuis la publication du poste. Vous souhaitez classer les offres d'emploi en fonction du CPC et du niveau d'actualisation. Le CPC représente 75% du classement et l'actualisation compte pour 25%. Vous pouvez créer une expression de classement personnalisée comme suit :

(0.75*CPC) + (0.25 *Freshness)

Exemple de code

L'exemple suivant illustre la création d'une expression de classement personnalisée qui utilise deux attributs personnalisés, cpc_value et freshness_value. Il définit l'expression de classement personnalisé comme (cpc_value / 2) - freshness_value.

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Go documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez la page Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Java documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


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

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez la page Bibliothèques clientes CTS. Pour en savoir plus, consultez la documentation de référence de l'API CTS Node.js.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


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

/**
 * Search Jobs using custom rankings
 *
 * @param projectId {string} Your Google Cloud Project ID
 * @param tenantId {string} Identifier of the Tenantd
 */
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 importanceLevel = 'EXTREME';
  const rankingExpression = '(someFieldLong + 25) * 0.25';
  const customRankingInfo = {
    importanceLevel: importanceLevel,
    rankingExpression: rankingExpression,
  };
  const orderBy = 'custom_ranking desc';
  const request = {
    parent: formattedParent,
    requestMetadata: requestMetadata,
    customRankingInfo: customRankingInfo,
    orderBy: orderBy,
  };

  client
    .searchJobs(request)
    .then(responses => {
      for (const resources of responses) {
        for (const resource of resources.matchingJobs) {
          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

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez la page Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Python documentation de référence.

Pour vous authentifier auprès de CTS, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


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