使用 Google Cloud 查詢 Job Search API

在本程式碼研究室中,您將瞭解如何使用 Cloud Talent Solution API (CTS) 強化貴機構的工作搜尋和人才開發。透過 CTS,您可以在職缺搜尋體驗中加入機器學習技術。

您將會瞭解的內容

  • 在 Google Cloud 專案中啟用 CTS
  • 使用 Job Search API 查詢開放式工作

軟硬體需求

  • 已設定帳單的 Google Cloud 專案 (如果尚未建立,請建立一個)。
  • 約 1 小時

您要如何使用本教學課程?

唯讀閱讀 閱讀並完成課程

就您先前使用 Google Cloud Platform 的經驗,您會給予什麼評價?

初級 中級 專家

本教學課程旨在在 Google Cloud Platform 上完整執行。不需要下載工作站。

啟用 Cloud Talent Solutions API

在 Cloud Console 中開啟您的應用程式,然後按一下左上方的漢堡選單。瀏覽選單至 [Talent Solution ->總覽]

由於這是一項新專案,因此系統會將您重新導向至新畫面,要求您啟用 API。按一下 [啟用],並稍候幾分鐘,為這個專案啟用這個 API。

啟用資料記錄功能

現在,請先返回總覽頁面。系統隨即會顯示新的對話方塊,要求您啟用資料記錄功能。這個做法只是要確定您知道 Job Search API 採用需要機器學習模型的機器學習模型。進行整合時,您將可傳送搜尋事件的使用者所發出的事件,進一步訓練這些模型。透過程式碼實作時,您可以指定傳送的資訊。

我們會深入探討這些事件以及稍後傳送事件的方式,但是預先訓練模型可以正常運作。請直接啟用資料記錄功能,然後按一下這個對話方塊左側導覽區中的 [服務帳戶連線]。

設定服務帳戶

提出 API 要求時,您必須代表實際的已驗證帳戶提出要求。Google Cloud Platform 的最佳做法建議為這項服務設定服務帳戶。服務帳戶就像是設定經過驗證的一樣,只適合經過設定且擁有有限權限的已驗證使用者。這有助於打造獨立且安全的系統。

舉例來說,您必須具備服務帳戶才能使用 Job Search API。現在就開始製作!在按一下 [服務帳戶連線] 後,按一下 [管理服務帳戶],然後按一下 [建立服務帳戶]。使用「工作編輯器」授予讀取/寫入權限 (位於左側選單的「Cloud Talent Solution」部分)。您也可以使用「工作檢視者」來設定服務帳戶,這樣將僅具備唯讀存取權。

接下來,系統會詢問您是否要授予使用者存取這個服務帳戶的權限。您可以略過這個步驟,但記得按一下畫面底部的 [+ 建立金鑰]。系統會自動下載新的 JSON 憑證檔案。將這個檔案儲存在您的伺服器中,您稍後撰寫的程式碼將用於驗證。

設定環境變數

為方便起見,我們將使用 Google Cloud Shell。如果您想在自己的開發環境中完成這個步驟,那就太棒了!請務必以您選擇的語言安裝 Google Cloud SDK用戶端程式庫 (這個程式碼研究室將使用 Python)。Cloud Shell 已安裝雲端用戶端程式庫。非常方便,對吧?

如要使用程式庫執行程式碼,您必須設定兩個環境變數:一個用來指定專案 ID,一個用於指定服務帳戶金鑰,另一個用於指定服務帳戶金鑰檔案。我們開始設定。

在專案中,按一下網路控制台右上方的「&_t」圖示,即可開啟 Cloud Shell。新增下列環境變數以指定專案 ID,並設定 json 金鑰檔案的路徑:

export GOOGLE_CLOUD_PROJECT="your-project-id"
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json"

執行系統工作之前,我們必須確定一些確實存在。

如果想要瞭解如何透過 API 新增公司和工作,那就再好不過了!請直接對程式碼主題執行程式碼研究室。否則,本節將逐步引導您完成這項程序。

