Atributos personalizados (v3)

Cloud Talent Solution incluye varios atributos de trabajo integrados para atender las necesidades de diversos clientes. Para que Cloud Talent Solution tenga el mejor rendimiento, te recomendamos usar los campos integrados lo más posible.

Además, Cloud Talent Solution también cuenta con atributos personalizados para almacenar información genérica, que brindan más flexibilidad y permiten que los clientes respalden su lógica empresarial. Los atributos personalizados pueden almacenar una string o información numérica y también se pueden filtrar en las búsquedas si configuras los filtros adecuados.

Funciones de los atributos personalizados

  • Definir un nombre de campo personalizado: Define el nombre de un atributo específico de un trabajo. Determina si este atributo se puede filtrar según sea necesario. Por lo general, si la interfaz de usuario necesita una faceta filtrable que Cloud Talent Solution no proporciona de manera inmediata, se puede usar un customAttribute para proporcionar el filtrado correcto.
  • Búsqueda con (o sin) distinción de mayúsculas y minúsculas: En cada solicitud de búsqueda, se puede especificar si la búsqueda de todos los atributos personalizados distingue o no mayúsculas y minúsculas.
  • Filtrado basado en rango: Los filtros de búsqueda customAttribute pueden filtrar trabajos entre un rango de valores numéricos especificados. Por ejemplo, si se usa un campo customAttribute determinado para almacenar los requisitos mínimos de GPA de un trabajo, el filtro de búsqueda customAttribute se puede usar para mostrar trabajos dentro de un cierto rango de GPA mínimo, mayor que un valor mínimo de GPA, menor que un valor mínimo de GPA, etcétera.
  • Filtro de campos combinados: customAttribute también proporciona a los clientes de Cloud Talent Solution la capacidad de definir expresiones que filtran una combinación de atributos personalizados. Por ejemplo, la lógica empresarial de un cliente indica que solo necesita trabajos desde casa o con patrocinio de visa. El cliente almacena estos dos campos en un customAttribute diferente. Luego, 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 determinado customAttribute en los keywordSearchableCustomAttributes de la empresa asociada para garantizar que las solicitudes de búsqueda que contienen un valor en el customAttribute especificado muestren los trabajos que contienen este valor en ese customAttribute.

  • 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 muestra los resultados correspondientes. Solo se admiten 3 niveles de expresiones booleanas anidadas y con un máximo de 2,000 caracteres.

  • Definir intervalos de histograma personalizados: Los atributos personalizados permiten que los clientes de Cloud Talent Solution puedan definir intervalos personalizados para calcular los histogramas. Por ejemplo, puedes usar un customAttribute para almacenar información mínima de GPA y, luego, crear un histograma en este campo. Puedes crear más intervalos, como de 3.0 a 3.5, de 3.51 a 4.0, etc., para agrupar todos los GPA mínimos en ellos.

Usa atributos personalizados

Crea un nuevo trabajo con el campo customAttribute (puede usarse con valores numéricos o de string):

Java

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/** Generate a job with a custom attribute. */
@SuppressWarnings("checkstyle:AbbreviationAsWordInName")
public static Job generateJobWithACustomAttribute(String companyName) {
  // requisition id should be a unique Id in your system.
  String requisitionId = "jobWithACustomAttribute:" + String.valueOf(new Random().nextLong());
  ApplicationInfo applicationInfo =
      new ApplicationInfo().setUris(Arrays.asList("http://careers.google.com"));

  // Constructs custom attributes map
  Map<String, CustomAttribute> customAttributes = new HashMap<>();
  customAttributes.put(
      "someFieldName1",
      new CustomAttribute().setStringValues(Arrays.asList("value1")).setFilterable(Boolean.TRUE));
  customAttributes.put(
      "someFieldName2",
      new CustomAttribute().setLongValues(Arrays.asList(256L)).setFilterable(true));

  // Creates job with custom attributes
  Job job =
      new Job()
          .setCompanyName(companyName)
          .setRequisitionId(requisitionId)
          .setTitle("Software Engineer")
          .setApplicationInfo(applicationInfo)
          .setDescription("Design, develop, test, deploy, maintain and improve software.")
          .setCustomAttributes(customAttributes);
  System.out.println("Job generated: " + job);
  return job;
}

