Mengkueri Job Search API dengan Google Cloud

Dalam codelab ini, Anda akan mempelajari cara meningkatkan penelusuran lowongan dan akuisisi bakat untuk organisasi Anda menggunakan Cloud Talent Solution API (CTS). Dengan CTS, Anda dapat menambahkan kecanggihan machine learning ke pengalaman penelusuran lowongan!

Yang akan Anda pelajari

  • Mengaktifkan CTS dalam project Google Cloud Anda
  • Kueri untuk lowongan yang terbuka menggunakan Job Search API

Yang Anda butuhkan

  • Project Google Cloud dengan penagihan sudah disiapkan (Jika Anda belum memilikinya, buat project.
  • Sekitar 1 jam

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman sebelumnya dengan Google Cloud Platform?

Pemula Menengah Pakar

Tutorial ini dimaksudkan untuk berjalan sepenuhnya di Google Cloud Platform. Download tidak diperlukan untuk komputer kerja Anda.

Mengaktifkan Cloud Talent Solutions API

Buka aplikasi di Cloud Console dan klik menu tiga garis di kiri atas. Lihat menu untuk Solusi Talent -> Ringkasan.

Karena ini adalah project baru, Anda akan dialihkan ke layar baru yang meminta Anda mengaktifkan API. Klik aktifkan dan tunggu beberapa menit agar API diaktifkan untuk project ini.

Mengaktifkan Logging data

Sekarang kembali ke halaman ringkasan dari sebelumnya. Dialog baru akan muncul yang meminta Anda untuk mengaktifkan logging data. Ini benar-benar untuk memastikan Anda tahu bahwa Job Search API didukung oleh model machine learning yang membutuhkan data. Sebagai bagian dari integrasi, Anda sebenarnya dapat mengirim peristiwa dari pengguna yang melakukan penelusuran untuk melatih model tersebut lebih lanjut. Saat ini diimplementasikan melalui kode, Anda bisa menetapkan informasi apa yang dikirimkan.

Kita akan membahas peristiwa tersebut lebih dalam dan cara mengirimkannya nanti, tetapi model terlatih akan berfungsi dengan baik. Lanjutkan dan aktifkan logging data, lalu klik "koneksi akun layanan" di panel navigasi sebelah kiri pada dialog ini.

Menyiapkan Akun Layanan

Saat membuat permintaan API, Anda harus membuatnya atas nama akun yang sebenarnya diautentikasi. Praktik terbaik Google Cloud Platform merekomendasikan penyiapan akun layanan untuk hal ini. Anggap akun layanan sebagai cara mudah untuk menyiapkan pengguna terautentikasi yang memiliki izin terbatas. Hal ini akan membantu Anda membangun sistem yang independen dan aman.

Misalnya, kita memerlukan akun layanan untuk menggunakan Job Search API. Mari kita buat! Setelah mengklik "Koneksi Akun Layanan", klik "Kelola Akun Layanan" di sepanjang bagian atas halaman, lalu "Buat Akun Layanan". Beri izin baca/tulis menggunakan "Job Editor" di bagian "Cloud Talent Solution" pada menu kiri. Anda juga dapat menyiapkan akun layanan hanya dengan "Job Viewer" sehingga hanya akan memiliki akses hanya baca.

Langkah berikutnya akan menanyakan apakah Anda ingin memberikan akses ke akun layanan ini kepada pengguna. Anda dapat melewati langkah ini, namun pastikan untuk mengeklik "+ Buat Kunci" di dekat bagian bawah. File kredensial JSON baru akan didownload secara otomatis. Simpan file ini di server Anda, kode yang Anda tulis di bagian berikutnya akan digunakan untuk mengautentikasi.

Menetapkan variabel lingkungan

Agar mudah, kami akan menggunakan Google Cloud Shell. Jika Anda ingin melakukan ini dari lingkungan pengembangan Anda sendiri, bagus! Pastikan Anda menginstal Google Cloud SDK dan library klien dalam bahasa pilihan Anda (codelab ini akan menggunakan Python). Cloud Shell sudah memiliki library klien cloud yang terinstal. Berguna, bukan?

Untuk menjalankan kode menggunakan library, Anda harus memastikan dua variabel lingkungan ditetapkan: Satu untuk menentukan project ID Anda, yang lain untuk menentukan file kunci akun layanan Anda. Ayo kita setel.

Dari project Anda, klik ikon ">_" di kanan atas konsol web Anda untuk membuka cloud shell. Tambahkan variabel lingkungan berikut untuk menentukan project ID Anda dan setel jalur ke file kunci json:

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

Sebelum melakukan penelusuran lowongan di sistem, kami harus memastikan beberapa lowongan benar-benar ada.

Jika Anda ingin mempelajari cara menambahkan perusahaan dan pekerjaan menggunakan API, bagus! Lanjutkan dan lakukan codelab tentang subjek tersebut. Jika tidak, bagian ini akan memandu Anda.

Buka editor kode di Cloud Shell

Dari Google Cloud Console, buka Cloud Shell menggunakan ikon Cloud Shell di kanan atas.

Di sepanjang kanan atas Cloud Shell akan terdapat serangkaian ikon. Klik File -> Luncurkan Editor Kode , seperti yang ditampilkan di sini:

Buat beberapa perusahaan dan pekerjaan.

Gunakan File -> File Baru untuk membuat file sumber baru, dan isi dengan konten di bawah. Beri nama create_some_jobs.py.

Perhatikan bahwa penggunaan API untuk membuat perusahaan & tugas berada di luar cakupan codelab ini. Codelab sebelumnya, "API Penelusuran Lowongan" menunjukkan caranya. Kode di bawah ini hanya membuat beberapa tugas di sistem sehingga kita dapat bereksperimen dengan berbagai fitur API penelusuran dan melihat hasil yang muncul.

buat_beberapa_pekerjaan.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

Jalankan kode di atas dari konsol.

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

Untuk setiap penelusuran, kita perlu menyediakan dua objek: Request dan RequestMetadata.

Mari kita fokus pada RequestMetadata terlebih dahulu.

Objek RequestMetadata memberikan informasi tentang pengguna yang membuat permintaan penelusuran. Penting untuk memberikan detail ini untuk memastikan pengalaman pengguna yang konsisten serta untuk melatih model machine learning dengan lebih baik.

Keempat properti berikut membentuk objek permintaan.:

  • domain (wajib) domain tempat penelusuran dihosting, seperti foo.com.
  • sessionId (wajib) string identifikasi unik untuk sebuah sesi. Sesi didefinisikan sebagai durasi interaksi pengguna akhir dengan layanan selama jangka waktu tertentu.
  • userId (wajib) string identifikasi unik yang mewakili pengguna.
  • deviceInfo (opsional) dan terdiri dari ID dan jenis perangkat, sehingga Anda dapat membedakan antara penelusuran web dan penelusuran aplikasi.

Daftar lengkap kolom, beserta info jenis dan deskripsi, juga tersedia dalam dokumentasi untuk RequestMetadata

Langkah minimum untuk melakukan penelusuran adalah:

  1. Menentukan objek RequestMetadata kita
  2. Ambil RequestMetadata tersebut dan masukkan ke dalam objek "request"
  3. Melakukan penelusuran API Pekerjaan menggunakan permintaan tersebut sebagai definisi kueri
  4. Periksa hasilnya.

Mari kita lihat seperti apa tampilannya. Buka file baru, search_jobs.py, dan tempel teks berikut ini.

penelusuran_pekerjaan.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

Coba jalankan "telusuri" ini.

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

Ini mengembalikan setiap pekerjaan di sistem.

Mengapa demikian?

Karena Anda belum menentukan parameter penelusuran apa pun! Tetapi bagaimana Anda akan mencapainya? Jika hanya bagian berikutnya yang membahas sesuatu, tidak hanya berguna, tetapi juga sangat diperlukan untuk menelusuri database. Sesuatu seperti...

Menambahkan objek JobQuery dengan parameter penelusuran

Secara teknis RequestMetadata adalah satu-satunya kolom permintaan yang diperlukan, namun kemungkinan besar, kami sebenarnya ingin menelusuri sesuatu, jadi kami juga akan menyertakan JobQuery. JobQuery dapat berupa objek yang cukup sederhana, dengan string kueri untuk istilah penelusuran yang sebenarnya dan filter yang berbeda untuk membantu mempersempit tugas yang ditampilkan. Misalnya, Anda hanya dapat mengembalikan pekerjaan dari perusahaan tertentu atau memfilter berdasarkan jenis pekerjaan. Untuk saat ini, kami akan tetap menggunakan string kueri, tetapi ada informasi lebih lanjut tentang filter yang tersedia di Dokumentasi JobQuery.

Ubah kode dari sebelumnya untuk menyertakan JobQuery, dan tambahkan ke permintaan yang sudah ada.

penelusuran_pekerjaan.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
    }
 ...