在 Cloud Shell 中開啟程式碼編輯器

在 Google Cloud Console 中,使用右上角的 Cloud Shell 圖示開啟 Cloud Shell。

顯示在 Cloud Shell 右上角的圖示,是由一系列圖示組成。按一下 [File -> Launch Code Editor],如下所示:

建立部分公司與工作。

使用 File -> New File 來建立新的來源檔案,並填入下列內容。請將其命名為 create_some_jobs.py

請注意,此 API 用於建立公司的 &&; 工作不在此程式碼研究室的範圍內。舊版程式碼研究室「Job Search API」說明瞭相關做法。下方程式碼只是在系統中建立幾項工作,讓我們能測試對 Search API 的不同功能,看看會有什麼結果。

create_some_jobs.py

import os

from googleapiclient.discovery import build
from googleapiclient.errors import Error

# Build the service object, passing in the api name and api version
client_service = build('jobs', 'v3')


project_id = 'projects/' + os.environ['GOOGLE_CLOUD_PROJECT']


def create_company(request):
    # This is the API call that actually creates the new company.
    result = client_service.projects().companies().create(
        parent=project_id, body=request).execute()
    return result


def create_job(request):
    # The actual API call happens here.
    result = client_service.projects().jobs().create(
        parent=project_id, body=request).execute()
    print('Job created: %s' % result)
    return result


def create_foo():
    foocorp_company_request = {
        "company": {
            'display_name': "FooCorp",
            'external_id': "foo2_llc"
        }
    }

    result_company = create_company(foocorp_company_request)
    company_name = result_company.get('name')

    job = {
        'company_name': company_name,
        'title': 'Senior Software Engineer',
        'addresses': ["Mountain View, CA"],

        'description':
        """Experienced software engineer required for full-time position.
        Leadership ability and ability to thrive in highly competitive environment a must.
        <p />Ignore postings from that "Bar" company, their microkitchen is terrible.  Join Team Foo!""",
        'requisition_id': 'foo_swe',
        'application_info': {
            'uris': ['http://www.example.com/foo/software-engineer-application'],
            'emails': ['apply@example.com']
        }
    }
    request = {'job': job}
    result_job = create_job(request)


def create_horsehub():
    horsehub_company_request = {
        "company": {
            'display_name': "Horse Hub",
            'external_id': "horsies_llc"
        }
    }

    result_company = create_company(horsehub_company_request)
    company_name = result_company.get('name')

    job = {
        'company_name': company_name,
        'title': 'Junior Software Engineer',
        'description':
        """Hiring entry level software engineer required for full-time position.
        Must be passionate about industry intersection of horses and technology.
        Ability to intelligently discuss the equine singularity a major bonus.
        <p />C'mon bub! Join Horse Hub!""",
        'requisition_id': 'hh_swe',
        'application_info': {
            'uris': ['http://www.example.com/foo/software-engineer-horsehub'],
            'emails': ['apply-horsehub@example.com']
        }
    }
    request = {'job': job}
    result_job = create_job(request)


def create_tandem():
    tandem_company_request = {
        "company": {
            'display_name': "Tandem",
            'external_id': "tandem"
        }
    }

    result_company = create_company(tandem_company_request)
    company_name = result_company.get('name')

    job = {
        'company_name': company_name,
        'title': 'Test Engineer',
        'description':
        """Hiring Test Engineer for full-time position with Tandem.  Must be detail oriented
        and (obviously) comfortable with pair programming.  Will be working with team of Software Engineers.
        <p />Join Tandem today!""",
        'requisition_id': 'tandem_te',
        'application_info': {
            'uris': ['http://www.example.com/tandem/test-engineer'],
            'emails': ['apply-tandem-test@example.com']
        },
        'promotionValue': 1
    }
    request = {'job': job}
    result_job = create_job(request)
    job['requisition_id'] = 'a_tandem_te'
    result_job = create_job(request)


try:
    create_foo()
    create_horsehub()
    create_tandem()

