Person Semantic Search is currently in beta on
POST /person/search.
Request fields, ranking behavior, and query-constraint extraction may evolve
based on feedback. To share input or request access, write to
support@crustdata.co.search.query to
Person Search. Crustdata uses the query to
rank matching people by profile context such as title, skills, company history,
education, location, and summary text. You can also combine semantic ranking
with structured filters.
Where semantic search is available
At a glance
The problem: rigid filter-only search
Structured filters are precise, but they force you to know the exact fields, operators, and indexed values before you search. That works for narrow queries, but it breaks down when your intent is broader:- Persona searches - “founding engineers at developer tools startups.”
- Skill-heavy searches - “backend engineers with Golang and distributed systems experience.”
- Job-description searches - paste the most important parts of a role and find similar profiles.
- Exploratory recruiting - start with a plain-language role description, then tighten with filters.
The solution: natural-language ranking
Add asearch object to a Person Search request:
search.query is used to find and rank people whose profiles match the
meaning of the query. You can send search by itself, or combine it with
structured filters.
Do not send
sorts with semantic search. Semantic results are already
rank-ordered by relevance.Limits
search.query accepts up to ~32,000 tokens (131,072 characters) — enough to
paste a full job description. Requests over the limit return HTTP 400 with
an error explaining the limit and the length of the query you sent.
Retrieval modes
The nestedsearch.mode field controls which retrieval signals are used for
the natural-language query.
hybrid is the default. Use it unless you have a specific reason to isolate
keyword-only or vector-only behavior.
Recall modes
The top-levelmode field controls how Crustdata combines your natural-language
query with explicit filters.
Boolean keyword operators
For precise keyword search, setsearch.query_syntax: "boolean" to read the
query as a boolean expression instead of plain text. Punctuation becomes search
operators:
A space means AND — every space-separated term is required. Use
| for OR.
This follows standard keyword-search conventions.
Boolean syntax is honored only with search.mode: "lexical" and the top-level
recall mode: "exact". Any other combination returns a 400. The default,
query_syntax: "plain", is unchanged — existing queries keep matching as before.
Example: search from a natural-language query
This request finds people who match a plain-language recruiting query.fit
relevance tier and a top-level total_count_relation:
Response shape
The response above shows shape only. Actual profile values depend on the
query, requested
fields, and account permissions.Relevance tier (fit) and result counts
Semantic responses add two fields on top of the standard Person Search shape:
Use
fit to keep only high-confidence matches (for example, surface strong
results and review possible ones):
fit is returned by default. If you pass an explicit fields list, add
"fit" to keep it in the response. fit can be null on deeper result
pages, where results are not reranked.Example: semantic ranking inside hard filters
Usemode: "exact" when your filters must be enforced. This example limits the
result set to people in San Francisco, then uses the natural-language query to
rank the best machine-learning profiles inside that set.
Request
When to use each approach
What to do next
- Search with filters - see Person Search for the standard filter workflow.
- Look up operators and fields - see Person Search reference.
- Discover filter values - use Person Autocomplete.
- Feedback - Person Semantic Search is in beta; send ranking or query-parsing feedback to support@crustdata.co.