Python

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

def generate_job_with_custom_attributes(company_name):
    # Requisition id should be a unique Id in your system.
    requisition_id = 'job_with_custom_attributes:' + ''.join(
        random.choice(string.ascii_uppercase + string.digits)
        for _ in range(16))

    job_title = 'Software Engineer'
    application_urls = ['http://careers.google.com']
    description = ('Design, develop, test, deploy, maintain and improve '
                   'software.')

    custom_attributes = {
        'someFieldName1': {
            'string_values': ['value1'],
            'filterable': True
        },
        'someFieldName2': {
            'long_values': [256],
            'filterable': True
        }
    }

    job = {
        'company_name': company_name,
        'requisition_id': requisition_id,
        'title': job_title,
        'application_info': {'uris': application_urls},
        'description': description,
        'custom_attributes': custom_attributes
    }
    print('Job generated: %s' % job)
    return job

C#

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


public static Job GenerateJobWithCustomAttribute(string companyName)
{
    ApplicationInfo applicationInfo = new ApplicationInfo()
    {
        Uris = new List<string>
        {
            "http://careers.google.com"
        }
    };

    CustomAttribute customAttribute = new CustomAttribute();
    customAttribute.StringValues = new List<String>()
    {
        "attribute"
    };

    Dictionary<String, CustomAttribute> customAttributes = new Dictionary<string, CustomAttribute>
    {
        { "custom_attribute", customAttribute }
    };

    Job customJob = new Job()
    {
        Title = "Software Engineer",
        RequisitionId = generateRandom(),
        Description = "My Job Description Here",
        CompanyName = myCompany.Name,
        ApplicationInfo = applicationInfo,
        CustomAttributes = customAttributes
    };

    Console.WriteLine("Created custom job: " + customJob.Title);
    return customJob;
}

Go

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


// constructJobWithCustomAttributes constructs a job with custom attributes.
func constructJobWithCustomAttributes(companyName string, jobTitle string) *talent.Job {
	// requisitionID shoud be the unique ID in your system
	requisitionID := fmt.Sprintf("job-with-custom-attribute-%d", time.Now().UnixNano())

	job := &talent.Job{
		RequisitionId: requisitionID,
		Title:         jobTitle,
		CompanyName:   companyName,
		ApplicationInfo: &talent.ApplicationInfo{
			Uris: []string{"https://googlesample.com/career"},
		},
		Description: "Design, devolop, test, deploy, maintain and improve software.",
		CustomAttributes: map[string]talent.CustomAttribute{
			"someFieldString": {
				Filterable:   true,
				StringValues: []string{"someStrVal"},
			},
			"someFieldLong": {
				Filterable: true,
				LongValues: []int64{900},
			},
		},
	}
	return job
}

Node.js

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/**
 * Generate a job with a custom attribute.
 */
const generateJobWithACustomAttribute = (companyName) => {
  const requisitionId = `jobWithACustomAttribute: ${new Date().getTime()}`;
  const jobTitle = 'Software Engineer';
  const applicationUrls = ['http://careers.google.com'];
  const description =
    'Design, develop, test, deploy, maintain and improve software.';

  const customAttributes = {
    someFieldName1: {stringValues: ['value1'], filterable: true},
    someFieldName2: {longValues: [256], filterable: true},
  };

  const job = {
    companyName: companyName,
    requisitionId: requisitionId,
    title: jobTitle,
    applicationInfo: {uris: applicationUrls},
    description: description,
    customAttributes: customAttributes,
  };

  console.log(`Job generated: ${JSON.stringify(job)}`);
  return job;
};

Ruby

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

