Two different types of matching configuration are supported: filters and weights. Filters oppose a hard constraint on the match results, while weights are a soft constraint.

Filtering Matches

You can restrict the suitable matches by using filters in the request body. Below you'll find a concrete example of using filters - if you want to have the exhaustive list of filters, you can check the Filters section at the API reference.

For example, if you want to restrict matching to all the Employees that

  • live within 50 km of a Vacancy
  • speak the required language level of the Vacancy (or are 2 levels overqualified)
  • desire a yearly salary less than or equal (lte) to €45000
  • have the required driving license

you need to submit the following POST request to vacancies/<external_id>/matching_employees:

{
  "filters": [
    {
      "filter": "max_geo_distance",
      "max_geo_distance": 50
    },
    {
      "filter": "language",
      "max_overqualification": 2,
      "max_underqualification": 0
    },
    {
      "filter": "custom_property",
      "property_name": "desired_salary",
      "operator": "lte",
      "property_value": 45000
    },
    {
      "filter": "custom_property_equal",
      "from_entity_property": "required_driver_license",
      "to_entity_property": "driver_license"
    }
  ],
  "weights": []
}

This assumes that you have added the custom properties required_driver_license and driver_license upfront (to respectively Vacancy & Employee) as well as the custom property desired_salary to Employees - more info on this can be found at the Custom Properties Tutorial.

If the Employee does not have the custom property desired_salary or driver_license, the Employee is not included for matching. If other or more strict comparisons are needed for the custom_property filter on desired_salary, any of the lt, lte, eq, gte, gt or neq operators are also supported.

In case you want to compare custom properties that are list[text] and text, you can also use the custom_property_is_in and custom_property_contains filters.

Match weights

Via the weights attribute in the POST request body, you can tune the matching score calculation. You can configure both the contribution of the skills-match as the (non-)desired functions for Employees. You can also increase the match score of an entity based on the location or on a custom property.

The skills-match

The skills-match will provide a score contribution of up to the passed weight, scaling linearly with the skills-match score

(Non-)Desired functions

A (non-)desired function will provide a score contribution of up to the passed weight, with the contribution scaling linearly with the relevancy of the function title to the matching vacancy. In case of multiple relevant functions, the most relevant one is used.

In the example below, matching scores will be increased by up to 0.1 when a Vacancy title resembles a desired function of an Employee.

{
  "filters": [],
  "weights": [
    {
      "weight": "skills_match",
      "value": 1.0
    },
    {
      "weight": "desired_functions",
      "value": 0.1
    }
  ]
}

Geo distance

The geo-distance will provide a score contribution when two entities (e.g. Vacancies and Employees) are in close proximity of each other. A full boost is applied when the entities are within full_score_distance of each other. No boost is applied when the entities are further away than zero_score_distance. Between the full_score_distance and zero_score_distance, the boost value decreases linearly.

In the example below, matching scores will be increased by:

  • 0.1 when a Vacancy is within 10km of an Employee.
  • 0.05 when a Vacancy is within 30km of an Employee.
  • 0.0 when a Vacancy is farther away than 50km of an Employee.
{
  "filters": [],
  "weights": [
    {
      "weight": "geo_distance",
      "value": 0.1,
      "full_score_distance": 10,
      "zero_score_distance": 50
    }
  ]
}

Custom properties

The custom property weight will provide a score contribution when the target entities meet the custom property criteria specified by you.

For example, when submitting a POST request to vacancies/<external_id>/matching_employees with the following content, the Skill Engine API will:

  • Increase the match score by 0.05 for the employees that have a desired salary less than €45000.
  • Increase the match score by 0.1 for the employees that are immediately available (assuming the current date is 2021-04-13).
  • Increase the match score by 0.05 for the employees that are not a freelancer.
{
  "filters": [],
  "weights": [
    {
      "weight": "custom_property",
      "property_name": "desired_salary",
      "operator": "lt",
      "property_value": 45000,
      "value": 0.05
    },
    {
      "weight": "custom_property",
      "property_name": "available_from",
      "operator": "lte",
      "property_value": "2021-04-13",
      "value": 0.1
    },
    {
      "weight": "custom_property",
      "property_name": "freelancer",
      "operator": "eq",
      "property_value": false,
      "value": 0.05
    }
  ]
}

Note that employees that do not have the custom properties desired_salary , available_from and freelancer set, will still be included in the final match results, but without a boost to their match score.