except Error as e:
    print('Got exception while creating company')
    raise e

在主控台中執行上述程式碼。

$ python create_some_jobs.py
Job created:
(Lots of output here)

每次執行搜尋時,我們都必須提供兩個物件:Request (要求) 和 RequestMetadata (要求中繼資料)。

讓我們先專注在 RequestMetadata。

RequestMetadata 物件提供有關提出搜尋要求的使用者相關資訊。請務必提供這些詳細資料,藉此提供一致的使用者體驗,並進一步訓練機器學習模型。

要求物件是由下列四個屬性組成:

  • domain (必要) 搜尋代管網域,例如 foo.com。
  • sessionId (必填) 工作階段的專屬識別字串。工作階段是指使用者在特定期間內與服務互動的時間長度。
  • userId(必填) 代表使用者的專屬識別碼。
  • deviceInfo (選用) 包含 ID 和裝置類型,方便您區分網頁搜尋和應用程式搜尋。

如需欄位的完整清單、類型與說明資訊,請參閱 RequestMetadata 相關文件。

執行搜尋的基本步驟如下:

  1. 定義我們的 RequestMetadata 物件
  2. 擷取該 RequestMetadata 並將其放入「要求」物件中
  3. 使用要求做為要求定義的 Jobs API 搜尋
  4. 檢查結果。

我們來看看開啟新檔案 search_jobs.py,然後貼到下列檔案中。

search_jobs.py

import os

from googleapiclient.discovery import build
from googleapiclient.errors import Error

client_service = build('jobs', 'v3')
project_id = 'projects/' + os.environ['GOOGLE_CLOUD_PROJECT']

# 1) Define RequestMetadata object
request_metadata = {
    'domain':     'example.com',
    'session_id': 'a5ed434a3f5089b489576cceab824f25',
    'user_id':    '426e428fb99b609d203c0cdb6af3ba36',
}

try:
    # 2) Throw RequestMetadata object in a request
    request = {
        'request_metadata': request_metadata,
    }

    # 3) Make the API call
    response = client_service.projects().jobs().search(
        parent=project_id, body=request).execute()

    # 4) Inspect the results
    if response.get('matchingJobs') is not None:
        print('Search Results:')
        for job in response.get('matchingJobs'):
            print('%s: %s' % (job.get('job').get('title'),
                                job.get('searchTextSnippet')))
    else:
        print('No Job Results')

except Error as e:
    # Alternate 3) or 4) Surface error if things don't work.
    print('Got exception while searching')
    raise e

請嘗試執行這個「搜尋」。

$ python search_jobs.py
Search Results:
Junior Software Engineer: None
Senior Software Engineer: None
Test Engineer: None
Test Engineer: None

會傳回系統中的所有工作。

為什麼?

因為您尚未指定任何搜尋參數!但該怎麼做呢?如果下一個區段僅涵蓋不實用,但對於搜尋資料庫來說必然是其中一件。發生類似情況...

使用搜尋參數新增 JobQuery 物件

嚴格說來,要求中繼資料中繼資料是唯一的必要要求欄位,但更有可能搜尋到真正的東西,所以我們也應該加入一個 JobQuery。JobQuery 可能是相當簡單的物件,具有實際搜尋字詞的查詢字串和各種篩選器,可以減少傳回的工作。舉例來說,您可以只傳回來自特定公司的職缺,或是依聘僱類型進行篩選。我們暫時會繼續使用查詢字串,但是有關於 JobQuery 說明文件中關於篩選器的詳細資訊。

在此之前,修改程式碼來加入 JobQuery,然後將程式碼加入現有要求中。

search_jobs.py

...
# Create a job query object, which is just a key/value pair keyed on "query"
job_query = {'query': 'horses'}
...
    # Update the request to include the job_query field.
    request = {
        'request_metadata': request_metadata,
        'job_query': job_query
    }
 ...

然後再次執行搜尋。

$ python search_jobs.py
Search Results:
Junior Software Engineer: Hiring entry level software engineer required for full-time position. Must be
passionate about industry intersection of <b>horses</b> and technology. Ability to
intelligently discuss the equine singularity a major&nbsp;...

更棒!其實有好多了我們來詳細分析一下:

  • Search API 只使用查詢參數,只傳回相符的結果
  • 傳回的結果包含符合搜尋字詞 bolded 的 HTML 格式程式碼片段,使搜尋結果清單更加容易顯示。
  • 加入搜尋查詢時,您的程式碼就只有 2 行。

此時,您的基本工作搜尋功能已經開始運作了。您可以對工作資料庫執行查詢並擷取結果。不過,還有許多精彩內容等著您來到。

使用 JobView 限制傳回的資料量

您也可以指定「JobView」屬性,也就是要用來傳回多少搜尋要求相關資訊的 ENUM。JOB_VIEW_FULL 可提供每個工作結果的所有資訊,但您可能會想要節省一些位元組,並選擇另一個傳回較少欄位的選項。請選擇最適合您所用平台的選項。可能的值 (從 JobView 說明文件擷取):

  • JOB_VIEW_UNSPECIFIED - 預設。
  • JOB_VIEW_ID_ONLY - 僅包含工作名稱、申請 ID 和語言代碼。
  • JOB_VIEW_MINIMAL - ID_ONLY 檢視中的所有內容,以及名稱、公司名稱和位置。
  • JOB_VIEW_SMALL - MINIMAL 檢視,包含能見度及工作說明。
  • JOB_VIEW_FULL - 所有可用的屬性。

如要深入瞭解有哪些欄位可用,請查看工作說明文件,瞭解系統傳回的搜尋結果物件。以下範例說明如何在要求物件中指定 JobView。

    # What your request object looks like with a jobView field
    request = {
        'requestMetadata': request_metadata,
        'jobQuery': job_query,
        'jobView' : 'JOB_VIEW_FULL'
    }

我們在此程式碼研究室中將使用 JOB_VIEW_FULL 功能,因為所查詢的工作數量 (和同時進行的使用者數) 非常低,因此我們可以輕鬆檢查各種可用的欄位。在實際執行時,建議您在建構搜尋結果索引時使用 JobView,並搭配較新的酬載,因為這種模式比較不需要不必要的頻寬。

分頁

您可能會收到許多結果,因此 API 也會進行分頁處理,方便您使用分頁介面。建議您將網頁大小保持在 20 以下,以免發生延遲問題,並且一律透過 API 使用分頁,而非在所有結果中載入分頁。如果有其他工作機會,您就會在回應中收到下一頁的 PageToken,讓您可以傳遞至下一個搜尋查詢字詞的 PageToken。

再對搜尋結果做出一個調整,只要將一個欄位加入要求中,即可指定每個網頁要顯示的搜尋結果數量。

    request = {
        'requestMetadata': request_metadata,
        'jobQuery': job_query,
        'jobView' : 'JOB_VIEW_FULL',
        'pageSize': 1
    }

請嘗試執行 search_jobs 指令碼,並在要求中指定 pageSize 為 1。如果執行搜尋,系統只會顯示一筆搜尋結果!但是您的資料庫中有多個徵人啟事。剩下的 要怎麼辦呢?

如果結果比目前回應內含更多結果,回應中會顯示 nextPageToken 欄位。使用該值的 <以下舉例說明此做法。

    if "nextPageToken" in response:
        request["pageToken"] = response.get('nextPageToken')
        response = client_service.projects().jobs().search(
            parent=project_id, body=request).execute()
        for job in response.get('matchingJobs'):
            print('%s: %s' % (job.get('job').get('title'),
                                job.get('searchTextSnippet')))

自動檢查查詢

API 內建拼字檢查功能。因此,如果求職者搜尋了「manaer」一詞,系統就會針對包含「manager」這個字詞的商家資訊傳回搜尋結果。

這項功能預設為啟用。如要停用該功能,請在 JobQuery 中加入 disableSpellCheck 欄位並設為 true。

search_jobs.py