# company_name   = "The resource name of the company listing the job. The format is "projects/{project_id}/companies/{company_id}""
# requisition_id = "The posting ID, assigned by the client to identify a job"

require "google/apis/jobs_v3"

jobs = Google::Apis::JobsV3
talent_solution_client = jobs::CloudTalentSolutionService.new
# @see
# https://developers.google.com/identity/protocols/application-default-credentials#callingruby
talent_solution_client.authorization = Google::Auth.get_application_default(
  "https://www.googleapis.com/auth/jobs"
)
# Constructs custom attributes map
custom_attributes = {}
# First custom attribute
custom_attributes["someFieldName1"] = jobs::CustomAttribute.new string_values: ["value1"],
                                                                filterable:    true
# Second custom attribute
custom_attributes["someFieldName2"] = jobs::CustomAttribute.new long_values: [256],
                                                                filterable:  true
# Creates job with custom attributes
job_generated =
  jobs::Job.new requisition_id:    requisition_id,
                title:             " Lab Technician",
                company_name:      company_name,
                application_info:  (jobs::ApplicationInfo.new uris: ["http://careers.google.com"]),
                description:       "Design, develop, test, deploy, maintain and improve software.",
                custom_attributes: custom_attributes

puts "Featured Job generated: #{job_generated.to_json}"
job_generated

Crea un filtro en el campo customAttribute:

Java

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/** CustomAttributeFilter on String value CustomAttribute */
public static void filtersOnStringValueCustomAttribute()
    throws IOException, InterruptedException {
  // Make sure to set the requestMetadata the same as the associated search request
  RequestMetadata requestMetadata =
      new RequestMetadata()
          // Make sure to hash your userID
          .setUserId("HashedUserId")
          // Make sure to hash the sessionID
          .setSessionId("HashedSessionID")
          // Domain of the website where the search is conducted
          .setDomain("www.google.com");

  String customAttributeFilter = "NOT EMPTY(someFieldName1)";
  JobQuery jobQuery = new JobQuery().setCustomAttributeFilter(customAttributeFilter);

  SearchJobsRequest searchJobsRequest =
      new SearchJobsRequest()
          .setJobQuery(jobQuery)
          .setRequestMetadata(requestMetadata)
          .setJobView("JOB_VIEW_FULL");
  SearchJobsResponse response =
      talentSolutionClient
          .projects()
          .jobs()
          .search(DEFAULT_PROJECT_ID, searchJobsRequest)
          .execute();
  Thread.sleep(1000);
  System.out.printf("Custom search job results (String value): %s\n", response);
}

Python

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

def custom_attribute_filter_string_value(client_service):
    request_metadata = {
        'user_id': 'HashedUserId',
        'session_id': 'HashedSessionId',
        'domain': 'www.google.com'
    }

    custom_attribute_filter = 'NOT EMPTY(someFieldName1)'
    job_query = {'custom_attribute_filter': custom_attribute_filter}
    request = {
        'request_metadata': request_metadata,
        'job_query': job_query,
        'job_view': 'JOB_VIEW_FULL'
    }

    response = client_service.projects().jobs().search(
        parent=parent, body=request).execute()
    print(response)

C#

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


public static void FiltersOnStringValueCustomAttribute()
{
    RequestMetadata requestMetadata = new RequestMetadata()
    {
        UserId = "HashedUserId",
        SessionId = "HashedSessionId",
        Domain = "www.google.com"
    };

    string customAttributeFilter = "NOT EMPTY(custom_attribute)";
    JobQuery jobQuery = new JobQuery()
    {
        CustomAttributeFilter = customAttributeFilter
    };

    SearchJobsRequest searchJobsRequest = new SearchJobsRequest()
    {
        JobQuery = jobQuery,
        RequestMetadata = requestMetadata,
        JobView = "JOB_VIEW_FULL"
    };

    SearchJobsResponse response = jobServiceClient.Projects.Jobs.Search(searchJobsRequest, parent).Execute();

    Console.WriteLine("Searched on custom attribute: " + ToJsonString(response));
}

