For the complete documentation index, see llms.txt. This page is also available as Markdown.

🆕Semantic Search

Semantic search expands Elasticsearch DSL queries to include job titles with equivalent meaning, even when the wording differs. A search for "Software Engineer" can automatically surface results for "Software Developer" or "Senior Software Engineer" without modifying the query format.

It is activated via dedicated /semantic_search/es_dsl endpoints – drop-in replacements for the standard /search/es_dsl endpoints. The minimum confidence score for synonym inclusion is controlled by the threshold parameter.

Semantic search endpoints have higher latency than their standard counterparts, as each request triggers an additional model call before query execution.

Same request format

No changes to Elasticsearch DSL query structure. Drop-in replacement for existing /search/es_dsl endpoints.

Broader recall

Semantically equivalent titles are matched automatically, reducing gaps caused by wording variations across profiles and postings.

Full transparency

Every injected synonym is listed in the response metadata with its confidence score and boost status.

Endpoints

Each semantic search endpoint request matches standard multi-source /search/es_dsl endpoints, with synonym search performed before executing the query.

Semantic search endpoint
Regular search endpoint

POST /v2/company_multi_source/semantic_search/es_dsl

POST /v2/company_multi_source/search/es_dsl

POST /v2/employee_multi_source/semantic_search/es_dsl

POST /v2/employee_multi_source/search/es_dsl

POST /v2/job_multi_source/semantic_search/es_dsl

POST /v2/job_multi_source/search/es_dsl

Synonym injection is triggered when a match_phrase clause targets one of the data fields below. Other fields pass through unchanged.

Endpoint
Data field

POST /v2/company_multi_source/semantic_search/es_dsl

active_job_postings[].job_posting_title

POST /v2/employee_multi_source/semantic_search/es_dsl

active_experience_title experience[].position_title headline

POST /v2/job_multi_source/semantic_search/es_dsl

title

Request parameters

Control semantic search with additional request parameters to get more relevant results.

Parameter
Type
Default value
Description

threshold

Float

0.9

Minimum confidence score required for a synonym to be injected

boost

Float

0.1

Controls the weight of seniority signals in the relevance scoring

How it works

1

Send request

Send an Elasticsearch DSL query with semantic search endpoint. Use an identical format to existing /search/es_dsl endpoints. No changes to request structure are required.

2

Scanning data fields

The query is scanned for match_phrase clauses targeting supported data fields.

3

Looking for a match

If a match is found, the semantic search model is called. Synonyms at or above the configured threshold are injected as an expanded should clause in the query.

4

Executing the query

The enriched query is forwarded to Elasticsearch DSL and executed.

5

Getting a response

The response includes a metadata block documenting what was injected and standard Elasticsearch DSL results (IDs) in results field. If no eligible match_phrase is detected, the query is forwarded as-is and metadata[].synonyms_injected is returned as an empty array.

Response

Response is similar to existing /search/es_dsl endpoints with an additional metadata block that includes information about applied semantic search and IDs presented in results field.

Field
Description
Data type

metadata

Information about applied semantic search

Array of struct

metadata[].threshold

Value set in the request

Float

metadata[].synonyms_injected

List of added synonyms to the query. If no synonyms were injected – returned as an empty array

Array of struct

metadata[].synonyms_injected[].field

Data field where original and synonym values were applied

String

metadata[].synonyms_injected[].original

Original field value

String

metadata[].synonyms_injected[].synonym

Added synonym value based on the original value and threshold

String

metadata[].synonyms_injected[].score

Confidence score

Float

metadata[].synonyms_injected[].boosted

Identifies whether the boost was applied

Boolean

results

Returned matching IDs

Array of integers

Last updated

Was this helpful?