UI に通勤検索を実装する(v3)

UI に通勤検索を統合すると、求職者は通勤時間によって特定された地域内の求人を検索できるようになります。通勤検索では、ユーザーが選択した交通機関モードと移動時刻に基づいて通勤時間が推測されます。

  1. 通勤検索を実装する前に、Cloud Talent Solution を UI に接続する必要があります。クイックスタート ガイドの手順に沿って Cloud Talent Solution を設定してください。

  2. 通勤検索では、CTS の実装時に求人とともにアップロードされた住所データを使用して通勤時間を計算します。 既存の CTS UI でこの機能を有効にするには、JobQuery.commuteFilter フィールドに CommuteFilter オブジェクトを含めた jobs.search リクエストを送信します。commuteMethodtravelDurationstartCoordinates は必須フィールドです。

    Java

    Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。

    
    public static void commuteSearch(String companyName) 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");
      JobQuery jobQuery =
          new JobQuery()
              .setCommuteFilter(
                  new CommuteFilter()
                      .setRoadTraffic("TRAFFIC_FREE")
                      .setCommuteMethod("TRANSIT")
                      .setTravelDuration("1000s")
                      .setStartCoordinates(
                          new LatLng().setLatitude(37.422408).setLongitude(-122.085609)));
      if (companyName != null) {
        jobQuery.setCompanyNames(Arrays.asList(companyName));
      }
    
      SearchJobsRequest searchJobsRequest =
          new SearchJobsRequest()
              .setJobQuery(jobQuery)
              .setRequestMetadata(requestMetadata)
              .setJobView("JOB_VIEW_FULL")
              .setRequirePreciseResultSize(true);
      SearchJobsResponse response =
          talentSolutionClient
              .projects()
              .jobs()
              .search(DEFAULT_PROJECT_ID, searchJobsRequest)
              .execute();
      Thread.sleep(1000);
      System.out.printf("Search jobs for commute results: %s\n", response);
    }

    Python

    Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。

    def commute_search(client_service, company_name):
        request_metadata = {
            "user_id": "HashedUserId",
            "session_id": "HashedSessionId",
            "domain": "www.google.com",
        }
        start_location = {"latitude": 37.422408, "longitude": -122.085609}
        commute_preference = {
            "road_traffic": "TRAFFIC_FREE",
            "commute_method": "TRANSIT",
            "travel_duration": "1000s",
            "start_coordinates": start_location,
        }
        job_query = {"commute_filter": commute_preference}
        if company_name is not None:
            job_query.update({"company_names": [company_name]})
        request = {
            "job_query": job_query,
            "request_metadata": request_metadata,
            "job_view": "JOB_VIEW_FULL",
            "require_precise_result_size": True,
        }
        response = (
            client_service.projects().jobs().search(parent=parent, body=request).execute()
        )
        print(response)
    
    

    Go

    Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。

    
    // commuteSearch searches for jobs within commute filter.
    func commuteSearch(w io.Writer, projectID, companyName string) (*talent.SearchJobsResponse, error) {
    	ctx := context.Background()
    
    	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
    	if err != nil {
    		return nil, fmt.Errorf("google.DefaultClient: %w", err)
    	}
    	// Create the jobs service client.
    	service, err := talent.New(client)
    	if err != nil {
    		return nil, fmt.Errorf("talent.New: %w", err)
    	}
    
    	jobQuery := &talent.JobQuery{
    		CommuteFilter: &talent.CommuteFilter{
    			RoadTraffic:    "TRAFFIC_FREE",
    			CommuteMethod:  "TRANSIT",
    			TravelDuration: "1000s",
    			StartCoordinates: &talent.LatLng{
    				Latitude:  37.422408,
    				Longitude: -122.085609,
    			},
    		},
    	}
    	if companyName != "" {
    		jobQuery.CompanyNames = []string{companyName}
    	}
    
    	parent := "projects/" + projectID
    	req := &talent.SearchJobsRequest{
    		// 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",
    		},
    		// Set the actual search term as defined in the jobQuery.
    		JobQuery: jobQuery,
    		// Set the search mode to a regular search.
    		SearchMode:               "JOB_SEARCH",
    		RequirePreciseResultSize: true,
    	}
    	resp, err := service.Projects.Jobs.Search(parent, req).Do()
    	if err != nil {
    		return nil, fmt.Errorf("failed to search for jobs with commute filter: %w", err)
    	}
    	return resp, nil
    }
    

    Ruby

    Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。

    # project_id              = "Id of the project"
    # commute_method          = "The method of transportation for which to calculate the commute time"
    # travel_duration         = "The maximum travel time in seconds"
    # start_coordinates       = "The latitude and longitude of the location from which to calculate the commute time"
    
    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"
    # Set location filter
    commute_filter = jobs::CommuteFilter.new road_traffic:      "TRAFFIC_FREE",
                                             commute_method:    commute_method,
                                             travel_duration:   travel_duration,
                                             start_coordinates: start_coordinates
    # Perform a search for analyst  related jobs
    search_jobs_request =
      jobs::SearchJobsRequest.new request_metadata:            request_metadata,
                                  job_query:                   (jobs::JobQuery.new commute_filter: commute_filter),
                                  job_view:                    "JOB_VIEW_FULL",
                                  require_precise_result_size: true
    search_jobs_response = talent_solution_client.search_jobs project_id, search_jobs_request
    puts search_jobs_response.to_json
    search_jobs_response

UI に関する推奨事項

  1. Cloud Talent Solution では、距離(CTS 場所フィルタを使用)と通勤時間の両方で検索することはできません。 求職者が両方の選択肢にアクセスできるようにする場合は、2 つのタブを用意するなどの手段を使用します。

  2. アプリケーションのフロントエンドを変更して、求職者が通勤検索をリクエストしたときに、バックエンドで通勤フィルタに関連情報が入力され、通常の検索リクエストと同じように API が呼び出されるようにします。

  3. 新しく追加された次のアイテムを UI に含めます。

    • 距離検索と通勤検索のいずれかを選択するためのオプション。たとえば、次のような検索 UI になります。

    • 通勤手段のオプションを選択するためのプルダウン メニュー。

    • 交通状況を調整するためのオプション。

    • 合計移動時間(サポートされている最大移動時間は 60 分です)。

    • 通勤の出発時刻。

  4. API から返された通勤時間に関する情報は、求職者に情報を表示する際に使用されます。関連度の高い求人のうち、指定した通勤時間の圏内にあるものだけが結果リストとして返されます。結果として返される通勤時間圏内の求人の順序と件数を調整する方法については、求人検索のベスト プラクティスに関するドキュメントをご覧ください。

Maps API を利用すると、CTS API から返された通勤時間情報に基づいてマップを生成し、求職者に返される結果にそのマップを埋め込むことができます。Maps API スイートには、マップを表示するためのオプションがいくつか用意されています。Maps API オプションの中には、他のオプションよりも効果的なものがあります。たとえば、求職者に返される関連性の高い求人を最適に可視化する方法として、Google Maps JavaScript ヒートマップ可視化マーカー クラスタリングを組み合わせて使用すると、求職者が通勤設定で指定した地域内での求人を可視化できます。逆に、ルート検索モードは、検索リクエストで返されたすべてのジョブを表示しないため、おすすめしません。

通勤時間に基づく検索の実装の詳細については、通勤に関する検索入門ガイドをご覧ください。