Go

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


// filterOnStringValueCustomAttribute searches for jobs on a string value custom
// atrribute.
func filterOnStringValueCustomAttribute(w io.Writer, projectID string) (*talent.SearchJobsResponse, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %v", err)
	}

	parent := "projects/" + projectID
	req := &talent.SearchJobsRequest{
		JobQuery: &talent.JobQuery{
			CustomAttributeFilter: "NOT EMPTY(someFieldString)",
		},
		// Make sure to set the RequestMetadata the same as the associated
		// search request.
		RequestMetadata: &talent.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",
		},
		JobView: "JOB_VIEW_FULL",
	}
	resp, err := service.Projects.Jobs.Search(parent, req).Do()
	if err != nil {
		return nil, fmt.Errorf("failed to search for jobs with string value custom attribute: %v", err)
	}

	fmt.Fprintln(w, "Jobs:")
	for _, j := range resp.MatchingJobs {
		fmt.Fprintf(w, "\t%q\n", j.Job.Name)
	}

	return resp, nil
}

Node.js

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/**
 * CustomAttributeFilter on String value CustomAttribute
 */
const filtersOnStringValueCustomAttribute = async (jobServiceClient) => {
  try {
    const customAttributeFilter = 'NOT EMPTY(someFieldName1)';
    const jobQuery = {customAttributeFilter: customAttributeFilter};
    const request = {
      parent: `projects/${PROJECT_ID}`,
      resource: {
        jobQuery: jobQuery,
        requestMetadata: REQUEST_META_DATA,
        jobView: 'JOB_VIEW_FULL',
      },
    };

    const result = await jobServiceClient.projects.jobs.search(request);
    console.log(JSON.stringify(result.data));
  } catch (e) {
    console.log(e);
    throw e;
  }
};

Ruby

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

# project_id      = "Id of the project"

require "google/apis/jobs_v3"

jobs = Google::Apis::JobsV3
talent_solution_client = jobs::CloudTalentSolutionService.new
# @see https://developers.google.com/identity/protocols/application-default-credentials#callingruby
talent_solution_client.authorization = Google::Auth.get_application_default(
  "https://www.googleapis.com/auth/jobs"
)

# Make sure to set the request_metadata the same as the associated search request
request_metadata = jobs::RequestMetadata.new user_id:    "HashedUserId",
                                             session_id: "HashedSessionId",
                                             domain:     "www.google.com"

# Perform a search for analyst  related jobs
job_query = jobs::JobQuery.new custom_attribute_filter: "NOT EMPTY(someFieldName1)"
search_jobs_request = jobs::SearchJobsRequest.new request_metadata: request_metadata,
                                                  job_query:        job_query,
                                                  job_view:         "JOB_VIEW_FULL"
search_jobs_response = talent_solution_client.search_jobs project_id, search_jobs_request

puts search_jobs_response.to_json
search_jobs_response

Crea otro filtro con customAttribute:

Java

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/** CustomAttributeFilter on Long value CustomAttribute */
public static void filtersOnLongValueCustomAttribute() throws IOException, InterruptedException {
  // Make sure to set the requestMetadata the same as the associated search request
  RequestMetadata requestMetadata =
      new RequestMetadata()
          // Make sure to hash your userID
          .setUserId("HashedUserId")
          // Make sure to hash the sessionID
          .setSessionId("HashedSessionID")
          // Domain of the website where the search is conducted
          .setDomain("www.google.com");

  String customAttributeFilter = "(255 <= someFieldName2) AND (someFieldName2 <= 257)";
  JobQuery jobQuery = new JobQuery().setCustomAttributeFilter(customAttributeFilter);

  SearchJobsRequest searchJobsRequest =
      new SearchJobsRequest()
          .setJobQuery(jobQuery)
          .setJobView("JOB_VIEW_FULL")
          .setRequestMetadata(requestMetadata);

  SearchJobsResponse response =
      talentSolutionClient
          .projects()
          .jobs()
          .search(DEFAULT_PROJECT_ID, searchJobsRequest)
          .execute();
  Thread.sleep(1000);
  System.out.printf("Custom search job results (Long value): %s\n", response);
}

