Histogram (v4beta1)

Cloud Talent Solution allows you to get a histogram representation of the number of jobs associated with a given search. A histogram search returns a count of all jobs that match a particular query, broken down by the requested SearchMode . For example, a histogram search could return the number of jobs per employment type (full-time, part-time, and so on) that exist in Mountain View, CA.

Histograms are generally run in parallel with a search call, using the same JobQuery and the same requestMetadata .

The histogram is defined by the histogramQuery field, a single string expression. For details on the functions available for histogram queries, see the histogramQuery documentation .

Retrieving a histogram

The following code sample returns histogram results:

Go

To learn how to install and use the client library for CTS, see CTS client libraries . For more information, see the CTS Go API reference documentation .

To authenticate to CTS, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 talent 
  
 "cloud.google.com/go/talent/apiv4beta1" 
  
 "google.golang.org/api/iterator" 
  
 talentpb 
  
 "google.golang.org/genproto/googleapis/cloud/talent/v4beta1" 
 ) 
 // histogramSearch searches for jobs with histogram queries. 
 func 
  
 histogramSearch 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 companyID 
  
 string 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 // Initialize a jobService client. 
  
 c 
 , 
  
 err 
  
 := 
  
 talent 
 . 
  NewJobClient 
 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 fmt 
 . 
 Printf 
 ( 
 "talent.NewJobClient: %v\n" 
 , 
  
 err 
 ) 
  
 return 
  
 err 
  
 } 
  
 // 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" 
 , 
  
 }, 
  
 HistogramQueries 
 : 
  
 [] 
 * 
 talentpb 
 . 
  HistogramQuery 
 
 { 
  
 { 
  
 // More info on histogram facets, constants, and built-in functions: 
  
 // https://godoc.org/google.golang.org/genproto/googleapis/cloud/talent/v4beta1#SearchJobsRequest 
  
 HistogramQuery 
 : 
  
 "count(base_compensation, [bucket(12, 20)])" 
 , 
  
 }, 
  
 }, 
  
 } 
  
 if 
  
 companyID 
  
 != 
  
 "" 
  
 { 
  
 req 
 . 
  JobQuery 
 
  
 = 
  
& talentpb 
 . 
  JobQuery 
 
 { 
  
 CompanyNames 
 : 
  
 [] 
 string 
 { 
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/companies/%s" 
 , 
  
 projectID 
 , 
  
 companyID 
 )}, 
  
 } 
  
 } 
  
 it 
  
 := 
  
 c 
 . 
 SearchJobs 
 ( 
 ctx 
 , 
  
 req 
 ) 
  
 for 
  
 { 
  
 resp 
 , 
  
 err 
  
 := 
  
 it 
 . 
 Next 
 () 
  
 if 
  
 err 
  
 == 
  
 iterator 
 . 
 Done 
  
 { 
  
 return 
  
 nil 
  
 } 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 fmt 
 . 
 Printf 
 ( 
 "it.Next: %v\n" 
 , 
  
 err 
 ) 
  
 return 
  
 err 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Job: %q\n" 
 , 
  
 resp 
 . 
  Job 
 
 . 
 GetName 
 ()) 
  
 } 
 } 
 

Java

