جستجو در API جستجوی شغل با Google Cloud

در این نرم افزار کد می آموزید که چگونه با استفاده از Cloud Talent Solution API (CTS) کاریابی و استعدادیابی را برای سازمان خود افزایش دهید. با استفاده از CTS می توانید قدرت یادگیری ماشینی را به تجربه جستجوی شغل خود اضافه کنید!

چیزی که یاد خواهید گرفت

  • CTS را در پروژه Google Cloud خود فعال کنید
  • پرس و جو برای مشاغل باز با استفاده از Job Search API

آنچه شما نیاز دارید

  • یک پروژه Google Cloud با صورت‌حساب از قبل تنظیم شده است (اگر قبلاً ندارید، یکی ایجاد کنید .
  • حدود یک ساعت

چگونه از این آموزش استفاده خواهید کرد؟

فقط آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

تجربه قبلی خود را با Google Cloud Platform چگونه ارزیابی می کنید؟

تازه کار حد واسط کارشناس

این آموزش برای اجرای کامل در پلتفرم Google Cloud طراحی شده است. هیچ بارگیری در ایستگاه کاری شما لازم نیست.

Cloud Talent Solutions API را فعال کنید

برنامه خود را در کنسول Cloud باز کنید و روی منوی همبرگر در بالا سمت چپ کلیک کنید. منوها را به Talent Solution -> Overview مرور کنید.

از آنجایی که این یک پروژه جدید است، به صفحه جدیدی هدایت می شوید که از شما می خواهد API را فعال کنید. روی فعال کردن کلیک کنید و چند دقیقه صبر کنید تا API برای این پروژه روشن شود.

ثبت داده ها را فعال کنید

اکنون به صفحه نمای کلی قبلی برگردید. یک گفتگوی جدید ظاهر می شود که از شما می خواهد ثبت داده ها را فعال کنید. این واقعاً فقط برای اطمینان از اینکه می‌دانید Job Search API توسط یک مدل یادگیری ماشینی که به داده نیاز دارد، ارائه می‌شود. به عنوان بخشی از ادغام، در واقع می توانید رویدادهایی را از کاربرانی که در جستجوی آموزش بیشتر آن مدل ها هستند، ارسال کنید. هنگامی که این از طریق کد پیاده سازی می شود، می توانید مشخص کنید که چه اطلاعاتی ارسال می شود.

ما عمیق‌تر به این خواهیم پرداخت که آن رویدادها چیست و چگونه می‌توان آنها را بعداً ارسال کرد، اما مدل‌های از پیش آموزش‌دیده به خوبی کار خواهند کرد. پیش بروید و ثبت داده ها را فعال کنید، سپس روی "اتصالات حساب سرویس" در سمت چپ این گفتگو کلیک کنید.

یک حساب سرویس راه اندازی کنید

هنگام درخواست API، باید آنها را از طرف یک حساب احراز هویت شده واقعی ارسال کنید. بهترین روش Google Cloud Platform راه اندازی یک حساب سرویس برای این کار را توصیه می کند. حساب‌های سرویس را راهی آسان برای راه‌اندازی کاربران احراز هویتی که مجوزهای محدودی دارند، در نظر بگیرید. این به شما کمک می کند تا یک سیستم مستقل و امن بسازید.

برای مثال، برای استفاده از Job Search API به یک حساب سرویس نیاز داریم. بیایید یکی ایجاد کنیم! پس از کلیک بر روی «اتصالات حساب خدمات»، روی «مدیریت حساب‌های خدمات» در بالای صفحه و سپس «ایجاد حساب سرویس» کلیک کنید. با استفاده از «ویرایشگر شغل» در بخش «راه حل استعدادهای ابری» در منوی سمت چپ، مجوز خواندن/نوشتن را به آن بدهید. همچنین می توان یک حساب سرویس را فقط با "Job Viewer" تنظیم کرد تا فقط دسترسی فقط خواندنی داشته باشد.

مرحله بعدی از شما می پرسد که آیا می خواهید به کاربران اجازه دسترسی به این حساب سرویس را بدهید یا خیر. می‌توانید از این مرحله رد شوید، اما مطمئن شوید که روی «+ Create Key» نزدیک پایین کلیک کنید. یک فایل اعتبارنامه جدید JSON به طور خودکار دانلود می شود. این فایل را در سرور خود ذخیره کنید، کدی که در بخش بعدی می نویسید از آن برای احراز هویت استفاده می کند.

تنظیم متغیرهای محیطی

برای راحتی، از Google Cloud Shell استفاده خواهیم کرد. اگر می‌خواهید این کار را از محیط توسعه خودتان انجام دهید، عالی است! اطمینان حاصل کنید که Google Cloud SDK و کتابخانه های سرویس گیرنده را به زبان انتخابی خود نصب کرده اید (این لبه کد از پایتون استفاده می کند). Cloud Shell قبلاً کتابخانه های کلاینت ابری را نصب کرده است. دستی، درسته؟

برای اجرای کد با استفاده از کتابخانه‌ها، باید مطمئن شوید که دو متغیر محیطی تنظیم شده‌اند: یکی برای مشخص کردن شناسه پروژه، دیگری برای تعیین فایل کلید حساب سرویس شما. بیایید آنها را تنظیم کنیم.

از پروژه خود، روی نماد ">_" در سمت راست بالای کنسول وب خود کلیک کنید تا یک پوسته ابری باز شود. متغیرهای محیطی زیر را اضافه کنید تا ID پروژه خود را مشخص کنید و یک مسیر برای فایل کلید json خود تعیین کنید:

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

قبل از انجام جستجوی مشاغل در سیستم، باید مطمئن شویم که تعدادی واقعاً وجود دارند.

اگر می خواهید یاد بگیرید که چگونه شرکت ها و مشاغل را با استفاده از API اضافه کنید، عالی است! ادامه دهید و کدهای مربوط به همین موضوع را انجام دهید. در غیر این صورت، این بخش شما را از طریق آن راهنمایی خواهد کرد.

ویرایشگر کد را در Cloud Shell باز کنید

از کنسول Google Cloud، Cloud Shell را با استفاده از نماد پوسته ابری در بالا سمت راست باز کنید.

در امتداد سمت راست بالای پوسته ابر یک سری نماد وجود دارد. همانطور که در اینجا نشان داده شده است، روی File -> Launch Code Editor کلیک کنید:

چند شرکت و شغل ایجاد کنید.

از File -> New File برای ایجاد یک فایل منبع جدید استفاده کنید و آن را با محتوای زیر پر کنید. آن را create_some_jobs.py نامید .

توجه داشته باشید که استفاده از API برای ایجاد شرکت ها و مشاغل خارج از محدوده این کد آزمایشگاه است. کد قبلی، " API جستجوی شغل " به شما نشان می دهد که چگونه. کد زیر فقط چند کار در سیستم ایجاد می کند تا بتوانیم ویژگی های مختلف 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 اطلاعاتی را در مورد کاربری که درخواست جستجو می کند ارائه می دهد. ارائه این جزئیات برای اطمینان از تجربه کاربری ثابت و همچنین آموزش بهتر مدل‌های یادگیری ماشین مهم است.

چهار ویژگی زیر شی درخواست را تشکیل می دهند.:

  • دامنه (الزامی) دامنه ای که جستجو از آن میزبانی می شود، مانند foo.com.
  • sessionId (الزامی) یک رشته شناسایی منحصر به فرد برای یک جلسه. Session به عنوان مدت زمان تعامل کاربر نهایی با سرویس در یک دوره زمانی مشخص تعریف می شود.
  • userId (الزامی) یک رشته شناسایی منحصر به فرد که نشان دهنده کاربر است.
  • deviceInfo (اختیاری) اختیاری است و شامل شناسه و نوع دستگاه است، بنابراین می توانید برای مثال، جستجوی وب و جستجوی برنامه را تشخیص دهید.

لیست کامل فیلدها به همراه اطلاعات نوع و توضیحات نیز در مستندات 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 را با پارامترهای جستجو اضافه کنید

از نظر فنی RequestMetadata تنها فیلد درخواستی مورد نیاز است، اما به احتمال زیاد، ما می خواهیم واقعاً چیزی را جستجو کنیم، بنابراین یک 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;...

بهتر! در واقع از چند جهت بهتر است. بیایید آنچه را که اتفاق افتاده است، تجزیه کنیم:

  • API جستجو پارامتر پرس و جو را دریافت کرد و فقط یک نتیجه منطبق را برگرداند
  • نتیجه برگردانده شده شامل یک قطعه با قالب HTML با عبارت جستجوی منطبق پررنگ است تا راحتتر در لیست نتایج جستجوی شما نمایش داده شود.
  • افزودن یک عبارت جستجو تنها 2 خط کد اضافی بود.

در این مرحله، شما باید جستجوی کار اولیه را آغاز کنید. می توانید پرس و جوها را در پایگاه داده کار اجرا کنید و نتایج را بازیابی کنید. با این حال، هزاران چیز شگفت انگیز در راه است.

مقدار داده ای را که با استفاده از jobView برگردانده می شود محدود کنید

شما همچنین می توانید یک ویژگی jobView را مشخص کنید، که یک ENUM است که میزان اطلاعاتی را که می خواهید با درخواست جستجوی خود بازگردانید، اعلام می کند. JOB_VIEW_FULL تمام اطلاعات مربوط به نتیجه هر کار را به شما ارائه می دهد، اما ممکن است بخواهید مقداری بایت ذخیره کنید و گزینه دیگری را انتخاب کنید که فیلدهای کمتری را برمی گرداند. گزینه ای را انتخاب کنید که برای پلتفرمی که روی آن کار می کنید، منطقی تر باشد. مقادیر ممکن (برگرفته از مستندات JobView ) عبارتند از:

  • JOB_VIEW_UNSPECIFIED - پیش فرض.
  • JOB_VIEW_ID_ONLY - فقط شامل نام شغل، شناسه درخواست و کد زبان است.
  • JOB_VIEW_MINIMAL - همه چیز در نمای ID_ONLY، به علاوه عنوان، نام شرکت و مکان‌ها.
  • JOB_VIEW_SMALL - همه چیز در نمای MINIMAL، به علاوه قابلیت مشاهده و شرح شغل.
  • JOB_VIEW_FULL - همه ویژگی های موجود.

برای مشاهده عمیق‌تر فیلدهای موجود، می‌توانید مستندات Job را بررسی کنید، شیئی که در نتایج جست‌وجو بازگردانده می‌شود. در زیر مثالی از نحوه تعیین 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 به جای بارگیری در همه نتایج استفاده کنید. اگر مشاغل بیشتری وجود دارد، یک nextPageToken در پاسخ دریافت خواهید کرد تا بتوانید آن را به صفحه توکن جستجوی بعدی ارسال کنید.

یک بار دیگر، این تنظیم نتایج جستجو با افزودن یک فیلد به درخواست انجام می شود و مشخص می کند که چه تعداد نتیجه جستجو در هر صفحه می خواهید.

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

سعی کنید اسکریپت search_jobs خود را با اندازه صفحه که 1 در درخواست مشخص شده است اجرا کنید. اگر آن را اجرا کنید، فقط یک نتیجه جستجو دریافت خواهید کرد! اما شما بیش از یک شغل در پایگاه داده خود دارید. بقیه رو چطوری بدست میاری؟

در مواردی که نتایج بیشتر از پاسخ فعلی باشد، یک قسمت nextPageToken در پاسخ وجود خواهد داشت. آن مقدار را بگیرید، آن را در درخواست موجود خود در نام pageToken قرار دهید و دوباره جستجو را اجرا کنید. در زیر مثالی از نحوه انجام این کار آورده شده است.

    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" را جستجو کند، نتایج برای لیست هایی با کلمه "مدیر" بازگردانده می شود.

این قابلیت به طور پیشفرض فعال است. اگر می‌خواهید آن را غیرفعال کنید، فیلد disableSpellCheck را به JobQuery خود اضافه کنید و آن را روی true تنظیم کنید.

search_jobs.py

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

سعی کنید این را اجرا کنید. با وجود نداشتن آن پرچم، "Enginer" نتایج را با رشته "Engineer" در آنها برمی گرداند. با غیرفعال شدن غلط گیر املا، همان پرس و جو 0 نتیجه را برمی گرداند.

در ادامه اجازه دهید به چند روش برای تنظیم ارتباط نتایج جستجو نگاهی بیندازیم.

Google Cloud Talent Solution Job Search API از یادگیری ماشینی (ML) برای تعیین ارتباط فهرست‌های شغلی زمانی که کاربر در حال جستجوی شغل است استفاده می‌کند.

مشاغل و شرکت ها دارای چندین ویژگی هستند که مدل های یادگیری ماشینی برای تعیین ارتباط نتایج جستجو به آنها اشاره می کنند. شما می توانید با ارائه اطلاعات بیشتر یا استفاده از چیزهایی مانند مشاغل برجسته، بر این ارتباط تأثیر قابل توجهی داشته باشید. البته، اندازه گیری ارتباط نتایج جستجو می تواند پیچیده باشد، به ویژه از آنجایی که چیزهای مختلف به افراد مختلف مرتبط است. Job Search API از الگوریتمی بر اساس چند سیگنال از داده های شغلی استفاده می کند. بیایید ببینیم برخی از این سیگنال‌ها چگونه بر نتایج جستجو تأثیر می‌گذارند.

مشاغل ویژه به شما امکان می دهد تا با رتبه بندی مشاغل بر اساس ارزش تبلیغاتی و نه صرفاً بر اساس ارتباط، بر نتایج جستجوی کاربران خود تأثیر بگذارید. هنگامی که جستجوی مشاغل ویژه را اجرا می کنید، فقط مشاغل مرتبط با ارزش تبلیغاتی اختصاص داده شده را برمی گرداند.

مشاغل ویژه در مواردی مفید است که می خواهید توانایی حمایت از مشاغل فردی را در فهرست خود داشته باشید. به عنوان مثال، یک سایت شغلی که مشاغل مهم تجاری را تبلیغ می کند، می تواند از جستجوی مشاغل ویژه استفاده کند تا فقط مشاغل حمایت شده را به جویندگان کار بازگرداند.

برای تعریف یک شغل به عنوان «ویژه»، هنگام ایجاد یا به‌روزرسانی یک شغل، از یک قسمت 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 تغییر می‌دهید (در مرحله بعد خواهید دید)، نتایج جستجو به دو صورت تحت تأثیر قرار می‌گیرند:

  • فقط مشاغل با ارزش تبلیغاتی > 0 نشان داده خواهند شد
  • مشاغل به ترتیب نزولی ارزش تبلیغاتی مرتب خواهند شد. مشاغل با ارزش تبلیغاتی یکسان بر اساس ارتباط (همانطور که توسط الگوریتم جستجو تعیین می شود) مرتب می شوند.
   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!

کار با مقدار تبلیغاتی که به صراحت بالای 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 خود برای جستجوی مشاغل در منطقه پالو آلتو، با حداکثر فاصله، مثلاً 10 مایل، آمده است:

search_jobs.py (جستجوی مشاغل در/نزدیک پالو آلتو)

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

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

این کد را اجرا کنید، به خاطر داشته باشید که در هیچ کجای کد ایجاد شغل ما یک بار به پالو آلتو اشاره نکرده ایم. بدون شرح شغل، نام شرکت، هیچ چیز.

$ 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 مایلی کار قرار دارد (10 مایل مرزی است که در LocationFilter تعریف کردید)

چیزهای سرگرم کننده دیگری وجود دارد که می توانید با موقعیت مکانی انجام دهید که خارج از محدوده این Codelab است. ما شما را تشویق می کنیم که کاوش کنید:

  • جستجوی مبتنی بر رفت و آمد - جستجو برای مشاغل در منطقه ای که با زمان رفت و آمد به جای فاصله تعریف شده است! اگر به این فکر می کنید که "اوه وای ای کاش آن موقع دوباره داشتم..." همه ما این کار را می کنیم، خواننده. همه ما انجام می دهیم.
  • جستجوی مکان چندگانه - چگونه به دنبال شغل در چندین شهر به طور همزمان می گردید.

کلمات کلیدی و گسترش

البته عنوان و شرح یک شغل نقش مهمی در تعیین اینکه آیا آن شغل برای جستجوی جستجو مناسب است یا خیر، بازی می کند. اگر شغلی برای یک "اسکرام مستر" ارسال شده است و در توضیحات "مدیریت توسعه دهندگان نرم افزار" ذکر شده است، جستجو برای "مدیر توسعه نرم افزار" باید شامل آن شغل باشد. اطمینان حاصل کنید که فقط از قرار دادن یک سری کلمات کلیدی در شرح شغل خودداری کنید، در غیر این صورت ممکن است با برخی مشاغل کمتر مرتبط مواجه شوید.

API همچنین دارای پارامترهایی است که می توانید هنگام جستجو برای کنترل بهتر نتایج، آنها را پاس کنید. تطبیق کلمه کلیدی به شما امکان می دهد اگر جستجو باید به دنبال کلمات کلیدی فراتر از نتایج جستجوی معمولی مبتنی بر ML باشد، آن را فعال یا غیرفعال کنید. همچنین برخی از فیلترهای خاص مکان را در جای خود شل می کند. گسترش دامنه جستجو برای پارامترهای داده شده را افزایش می دهد و به شما امکان می دهد نتایج بیشتری را برای جستجو بدست آورید.

در اینجا یک نمونه از آن کار است. ابتدا، بدون فعال کردن گسترش، جستجویی را با عبارت جستجوی "Agile" انجام دهید. اگر از اسکریپت ارائه شده در این کد لبه برای ایجاد شرکت ها و مشاغل خود استفاده کرده باشید، چیزی به دست نمی آید. چرا؟ زیرا کلمه "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) هستند و توضیحات متفاوتی دارند. آنها هر دو شغل مهندسی نرم افزار هستند، اما آنقدر متفاوت هستند که در نتایج نزدیک به یکدیگر باشند.

با این حال، اگر به لیست‌های «مهندس آزمایشی» نگاه کنید، در واقع دقیقاً همان فهرست برای یک شرکت است که دو بار پست شده است. از آنجایی که تنوع به‌طور پیش‌فرض فعال است، دومین فهرست مهندس تست (حتی اگر از نظر فنی مرتبط‌تر است) از سایر فهرست‌های بالقوه جالب‌تر اهمیت کمتری داشته باشد.

سطح تنوع واقعاً دارای 3 تنظیم ممکن است ، اما شما فقط می‌خواهید به صراحت یکی را انتخاب کنید. آن ها هستند:

  • DIVERSIFICATION_LEVEL_UNSPECIFIED - فقط به این معنی است که سطحی را مشخص نکرده‌اید و باید هر کاری که پیش‌فرض است انجام دهد (در حال حاضر، پیش‌فرض همان رفتار SIMPLE است)
  • DISABLED - تنوع را غیرفعال می کند - مشاغلی که معمولاً به دلیل شباهت بیش از حد به صفحه آخر پایین می روند، موقعیت آنها تغییر نمی کند.
  • SIMPLE - پیش فرض رفتار متنوع. فهرست نتایج به گونه ای مرتب شده است که نتایج بسیار مشابه به انتهای صفحه آخر نتایج جستجو ارسال می شود.

در اینجا نحوه تنظیم صریح DiversificationLevel درخواستتان آمده است. مانند بسیاری از کارهای دیگری که با تنظیماتی که در این کد لبه انجام داده ایم، تنها کاری که باید انجام دهید این است که درخواست خود را تنظیم کنید. تنظیمات زیر را برای درخواست و درخواست شغلی خود امتحان کنید، که تنوع را غیرفعال می کند و عبارت جستجو را به عنوان "مهندس" تنظیم می کند.

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، مشاغل را پرس و جو کنید.

آنچه را پوشش داده ایم

  • راه اندازی پروژه ابری
  • راه اندازی محیط توسعه خود
  • پرس و جو برای مشاغل
  • شی JobQuery را با پارامترهای جستجو اضافه کنید
  • مقدار داده ای را که با استفاده از jobView برگردانده می شود محدود کنید
  • صفحه بندی کنید
  • بررسی خودکار املای پرس و جو
  • مشاغل ویژه
  • تنظیم ارتباط جستجو
  • موقعیت جغرافیایی
  • کلمات کلیدی و گسترش
  • تنوع بخشی

بیشتر بدانید