Python

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

def custom_attribute_filter_long_value(client_service):
    request_metadata = {
        'user_id': 'HashedUserId',
        'session_id': 'HashedSessionId',
        'domain': 'www.google.com'
    }

    custom_attribute_filter = ('(255 <= someFieldName2) AND'
                               ' (someFieldName2 <= 257)')
    job_query = {'custom_attribute_filter': custom_attribute_filter}
    request = {
        'request_metadata': request_metadata,
        'job_query': job_query,
        'job_view': 'JOB_VIEW_FULL'
    }

    response = client_service.projects().jobs().search(
        parent=parent, body=request).execute()
    print(response)

C#

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


public static void FiltersOnLongValueCustomAttribute()
{
    RequestMetadata requestMetadata = new RequestMetadata()
    {
        UserId = "HashedUserId",
        SessionId = "HashedSessionId",
        Domain = "www.google.com"
    };

    string customAttributeFilter = "(255 <= someFieldName2) AND (someFieldName2 <= 267)";
    JobQuery jobQuery = new JobQuery()
    {
        CustomAttributeFilter = customAttributeFilter
    };

    SearchJobsRequest searchJobsRequest = new SearchJobsRequest()
    {
        JobQuery = jobQuery,
        RequestMetadata = requestMetadata,
        JobView = "JOB_VIEW_FULL"
    };

    SearchJobsResponse response = jobServiceClient.Projects.Jobs.Search(searchJobsRequest, parent).Execute();

    Console.WriteLine("Searched on custom long attribute: " + ToJsonString(response));
}

Go

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


// filterOnLongValueCustomAttribute searches for jobs on a long value custom
// atrribute.
func filterOnLongValueCustomAttribute(w io.Writer, projectID string) (*talent.SearchJobsResponse, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %v", err)
	}

	parent := "projects/" + projectID
	req := &talent.SearchJobsRequest{
		JobQuery: &talent.JobQuery{
			CustomAttributeFilter: "someFieldLong < 1000",
		},
		// Make sure to set the RequestMetadata the same as the associated
		// search request.
		RequestMetadata: &talent.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",
		},
		JobView: "JOB_VIEW_FULL",
	}
	resp, err := service.Projects.Jobs.Search(parent, req).Do()
	if err != nil {
		return nil, fmt.Errorf("failed to search for jobs with long value custom attribute: %v", err)
	}

	fmt.Fprintln(w, "Jobs:")
	for _, j := range resp.MatchingJobs {
		fmt.Fprintf(w, "\t%q\n", j.Job.Name)
	}

	return resp, nil
}

Node.js

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/**
 * CustomAttributeFilter on Long value CustomAttribute
 */
const filtersOnLongValueCustomAttribute = async (jobServiceClient) => {
  try {
    const customAttributeFilter =
      '(255 <= someFieldName2) AND' + ' (someFieldName2 <= 257)';
    const jobQuery = {customAttributeFilter: customAttributeFilter};
    const request = {
      parent: `projects/${PROJECT_ID}`,
      resource: {
        jobQuery: jobQuery,
        requestMetadata: REQUEST_META_DATA,
        jobView: 'JOB_VIEW_FULL',
      },
    };

    const result = await jobServiceClient.projects.jobs.search(request);
    console.log(JSON.stringify(result.data));
  } catch (e) {
    console.log(e);
    throw e;
  }
};

Ruby

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

# project_id       = "Id of the project"

require "google/apis/jobs_v3"

jobs = Google::Apis::JobsV3
talent_solution_client = jobs::CloudTalentSolutionService.new
# @see https://developers.google.com/identity/protocols/application-default-credentials#callingruby
talent_solution_client.authorization = Google::Auth.get_application_default(
  "https://www.googleapis.com/auth/jobs"
)
# Make sure to set the request_metadata the same as the associated search request
request_metadata = jobs::RequestMetadata.new user_id:    "HashedUserId",
                                             session_id: "HashedSessionId",
                                             domain:     "www.google.com"