Kemudian, jalankan penelusuran lagi.

$ 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;...

Lebih baik! Sebenarnya lebih baik dalam beberapa hal. Mari uraikan apa yang terjadi:

  • API penelusuran mengambil parameter kueri dan hanya menampilkan hasil yang cocok
  • Hasil yang ditampilkan mencakup cuplikan berformat HTML dengan istilah penelusuran yang cocok dicetak tebal, agar lebih mudah ditampilkan dalam daftar hasil penelusuran.
  • Menambahkan kueri penelusuran hanya memerlukan 2 baris kode tambahan.

Pada tahap ini, Anda telah memulai dan menjalankan penelusuran lowongan dasar. Anda dapat menjalankan kueri terhadap database pekerjaan dan mengambil hasil. Namun, ada banyak hal menakjubkan yang akan hadir.

Membatasi jumlah data yang ditampilkan menggunakan jobView

Anda juga dapat menentukan properti jobView, yaitu ENUM yang mendeklarasikan seberapa banyak informasi yang ingin Anda dapatkan kembali dengan permintaan penelusuran. JOB_VIEW_FULL memberikan kembali semua informasi tentang setiap hasil tugas, tetapi Anda dapat menyimpan beberapa byte dan memilih opsi lain yang menampilkan lebih sedikit kolom. Pilih opsi yang paling sesuai untuk platform yang sedang Anda kerjakan. Nilai yang memungkinkan (diambil dari Dokumentasi JobView) adalah:

  • JOB_VIEW_UNSPECIFIED - default.
  • JOB_VIEW_ID_ONLY - Hanya berisi nama pekerjaan, ID permintaan, dan kode bahasa.
  • JOB_VIEW_MINIMAL - Semuanya dalam tampilan ID_ONLY, plus judul, nama perusahaan, dan lokasi.
  • JOB_VIEW_small - semua yang ada di tampilan MINIMAL, ditambah visibilitas dan deskripsi pekerjaan.
  • JOB_VIEW_FULL - Semua atribut yang tersedia.

Untuk mendapatkan gambaran yang lebih mendalam tentang kolom yang tersedia, Anda dapat melihat dokumentasi terkait Job, objek yang ditampilkan di hasil kueri penelusuran. Berikut adalah contoh cara menentukan JobView di objek permintaan Anda.

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

Di sini, kita menetapkannya ke JOB_VIEW_FULL untuk tujuan codelab ini, karena jumlah tugas yang dikueri (dan jumlah pengguna simultan) cukup rendah, dan memungkinkan kita memeriksa berbagai kolom yang tersedia dengan lebih mudah. Dalam produksi, Anda akan menggunakan JobView dengan payload yang lebih ringan saat mem-build indeks hasil penelusuran, karena hal itu akan mengurangi bandwidth yang tidak diperlukan.

Lakukan penomoran halaman

Karena Anda mungkin mendapatkan banyak hasil, API ini juga akan melakukan penomoran halaman sehingga Anda dapat menggunakan antarmuka penomoran halaman. Sebaiknya pertahankan ukuran halaman hingga 20 atau kurang untuk menghindari masalah latensi dan selalu menggunakan penomoran halaman melalui API, dan bukan memuat dalam semua hasil. Anda akan mendapatkan nextPageToken dalam respons jika ada lebih banyak pekerjaan sehingga Anda dapat meneruskannya ke pageToken kueri penelusuran berikutnya.

Sekali lagi, penyesuaian pada hasil penelusuran ini dilakukan dengan menambahkan satu kolom ke permintaan, yang menentukan berapa banyak hasil penelusuran yang Anda inginkan per halaman.

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

Coba jalankan skrip search_jobs dengan pageSize yang ditentukan sebagai 1 dalam permintaan. Jika menjalankan itu, Anda hanya akan mendapatkan satu hasil penelusuran! Namun, Anda memiliki lebih dari satu postingan lowongan di database. Bagaimana Anda mendapatkan sisanya?

Jika ada lebih banyak hasil daripada respons saat ini yang ada, akan ada kolom nextPageToken dalam respons. Ambil nilai tersebut, masukkan kembali ke dalam permintaan yang ada dengan nama pageToken, dan jalankan penelusuran lagi. Berikut adalah contoh cara melakukannya.

    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')))

Periksa Ejaan Secara Otomatis untuk Kueri

PeriksaEjaan disertakan ke dalam API - Jadi, jika pencari kerja Anda menelusuri kata "manaer", hasil akan dikembalikan untuk cantuman dengan kata "pengelola".

Fitur ini diaktifkan secara default. Jika Anda ingin menonaktifkannya, tambahkan kolom disableSpellCheck ke JobQuery lalu tetapkan ke true.

penelusuran_pekerjaan.py

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

Coba jalankan. Jika tanda tersebut tidak ada, "Engineer" akan menampilkan hasil dengan string "Engineer" di dalamnya. Bila fitur periksa ejaan dinonaktifkan, kueri yang sama akan menampilkan 0 hasil.

Berikutnya mari kita lihat beberapa cara untuk menyesuaikan relevansi hasil penelusuran.

Google Cloud Talent Solution Job Search API menggunakan Machine Learning (ML) untuk menentukan relevansi listingan lowongan saat pengguna menelusuri lowongan.

Lowongan dan Perusahaan memiliki beberapa properti yang dirujuk oleh model machine learning untuk menentukan relevansi hasil penelusuran. Anda dapat memengaruhi relevansi tersebut secara signifikan dengan memberikan lebih banyak informasi atau menggunakan hal-hal seperti pekerjaan unggulan. Tentu saja, relevansi hasil penelusuran bisa menjadi rumit untuk diukur, terutama karena hal yang berbeda relevan bagi orang yang berbeda pula. Job Search API menggunakan algoritme berdasarkan beberapa sinyal dari data tugas. Mari lihat bagaimana beberapa sinyal ini memengaruhi hasil penelusuran.

Pekerjaan Unggulan memungkinkan Anda memengaruhi hasil penelusuran pengguna dengan menentukan peringkat pekerjaan berdasarkan nilai promosi, bukan murni oleh relevansi. Saat Anda menjalankan penelusuran Lowongan Unggulan, penelusuran tersebut hanya menampilkan lowongan relevan dengan nilai promosi yang ditetapkan.

Pekerjaan Unggulan berguna jika Anda ingin mensponsori setiap lowongan dalam indeks Anda. Misalnya, situs karier yang mempromosikan pekerjaan penting bisnis dapat menggunakan penelusuran Lowongan Unggulan untuk hanya menampilkan lowongan bersponsor kepada pencari kerja.

Untuk mendefinisikan pekerjaan sebagai "featured", bidang promotionValue digunakan dalam definisi pekerjaan saat membuat atau memperbarui pekerjaan. Di skrip create_some_jobs.py yang kita gunakan sebelumnya dalam codelab ini, salah satu tugas dibuat menggunakan nilai promosi. Berikut cuplikannya lagi, dengan menyertakan baris relevan di komentar:

buat_beberapa_pekerjaan.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 ^^^^^
   }

Nilai promosi tersebut dapat berupa bilangan bulat dari 1-10. Jika Anda mengubah mode penelusuran ke FEATURED_JOB_SEARCH (Anda akan melihat bagaimana hasilnya), hasil penelusuran akan terpengaruh dengan dua cara:

  • Hanya pekerjaan dengan promotionalValue > 0 yang akan ditampilkan
  • Pekerjaan akan diurutkan dari bawah ke promotionalValue. Pekerjaan dengan promotionalValue yang sama akan diurutkan berdasarkan relevansi (sebagaimana ditentukan oleh algoritme penelusuran).
   request = {
       'searchMode': 'FEATURED_JOB_SEARCH',
       'requestMetadata': request_metadata,
       'jobQuery': job_query,
       'jobView' : 'JOB_VIEW_FULL'
   }

Perbarui permintaan Anda untuk menyetel mode penelusuran ke FEATURED_JOB_SEARCH. Kemudian jalankan kode dan Anda akan melihat output serupa seperti di bawah ini:

$ $ 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!

Pekerjaan dengan promotionValue secara eksplisit yang ditetapkan di atas 0 adalah satu-satunya hasil yang ditampilkan.

Lokasi geografis