For more on installing and creating a Cloud Talent Solution client, see Cloud Talent Solution Client Libraries .

  import 
  
 com.google.cloud.talent.v4beta1.HistogramQuery 
 ; 
 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 
 HistogramSearchJobs 
  
 { 
  
 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" 
 ; 
  
 String 
  
 query 
  
 = 
  
 "count(base_compensation, [bucket(12, 20)])" 
 ; 
  
 searchJobs 
 ( 
 projectId 
 , 
  
 tenantId 
 , 
  
 query 
 ); 
  
 } 
  
 // Search Jobs with histogram queries. 
  
 public 
  
 static 
  
 void 
  
 searchJobs 
 ( 
 String 
  
 projectId 
 , 
  
 String 
  
 tenantId 
 , 
  
 String 
  
 query 
 ) 
  
 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 
  
 = 
  
 "http://www.jobUrl.com" 
 ; 
  
 String 
  
 sessionId 
  
 = 
  
 "Hashed session identifier" 
 ; 
  
 String 
  
 userId 
  
 = 
  
 "Hashed user identifier" 
 ; 
  
 RequestMetadata 
  
 requestMetadata 
  
 = 
  
 RequestMetadata 
 . 
 newBuilder 
 () 
  
 . 
 setDomain 
 ( 
 domain 
 ) 
  
 . 
 setSessionId 
 ( 
 sessionId 
 ) 
  
 . 
 setUserId 
 ( 
 userId 
 ) 
  
 . 
 build 
 (); 
  
 HistogramQuery 
  
 histogramQueriesElement 
  
 = 
  
 HistogramQuery 
 . 
 newBuilder 
 (). 
 setHistogramQuery 
 ( 
 query 
 ). 
 build 
 (); 
  
 SearchJobsRequest 
  
 request 
  
 = 
  
 SearchJobsRequest 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
 parent 
 . 
 toString 
 ()) 
  
 . 
 setRequestMetadata 
 ( 
 requestMetadata 
 ) 
  
 . 
 addHistogramQueries 
 ( 
 histogramQueriesElement 
 ) 
  
 . 
 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

For more on installing and creating a Cloud Talent Solution client, see Cloud Talent Solution Client Libraries .

  from 
  
 google.cloud 
  
 import 
 talent 
 def 
  
 search_jobs 
 ( 
 project_id 
 , 
 tenant_id 
 , 
 query 
 ): 
  
 """ 
 Search Jobs with histogram queries 
 Args: 
 query Histogram query 
 More info on histogram facets, constants, and built-in functions: 
 https://godoc.org/google.golang.org/genproto/googleapis/cloud/talent/v4beta1#SearchJobsRequest 
 """ 
 client 
 = 
 talent 
 . 
  JobServiceClient 
 
 () 
 # project_id = 'Your Google Cloud Project ID' 
 # tenant_id = 'Your Tenant ID (using tenancy is optional)' 
 # query = 'count(base_compensation, [bucket(12, 20)])' 
 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 
 ( 
 query 
 , 
 bytes 
 ): 
 query 
 = 
 query 
 . 
 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 
 = 
 { 
 "domain" 
 : 
 domain 
 , 
 "session_id" 
 : 
 session_id 
 , 
 "user_id" 
 : 
 user_id 
 } 
 histogram_queries_element 
 = 
 { 
 "histogram_query" 
 : 
 query 
 } 
 histogram_queries 
 = 
 [ 
 histogram_queries_element 
 ] 
 # Iterate over all results 
 results 
 = 
 [] 
 request 
 = 
 talent 
 . 
  SearchJobsRequest 
 
 ( 
 parent 
 = 
 parent 
 , 
 request_metadata 
 = 
 request_metadata 
 , 
 histogram_queries 
 = 
 histogram_queries 
 , 
 ) 
 for 
 response_item 
 in 
 client 
 . 
  search_jobs 
 
 ( 
 request 
 = 
 request 
 ) 
 . 
 matching_jobs 
 : 
 print 
 ( 
 "Job summary: 
 {response_item.job_summary} 
 " 
 ) 
 print 
 ( 
 "Job title snippet: 
 {response_item.job_title_snippet} 
 " 
 ) 
 job 
 = 
 response_item 
 . 
 job 
 results 
 . 
 append 
 ( 
 job 
 ) 
 print 
 ( 
 "Job name: 
 {job.name} 
 " 
 ) 
 print 
 ( 
 "Job title: 
 {job.title} 
 " 
 ) 
 return 
 results 
 

Relevance thresholding

Histogram requests do not use relevance thresholding. To ensure that the counts are consistent between a histogram search and an identical job search, disableKeywordMatch in the job search must be false .

Create a Mobile Website
View Site in Mobile | Classic
Share by: