Atributos personalizados

Cloud Talent Solution ofrece varios atributos de empleo predefinidos para satisfacer las necesidades de distintos clientes. Para obtener el mejor rendimiento de Cloud Talent Solution, te recomendamos que uses los campos predefinidos tanto como sea posible.

Además, Cloud Talent Solution también proporciona atributos personalizados para almacenar información genérica. Los atributos personalizados se usan para ofrecer aún más flexibilidad y permitir que los clientes admitan su lógica empresarial. Los atributos personalizados almacenan información de cadena o numérica, y se pueden filtrar en las consultas de búsqueda configurando los filtros adecuados.

Funciones de atributos personalizados

  • Definir el nombre de un campo personalizado: asigna un nombre a un atributo concreto de un trabajo. Defina este atributo como filtrable o no filtrable en función de sus necesidades. Normalmente, si la interfaz de usuario necesita una faceta filtrable que no se proporciona de forma predeterminada en Cloud Talent Solution, se puede usar un customAttribute para proporcionar el filtro adecuado.
  • Búsqueda que distingue entre mayúsculas y minúsculas: cada solicitud de búsqueda puede especificar si la búsqueda en todos los atributos personalizados distingue entre mayúsculas y minúsculas.
  • Filtrado por intervalo: los filtros de búsqueda de customAttribute pueden filtrar los trabajos por un intervalo de valores numéricos especificados. Por ejemplo, si se usa un campo customAttribute para almacenar los requisitos mínimos de GPA de un trabajo, el filtro de búsqueda customAttribute se puede usar para devolver trabajos dentro de un determinado intervalo de GPA mínimo, superior a un valor de GPA mínimo, inferior a un valor de GPA mínimo, etc.
  • Filtrado entre campos: customAttribute también ofrece a los clientes de Cloud Talent Solution la posibilidad de definir expresiones que filtren una combinación de atributos personalizados. Por ejemplo, un cliente tiene una lógica empresarial que indica que solo quiere trabajos que patrocinen visados o trabajos a distancia. El cliente almacena ambos campos en un customAttributediferente. El cliente puede especificar un filtro de búsqueda con una expresión que defina la lógica necesaria. Solo se admiten 3 niveles de expresiones anidadas.

  • Búsqueda específica de palabras clave: especifica un customAttribute en el keywordSearchableCustomAttributes de la empresa asociada para asegurarte de que las solicitudes de búsqueda que contengan un valor en el atributo personalizado especificado devuelvan los empleos que contengan ese valor en ese atributo personalizado.

  • Búsquedas basadas en SQL: customAttribute te permite definir expresiones de estilo booleano en la solicitud de búsqueda. Cloud Talent Solution analiza automáticamente estas expresiones, aplica los filtros a la solicitud de búsqueda y devuelve los resultados correspondientes. Solo se permiten 3 niveles de anidación de expresiones booleanas y un máximo de 2000 caracteres.

  • Define contenedores de histogramas personalizados: los atributos personalizados permiten a los clientes de Cloud Talent Solution definir contenedores personalizados con los que se pueden calcular histogramas. Por ejemplo, puedes usar un customAttribute para almacenar información sobre la nota media mínima y, a continuación, crear un histograma de este campo. También puedes crear segmentos de 3,0 a 3,5, de 3,51 a 4,0, etc., para agrupar todas las medias mínimas dentro de estos segmentos.

Usar atributos personalizados

Crea un trabajo con el campo customAttribute (se puede usar con valores numéricos o de cadena):

Go

Para saber cómo instalar y usar la biblioteca de cliente de CTS, consulta Bibliotecas de cliente de CTS. Para obtener más información, consulta la documentación de referencia de la API Go de CTS.

Para autenticarte en CTS, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

import (
	"context"
	"fmt"
	"io"

	talent "cloud.google.com/go/talent/apiv4beta1"
	"cloud.google.com/go/talent/apiv4beta1/talentpb"
	"github.com/gofrs/uuid"
	money "google.golang.org/genproto/googleapis/type/money"
)

// createJobWithCustomAttributes creates a job with custom attributes.
func createJobWithCustomAttributes(w io.Writer, projectID, companyID, jobTitle string) (*talentpb.Job, error) {
	ctx := context.Background()

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

	// requisitionID shoud be the unique ID in your system
	requisitionID := fmt.Sprintf("job-with-custom-attribute-%s", uuid.Must(uuid.NewV4()).String())
	jobToCreate := &talentpb.Job{
		Company:       fmt.Sprintf("projects/%s/companies/%s", projectID, companyID),
		RequisitionId: requisitionID,
		Title:         jobTitle,
		ApplicationInfo: &talentpb.Job_ApplicationInfo{
			Uris: []string{"https://googlesample.com/career"},
		},
		Description:     "Design, devolop, test, deploy, maintain and improve software.",
		LanguageCode:    "en-US",
		PromotionValue:  2,
		EmploymentTypes: []talentpb.EmploymentType{talentpb.EmploymentType_FULL_TIME},
		Addresses:       []string{"Mountain View, CA"},
		CustomAttributes: map[string]*talentpb.CustomAttribute{
			"someFieldString": {
				Filterable:   true,
				StringValues: []string{"someStrVal"},
			},
			"someFieldLong": {
				Filterable: true,
				LongValues: []int64{900},
			},
		},
		CompensationInfo: &talentpb.CompensationInfo{
			Entries: []*talentpb.CompensationInfo_CompensationEntry{
				{
					Type: talentpb.CompensationInfo_BASE,
					Unit: talentpb.CompensationInfo_HOURLY,
					CompensationAmount: &talentpb.CompensationInfo_CompensationEntry_Amount{
						Amount: &money.Money{
							CurrencyCode: "USD",
							Units:        1,
						},
					},
				},
			},
		},
	}

	// Construct a createJob request.
	req := &talentpb.CreateJobRequest{
		Parent: fmt.Sprintf("projects/%s", projectID),
		Job:    jobToCreate,
	}

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

	fmt.Fprintf(w, "Created job with custom attributres: %q\n", resp.GetName())
	fmt.Fprintf(w, "Custom long field has value: %v\n", resp.GetCustomAttributes()["someFieldLong"].GetLongValues())

	return resp, nil
}

Java

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution, consulta las bibliotecas de cliente de Cloud Talent Solution.


import com.google.cloud.talent.v4.CreateJobRequest;
import com.google.cloud.talent.v4.CustomAttribute;
import com.google.cloud.talent.v4.Job;
import com.google.cloud.talent.v4.JobServiceClient;
import com.google.cloud.talent.v4.TenantName;
import java.io.IOException;

public class JobSearchCreateJobCustomAttributes {

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

  // Create Job with Custom Attributes.
  public static void createJob(
      String projectId, String tenantId, String companyId, String requisitionId)
      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);

      // Custom attribute can be string or numeric value, and can be filtered in search queries.
      // https://cloud.google.com/talent-solution/job-search/docs/custom-attributes
      CustomAttribute customAttribute =
          CustomAttribute.newBuilder()
              .addStringValues("Internship")
              .addStringValues("Apprenticeship")
              .setFilterable(true)
              .build();

      Job job =
          Job.newBuilder()
              .setCompany(companyId)
              .setTitle("Software Developer I")
              .setDescription("This is a description of this <i>wonderful</i> job!")
              .putCustomAttributes("FOR_STUDENTS", customAttribute)
              .setRequisitionId(requisitionId)
              .setLanguageCode("en-US")
              .build();

      CreateJobRequest request =
          CreateJobRequest.newBuilder().setParent(parent.toString()).setJob(job).build();
      Job response = jobServiceClient.createJob(request);
      System.out.printf("Created job: %s\n", response.getName());
    }
  }
}

Node.js

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution, consulta las bibliotecas de cliente de Cloud Talent Solution.


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

/**
 * Create Job with Custom Attributes
 *
 * @param projectId {string} Your Google Cloud Project ID
 * @param tenantId {string} Identifier of the Tenantd
 */
function sampleCreateJob(
  projectId,
  tenantId,
  companyName,
  requisitionId,
  languageCode
) {
  const client = new talent.JobServiceClient();
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  // const companyName = 'Company name, e.g. projects/your-project/companies/company-id';
  // const requisitionId = 'Job requisition ID, aka Posting ID. Unique per job.';
  // const languageCode = 'en-US';
  const formattedParent = client.tenantPath(projectId, tenantId);
  const job = {
    company: companyName,
    requisitionId: requisitionId,
    languageCode: languageCode,
  };
  const request = {
    parent: formattedParent,
    job: job,
  };
  client
    .createJob(request)
    .then(responses => {
      const response = responses[0];
      console.log(`Created job: ${response.name}`);
    })
    .catch(err => {
      console.error(err);
    });
}

Python

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution, consulta las bibliotecas de cliente de Cloud Talent Solution.


from google.cloud import talent


def create_job(project_id, tenant_id, company_id, requisition_id):
    """Create Job with Custom Attributes"""

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # company_id = 'Company name, e.g. projects/your-project/companies/company-id'
    # requisition_id = 'Job requisition ID, aka Posting ID. Unique per job.'
    # language_code = 'en-US'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    if isinstance(company_id, bytes):
        company_id = company_id.decode("utf-8")

    # Custom attribute can be string or numeric value,
    # and can be filtered in search queries.
    # https://cloud.google.com/talent-solution/job-search/docs/custom-attributes
    custom_attribute = talent.CustomAttribute()
    custom_attribute.filterable = True
    custom_attribute.string_values.append("Intern")
    custom_attribute.string_values.append("Apprenticeship")

    parent = f"projects/{project_id}/tenants/{tenant_id}"

    job = talent.Job(
        company=company_id,
        title="Software Engineer",
        requisition_id=requisition_id,
        description="This is a description of this job",
        language_code="en-us",
        custom_attributes={"FOR_STUDENTS": custom_attribute},
    )

    response = client.create_job(parent=parent, job=job)
    print(f"Created job: {response.name}")
    return response.name

filterableCustomFields

De forma predeterminada, los endpoints searchJobs y searchJobsForAlert solo buscan en campos predefinidos. Si también necesita buscar en campos customAttribute, use el campo keywordSearchableJobCustomAttributes para definir una lista de atributos personalizados en los que buscar.

Por ejemplo, si un seleccionador quiere usar un customAttribute "customRequisitions" para almacenar los IDs de las solicitudes de empleo de un empleador concreto, puede definir keywordSearchableJobCustomAttributes para que incluya este campo. De esta forma, si el seleccionador realiza una búsqueda normal de "ABC123", se devolverán todos los empleos que tengan el customAttribute "customRequisitions" con el valor "ABC123".