job_query = {
   'query': "Enginer",
   'disableSpellCheck': "true"
}

請嘗試執行這項動作。缺少此標記時,「Engineer」會傳回包含「Engineer」這個字串的結果。停用拼字檢查之後,相同查詢會傳回 0 筆結果。

接著就來瞭解一些調整搜尋結果關聯性的方法。

Google Cloud Talent Solution Job Search API 採用機器學習技術 (ML) 技術,在使用者搜尋工作時判斷職缺資訊的關聯性。

「職缺」和「公司」設有多項資源,可供機器學習模型參考判斷搜尋結果的關聯性。您可以提供更多資訊,或使用精選職缺這類功能,大幅影響關聯性。當然,搜尋結果的關聯性可能難以評估,特別是由於內容與不同使用者相關。Job Search API 會根據演算法資料中的幾項信號使用演算法。我們來看看部分信號對搜尋結果的影響。

精選職缺功能可讓您根據使用者價值 (而非根據關聯性) 將職缺排名,進而影響使用者的搜尋結果。當您執行精選職缺搜尋時,只會傳回具有指定促銷活動值的相關工作。

當您想為索引中的個別職缺提供贊助時,精選職缺就相當實用。例如,宣傳職涯重大職涯的徵才網站可以使用「精選職缺搜尋」搜尋,將贊助職缺只傳回求職者。

為了將工作定義為「featured」,建立或更新工作時,工作定義中會使用 promotionValue 欄位。在先前在這個程式碼研究室中,我們先前使用的 create_some_jobs.py 指令碼中,其中一項是使用促銷活動的值來建立。我們再次在程式碼片段中附上相關行的摘要:

create_some_jobs.py

   job = {
       'company_name': company_name,
       'title': 'Test Engineer',
       'description':
       """Hiring Test engineer for full-time position with Tandem.  Must be detail oriented
       and (obviously) comfortable with pair programming..
       <p />Join Tandem today!""",
       'requisition_id': 'tandem_te',
       'application_info': {
           'uris': ['http://www.example.com/tandem/test-engineer'],
           'emails': ['apply-tandem-test@example.com']
       },
       # Down here vvvvv
       'promotionValue': 1
       # Up there ^^^^^
   }

促銷值可以是 1 到 10 之間的任何整數。將搜尋模式改成 FEATURED_JOB_SEARCH (也就是「下一步」之後),搜尋結果會以下列兩種方式影響:

  • 只會顯示 promotionalValue > 0 的工作
  • 工作將按 promotionalValue 遞減排序。具有相同 promotionalValue 的職缺會按照關聯性排序 (由搜尋演算法決定)。
   request = {
       'searchMode': 'FEATURED_JOB_SEARCH',
       'requestMetadata': request_metadata,
       'jobQuery': job_query,
       'jobView' : 'JOB_VIEW_FULL'
   }

請將您的搜尋模式設為 FEATURED_JOB_SEARCH。然後執行程式碼,您應該會看到與以下類似的輸出內容:

$ $ python search_jobs.py
Search Results:
Test Engineer: Hiring Test <b>engineer</b> for full-time position with Tandem. Must be detail oriented
and (obviously) comfortable with pair programming.. Join Tandem today!

如果職缺的 promotionValue 明確設為高於 0,系統只會傳回該結果。

地理位置

地理區域是最重要的資源之一。公司和職缺都有地點屬性,但當使用者搜尋時,系統便會使用工作地點。您應使用工作和公司專屬的地址欄位,這樣 API 就能使用地理位置傳回與搜尋字詞最相關的職缺。如果有人搜尋「臺北」,他們可能會想先查看舊金山境內的職缺,

在我們的範例工作中,FooCorp 資深軟體工程師的定位欄位設為加州 Mountain View。執行這個動作的程式碼 (如果您覺得不想要返回網頁並進行搜尋) 看起來會像這樣:

create_some_jobs.py (地點在 FooCorp 中所定義)