# Perform a search for analyst  related jobs
custom_attribute_filter = "(255 <= someFieldName2) AND (someFieldName2 <= 257)"
job_query = jobs::JobQuery.new custom_attribute_filter: custom_attribute_filter
search_jobs_request = jobs::SearchJobsRequest.new request_metadata: request_metadata,
                                                  job_query:        job_query,
                                                  job_view:         "JOB_VIEW_FULL"
search_jobs_response = talent_solution_client.search_jobs project_id, search_jobs_request

puts search_jobs_response.to_json
search_jobs_response

Aprovecha los atributos personalizados para facilitar el filtrado con campos combinados:

En el siguiente ejemplo, se ilustra cómo definir una solicitud de búsqueda que busque trabajos con una tasa de bonificación de destino de entre el 10% y el 20%, un trabajo que haya requerido las habilidades de "administración de equipos", o un trabajo que tenga un valor no vacío en el customAttribute "visa_required".

Java

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/** CustomAttributeFilter on multiple CustomAttributes */
public static void filtersOnMultiCustomAttributes() throws IOException, InterruptedException {
  // Make sure to set the requestMetadata the same as the associated search request
  RequestMetadata requestMetadata =
      new RequestMetadata()
          // Make sure to hash your userID
          .setUserId("HashedUserId")
          // Make sure to hash the sessionID
          .setSessionId("HashedSessionID")
          // Domain of the website where the search is conducted
          .setDomain("www.google.com");

  String customAttributeFilter =
      "(someFieldName1 = \"value1\") "
          + "AND ((255 <= someFieldName2) OR (someFieldName2 <= 213))";
  JobQuery jobQuery = new JobQuery().setCustomAttributeFilter(customAttributeFilter);

  SearchJobsRequest searchJobsRequest =
      new SearchJobsRequest()
          .setJobQuery(jobQuery)
          .setRequestMetadata(requestMetadata)
          .setJobView("JOB_VIEW_FULL");
  SearchJobsResponse response =
      talentSolutionClient
          .projects()
          .jobs()
          .search(DEFAULT_PROJECT_ID, searchJobsRequest)
          .execute();
  Thread.sleep(1000);
  System.out.printf("Custom search job results (multiple value): %s\n", response);
}

Python

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

def custom_attribute_filter_multi_attributes(client_service):
    request_metadata = {
        'user_id': 'HashedUserId',
        'session_id': 'HashedSessionId',
        'domain': 'www.google.com'
    }

    custom_attribute_filter = (
        '(someFieldName1 = "value1") AND ((255 <= someFieldName2) OR '
        '(someFieldName2 <= 213))')
    job_query = {'custom_attribute_filter': custom_attribute_filter}
    request = {
        'request_metadata': request_metadata,
        'job_query': job_query,
        'job_view': 'JOB_VIEW_FULL'
    }

    response = client_service.projects().jobs().search(
        parent=parent, body=request).execute()
    print(response)

C#

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


public static void FiltersOnMultiCustomAttributes()
{
    RequestMetadata requestMetadata = new RequestMetadata()
    {
        UserId = "HashedUserId",
        SessionId = "HashedSessionId",
        Domain = "www.google.com"
    };

    string customAttributeFilter = "(someFiledName1 = \"value1\") " +
        "AND ((255 <= someFieldName2) OR (someFieldName2 <= 213))";
    JobQuery jobQuery = new JobQuery()
    {
        CustomAttributeFilter = customAttributeFilter
    };

    SearchJobsRequest searchJobsRequest = new SearchJobsRequest()
    {
        JobQuery = jobQuery,
        RequestMetadata = requestMetadata,
        JobView = "JOB_VIEW_FULL"
    };

    SearchJobsResponse response = jobServiceClient.Projects.Jobs.Search(searchJobsRequest, parent).Execute();

    Console.WriteLine("Searched on cross-field-filtering: " + ToJsonString(response));
}