Salah satu properti terpenting adalah lokasi geografis. Perusahaan dan lowongan memiliki properti lokasi, tetapi lokasi lowongan akan digunakan di atas lokasi perusahaan saat pengguna melakukan penelusuran. Anda harus menggunakan kolom alamat tertentu untuk lowongan dan perusahaan, sehingga API dapat menggunakan geolokasi untuk menampilkan lowongan yang paling relevan untuk penelusuran. Jika seseorang menelusuri "San Francisco", mereka mungkin ingin melihat pekerjaan di San Francisco terlebih dahulu dan terpenting.

Dalam contoh pekerjaan kami, posisi untuk software engineer senior di FooCorp memiliki kolom lokasi yang ditetapkan di Mountain View, California. Kode yang melakukan ini (jika Anda tidak ingin kembali ke halaman dan menelusuri) akan terlihat seperti ini:

create_some_jobs.py (lokasi ditentukan di FooCorp)

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

Nama kota dapat digunakan, tetapi gunakan alamat lengkap untuk mendapatkan hasil terbaik.

Meskipun secara teknis bersifat opsional, menambahkan lokasi memungkinkan banyak fungsi yang berguna bagi pencari kerja Anda. CTS akan mengonversi alamat tersebut menjadi lintang/bujur untuk Anda dan menggunakannya sebagai sinyal penelusuran. Misalnya, berikut adalah bagaimana Anda akan menyesuaikan JobQuery untuk menjalankan penelusuran lowongan di area Palo Alto, dengan jarak maksimum, misalnya, 10 mil:

search_jobs.py (cari pekerjaan di/dekat Palo Alto)

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

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

Jalankan kode tersebut, perhatikan bahwa tidak ada satu pun kode pembuatan tugas yang pernah kami sebutkan sebelumnya ke Palo Alto. Tidak ada deskripsi pekerjaan, nama perusahaan, tidak ada apa-apa.

$ 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;...

Ini memberikan hasil! Karena Palo Alto berada dalam jarak 10 mil dari pekerjaan (10 mil adalah batas yang Anda tentukan di LocationFilter)

Ada beberapa hal menyenangkan lainnya yang dapat Anda lakukan dengan lokasi di luar cakupan codelab ini. Sebaiknya Anda menjelajahi:

  • Penelusuran berbasis perjalanan - Telusuri pekerjaan dalam area yang ditentukan dengan waktu perjalanan, bukan jarak. Jika Anda berpikir "Oh wow saya berharap saya mendapatkannya kembali ketika..." Kita semua, pembaca. Kita semua punya.
  • Penelusuran beberapa lokasi - Cara Anda mencari lowongan di beberapa kota secara bersamaan.

Kata Kunci dan Memperluas

Jabatan dan deskripsi pekerjaan berperan penting dalam menentukan apakah lowongan tersebut sesuai untuk kueri penelusuran. Jika pekerjaan untuk "scrum master" diposting dan deskripsi menyebutkan "mengelola developer software", penelusuran untuk "pengelola pengembangan software" harus menyertakan pekerjaan tersebut. Pastikan untuk tidak memasukkan banyak kata kunci ke dalam deskripsi pekerjaan atau Anda dapat memunculkan beberapa pekerjaan yang kurang relevan.

API juga memiliki beberapa parameter yang dapat Anda teruskan saat melakukan penelusuran untuk mengontrol hasilnya dengan lebih baik. Pencocokan kata kunci memungkinkan Anda mengaktifkan atau menonaktifkan jika penelusuran harus mencari kata kunci di luar hasil penelusuran berbasis ML biasa. Hal ini juga akan melonggarkan beberapa filter khusus lokasi yang diterapkan. Peluasan akan memperluas cakupan penelusuran untuk parameter tertentu, sehingga Anda dapat memperoleh lebih banyak hasil untuk penelusuran.

Berikut ini contohnya. Pertama, tanpa mengaktifkan perluasan, lakukan penelusuran dengan istilah kueri "Agile". Jika Anda menggunakan skrip yang diberikan dalam codelab ini untuk membuat perusahaan dan pekerjaan, tidak akan ada yang muncul. Mengapa demikian? Karena kata "Agile" tidak ada di mana pun di listingan. Namun, ini adalah metodologi pemrograman populer, yang terkait dengan pekerjaan teknis.

Mari kita perluas perluasan kata kunci dan lihat perubahan apa.

search_jobs.py (dengan perluasan diperluas)

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

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

Sekarang jalankan kembali skrip, dan kali ini Anda akan melihat beberapa hasil!

$ 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!

Sekarang, bagaimana kita tahu bahwa ini bukan hanya bendera selimut untuk "mengembalikan semua barang"? Coba ganti "Agile" dengan beberapa sinonim, seperti "sprightly", "dexterous", "lively", atau "swift". Biasanya, tidak ada yang muncul.

Namun, ada konsekuensi untuk memperluas perluasan. Halaman praktik terbaik penelusuran lowongan dengan jelas menyatakan bahwa "Mengaktifkan parameter ini akan meningkatkan jumlah hasil penelusuran, tetapi dapat mengurangi relevansi hasil secara keseluruhan". Pada dasarnya, fitur ini berisiko menambah kuantitas dengan mengorbankan kualitas. Di sisi lain, cara ini juga dapat membantu pencari kerja Anda menemukan sesuatu yang tidak mereka ketahui dengan benar.

Diversifikasi

Terkadang beberapa pekerjaan yang sangat mirip ditampilkan saling berdekatan di hasil penelusuran. Hal ini dapat berdampak buruk bagi pencari kerja, sehingga mereka tidak dapat melihat berbagai hasil penelusuran yang tersedia.

Fitur diversifikasi memperbaiki hal ini. Pekerjaan diidentifikasi sebagai serupa berdasarkan judul, kategori pekerjaan, dan lokasi. Hasil yang sangat mirip kemudian dikelompokkan sehingga hanya satu pekerjaan dari cluster yang ditampilkan di bagian atas dalam hasil penelusuran. Anda mungkin memperhatikan saat menelusuri "Engineer" bahwa Anda mendapatkan hasil seperti berikut:

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

Mengapa urutannya seperti itu? Lowongan kerja Software Engineer berasal dari dua perusahaan yang berbeda (HorseHub dan FooCorp) dan memiliki deskripsi yang berbeda. Keduanya merupakan pekerjaan rekayasa software, tetapi cukup berbeda untuk menjamin saling berdekatan dalam hasil.

Namun, jika Anda melihat listingan "Test Engineer", sebenarnya listingan tersebut sama persis, untuk perusahaan yang sama, yang diposting dua kali. Karena diversifikasi diaktifkan secara default, listingan Test Engineer kedua dianggap kurang penting (meskipun secara teknis lebih relevan) daripada listingan lain yang berpotensi lebih menarik.

Tingkat diversifikasi memiliki 3 kemungkinan setelan, namun Anda hanya akan memilih satu secara eksplisit. Bagian-bagian tersebut adalah:

  • DIVERSIFICATION_LEVEL_UNSPECIFIED - Hanya berarti Anda tidak menentukan level dan seharusnya melakukan apa pun default-nya (saat ini, perilaku default adalah perilaku yang sama seperti SIMPLE)
  • NONAKTIF - Menonaktifkan diversifikasi -- Pekerjaan yang biasanya didorong ke bawah ke halaman terakhir karena terlalu mirip tidak akan diubah posisinya.
  • SEDERHANA - Mendiversifikasi perilaku default. Daftar hasil diurutkan sehingga hasil yang sangat mirip dimasukkan ke bagian akhir halaman terakhir hasil penelusuran.

Berikut adalah cara menetapkan diversifikasi permintaan secara eksplisit. Seperti sebagian besar proses memasukkan lainnya dengan setelan yang telah kami lakukan dalam codelab ini, Anda hanya perlu menyesuaikan permintaan Anda. Coba setelan di bawah ini untuk kueri dan permintaan tugas Anda, yang akan menonaktifkan diversifikasi dan menetapkan istilah penelusuran sebagai "Engineer"

search_jobs.py (tingkat diversifikasi)

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

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

Jalankan search_jobs.py sekarang, dan Anda akan melihat urutan yang sedikit berbeda - tugas engineer pengujian kini lebih dekat.

$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;...

Anda telah resmi mempelajari cara membuat kueri lowongan menggunakan Job Search API.

Yang telah kita bahas

  • Menyiapkan Project Cloud Anda
  • Menyiapkan lingkungan pengembangan Anda
  • Mengkueri pekerjaan
  • Menambahkan objek JobQuery dengan parameter penelusuran
  • Membatasi jumlah data yang ditampilkan menggunakan jobView
  • Memberi nomor halaman
  • Periksa Ejaan Secara Otomatis Kueri
  • Lowongan Unggulan
  • Menyesuaikan Relevansi Penelusuran
  • Lokasi geografis
  • Kata Kunci dan Memperluas
  • Diversifikasi

Pelajari Lebih Lanjut