...
    job = {
        'company_name': company_name,
        'title': 'Senior Software Engineer',
        'addresses': ["Mountain View, CA"],
...

城鎮名稱可以正常運作,但請使用完整地址以獲得最佳結果。

儘管在技術上來說並非必要,但新增地點後,求職者就能取得許多實用的功能。CTS 會為您將此地址轉換為緯度/經度,並將其當做搜尋訊號使用。舉例來說,我們在這裡說明如何調整 JobQuery,在 Palo Alto 地區搜尋工作,距離最長為 10 英里:

search_jobs.py (搜尋鄰近/附近的 Palo Alto)

...
location_filter = {
   'address': 'Palo Alto',
   'distance_in_miles': 10,
   }

job_query = {
   'location_filters': [location_filter],
   'query': "Engineer",
}
...

執行該程式碼時請謹記,所有工作建立程式碼都已經提到 Palo Alto 一次沒有工作說明,公司名稱,無。

$ python search_jobs.py
Search Results:
Senior Software Engineer: Experienced software <b>engineer</b> required for full-time position. Leadership ability
and ability to thrive in highly competitive environment a must. Ignore postings
from that &quot;Bar&quot; company, their microkitchen&nbsp;...

傳回結果!因為 Palo Alto 在工作方程 10 英里內 (您在 LocationFilter 中定義的邊界為 10 英里)

除了這個程式碼研究室以外,您還可以運用位置資訊進行其他有趣的操作。建議您瀏覽:

  • 通勤時間搜尋 - 搜尋由通勤時間 (而非距離) 指定區域內的職缺!如果你對大家 都是讀者我們都幫你完成。
  • 多地點搜尋 - 您一次搜尋多個城市工作的方式。

關鍵字和放寬範圍

工作職稱和說明是判斷搜尋查詢是否恰當的關鍵要素。如果張貼的是「全家專職大師」的工作,而且其說明提及「管理軟體開發人員」,則請搜尋「軟體開發經理」。請避免在工作說明中填入大量關鍵字,否則可能會產生關聯性較低的工作機會。

這個 API 也有一些在搜尋時可以傳送的參數,讓您更精準地掌控搜尋結果。如果關鍵字要搜尋一般的機器學習驅動結果之外的關鍵字,您可以使用關鍵字比對功能來啟用或停用關鍵字。並且將某些位置相關篩選器放寬。放寬範圍可擴大特定參數的搜尋範圍,讓您獲得更多搜尋結果。

以上就是這個範例的範例。首先,不啟用擴增功能,請使用「Agile」這個查詢字詞進行搜尋,如果您是使用本程式碼研究室提供的指令碼來建立公司和工作,則不會產生任何操作。原因何在?因為「商家資訊」一詞不列入任何產品資訊的任一處。然而,它是與工程工作相關的熱門程式設計方法。

啟用關鍵字擴增功能,看看有哪些變化。

search_jobs.py (已啟用擴增功能)

...
job_query = {
    'query': "Agile",
}

request = {
    'requestMetadata': request_metadata,
    'jobQuery': job_query,
    'jobView' : 'JOB_VIEW_FULL',
    'enableBroadening' : True
}
...

現在,請重新執行指令碼,這時您將會看到一些結果!

$ python search_jobs.py
Search Results:
Junior Software Engineer: Hiring entry level software engineer required for full-time position. Must be
passionate about industry intersection of horses and technology. Ability to
intelligently discuss the equine singularity a major&nbsp;...

Senior Software Engineer: Experienced software engineer required for full-time position. Leadership ability
and ability to thrive in highly competitive environment a must. Ignore postings
from that &quot;Bar&quot; company, their microkitchen&nbsp;...

Test Engineer: Hiring Test engineer for full-time position with Tandem. Must be detail oriented
and (obviously) comfortable with pair programming.. Join Tandem today!

目前我們如何知道這是「全面發布」的全面性準則?試試「同義詞」和「同義字」等一些同義詞。不論在什麼情況下,皆不會顯示任何內容。

但是,在擴大擴增的餘地,「工作搜尋最佳做法網頁」明確指出,「啟用這項功能」會導致搜尋結果數量增加,但可能會降低整體結果的關聯性。基本上,這項功能存在風險,可能會讓品質提升。另一方面,您的求職者也可能知道如何找到他們剛學到的內容。

探索多元內容

有時候,系統傳回了幾個高度類似的職缺,並在搜尋結果中互相傳回。這會對求職者造成負面影響,避免讓他們看到各種可用的結果。

多樣化功能可以解決這個問題。系統會根據職稱、工作類別和地點,識別出類似的工作。然後,高度相似的結果會進行分群處理,因此只有叢集裡的一個工作會在搜尋結果中的較高位置顯示。您可能在搜尋「工程師」時,發現以下結果:

$ python search_jobs.py
Test Engineer ...
Senior Software Engineer ...
Junior Software Engineer ...
Test Engineer ...

為什麼是這樣?軟體工程師的工作對象來自兩家不同的公司,分別是 HorseHub 和 FooCorp。他們不僅是軟體工程職責,但差異程度足以讓結果彼此相近。

不過,如果您查看「測試工程師」商家資訊,這個資訊實際上是對同一家公司顯示兩則相同的資訊。由於系統預設啟用多樣化功能,因此第 2 名「工程師」的列表可視為較不重要的產品資訊,而非其他可能感興趣的產品資訊。

「多樣化」等級有 3 種可能的設定,但你只能選擇其中一項。這些因素包括:

  • DIVERSIFICATION_LEVEL_UNSPECIFIED - 只表示你沒有指定這個等級,因此應該執行預設值 (目前預設行為與 SIMPLE 相同)
  • DISABLED - 停用多樣化工作。一般來說,被延後到最後一頁的職缺如果因工作十分相似,並不會改變排名。
  • SIMPLE - 預設多樣化行為。系統會排序結果清單,使高度相似的結果推送至搜尋結果最後一頁的尾端。

以下將說明您該如何明確地設定要求的多樣化層級。就像多數人在程式碼研究室中所做的設定一樣,您只需要調整要求即可。請嘗試對查詢查詢和要求進行下列設定,這會停用多樣化並將搜尋字詞設為「工程師」

search_jobs.py (多樣化層級)

job_query = {
    'query': "Engineer",
}

# 2) Throw RequestMetadata object in a request
request = {
    'requestMetadata': request_metadata,
    'jobQuery': job_query,
    'jobView' : 'JOB_VIEW_FULL',
    'diversificationLevel': 'DISABLED'
}

立即執行 search_jobs.py 後,就會發現測試順序有些許不同。測試工程師的工作現在會有些微差異。

$python search_jobs.py
Test Engineer: Hiring Test <b>Engineer</b> for full-time position with Tandem. Must be detail oriented
and (obviously) comfortable with pair programming. Will be working with team of
Software Engineers. Join Tandem today!

Test Engineer: Hiring Test <b>Engineer</b> for full-time position with Tandem. Must be detail oriented
and (obviously) comfortable with pair programming. Will be working with team of
Software Engineers. Join Tandem today!

Software Engineer: Experienced software <b>engineer</b> required for full-time position. Leadership ability
and ability to thrive in highly competitive environment a must. Ignore postings
from that &quot;Bar&quot; company, their microkitchen&nbsp;...

Software Engineer: Hiring entry level software <b>engineer</b> required for full-time position. Must be
passionate about industry intersection of horses and technology. Ability to
intelligently discuss the equine singularity a major&nbsp;...

您已正式瞭解如何運用 Job Search API 查詢工作。

報表主題

  • 設定 Cloud 專案
  • 設定開發環境
  • 查詢工作
  • 使用搜尋參數新增 JobQuery 物件
  • 使用 JobView 限制傳回的資料量
  • 分頁
  • 自動檢查查詢
  • 精選職缺
  • 針對搜尋關聯性進行調整
  • 地理位置
  • 關鍵字和放寬範圍
  • 探索多元內容

瞭解詳情