Go

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


// filterOnLongValueCustomAttribute searches for jobs on multiple custom
// atrributes.
func filterOnMultiCustomAttributes(w io.Writer, projectID string) (*talent.SearchJobsResponse, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %v", err)
	}

	parent := "projects/" + projectID
	req := &talent.SearchJobsRequest{
		JobQuery: &talent.JobQuery{
			CustomAttributeFilter: "(someFieldString = \"someStrVal\") AND (someFieldLong < 1000)",
		},
		// Make sure to set the RequestMetadata the same as the associated
		// search request.
		RequestMetadata: &talent.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",
		},
		JobView: "JOB_VIEW_FULL",
	}
	resp, err := service.Projects.Jobs.Search(parent, req).Do()
	if err != nil {
		return nil, fmt.Errorf("failed to search for jobs with multiple custom attributes: %v", err)
	}

	fmt.Fprintln(w, "Jobs:")
	for _, j := range resp.MatchingJobs {
		fmt.Fprintf(w, "\t%q\n", j.Job.Name)
	}

	return resp, nil
}

Node.js

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/**
 * CustomAttributeFilter on multiple CustomAttributes
 */
const filtersOnMultiCustomAttributes = async (jobServiceClient) => {
  try {
    const customAttributeFilter =
      '(someFieldName1 = "value1") AND ((255 <= someFieldName2) OR ' +
      '(someFieldName2 <= 213))';
    const jobQuery = {customAttributeFilter: customAttributeFilter};
    const request = {
      parent: `projects/${PROJECT_ID}`,
      resource: {
        jobQuery: jobQuery,
        requestMetadata: REQUEST_META_DATA,
        jobView: 'JOB_VIEW_FULL',
      },
    };

    const result = await jobServiceClient.projects.jobs.search(request);
    console.log(JSON.stringify(result.data));
  } catch (e) {
    console.log(e);
    throw e;
  }
};

Ruby

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

# project_id       = "Id of the project"

require "google/apis/jobs_v3"

jobs = Google::Apis::JobsV3
talent_solution_client = jobs::CloudTalentSolutionService.new
# @see
# https://developers.google.com/identity/protocols/application-default-credentials#callingruby
talent_solution_client.authorization = Google::Auth.get_application_default(
  "https://www.googleapis.com/auth/jobs"
)

# Make sure to set the request_metadata the same as the associated search request
request_metadata = jobs::RequestMetadata.new user_id:    "HashedUserId",
                                             session_id: "HashedSessionId",
                                             domain:     "www.google.com"
custom_attribute_filter = "NOT EMPTY(someFieldName1) "\
  "AND ((255 <= someFieldName2) OR (someFieldName2 <= 213))"
job_query = jobs::JobQuery.new custom_attribute_filter: custom_attribute_filter
search_jobs_request = jobs::SearchJobsRequest.new request_metadata: request_metadata,
                                                  job_query:        job_query,
                                                  job_view:         "JOB_VIEW_FULL"
search_jobs_response = talent_solution_client.search_jobs project_id, search_jobs_request

puts search_jobs_response.to_json
search_jobs_response

De forma predeterminada, los extremos searchJobs y seachJobsForAlert solo buscan en los campos listos para usar. Si también necesitas buscar en los campos de customAttribute, usa el campo keywordSearchableJobCustomAttributes para definir una lista de atributos personalizados que quieras incluir en la búsqueda.

Por ejemplo, si un reclutador desea usar un customAttribute "customRequisitions" para almacenar los ID de solicitud de trabajos particulares para un empleador específico, si se configura keywordSearchableJobCustomAttributes para incluir este campo, una búsqueda regular realizada por un reclutador para "ABC123" muestra todos los trabajos que tienen las "customRequisitions" customAttribute con un valor de "ABC123".