Skip to content

REST API

Explain how one hit scores

POST/v1alpha1/indexes/{name}/search/actions/explainsearch

Reports how one hit scores under a search, as a tree of steps naming the clauses of the request they were compiled from and the fields of the index definition they read.

The body is a search request; limit, offset, after, before, pages, total, sort, facets, highlight, matched, fields and rescore are ignored, and are not checked either, so a cursor taken under another sort or an offset past what the node allows still gets an answer. A hit that the search does not match is reported with matched set to false rather than refused.

Path parameters

namestringrequired
Name of the index to search. To explain against one generation, add @ and the name of the generation, such as books@2.

Query parameters

indexinteger
Position of the value to explain among the document's values of the hits path, which is what such a hit reports as its index. Read only by a search whose hits are values.
Default
0
Format
int32
keystringrequired
Primary key of the document, read as the type of the key field. For a search whose hits names an object field, provide the key of the document holding the value, which is what such a hit reports as its id.

Headers

X-Exofind-Freshnessany
A freshness token, for a request that carries none in its body. The body's freshness.atLeast is read when both are given.

Body

All request properties are optional. An empty request matches all documents in the index.

Clauses that a matching document must satisfy. Clauses in the array are combined with an implicit AND. Evaluated clauses narrow all facet counts. If omitted, matches all documents.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
9 types
FieldClausetype: "field"
Matches documents by the value of a single field. The targeted field must be indexed for the requested matcher usage; if it is not configured for that usage, the request returns search:usage_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
fieldstringrequired
Target field, as named in the index definition.
Example
"category"
matchMatcherrequired
Criteria evaluated against the field's values.
Example
{
"value": "fiction"
}
9 types
EqualsMatchertype: "equals"
Matches field values equal to value.
Example
{
"value": "fiction"
}
valueanyrequired
The value that the field value must equal.
Example
"fiction"
InMatchertype: "in"
Matches field values equal to any value in values. An empty array matches no documents.
Example
{
"type": "in",
"values": [
"fiction",
"poetry"
]
}
valuesany[]required
The values that a field value may equal.
AnyMatchertype: "any"
Matches any document that contains a value for the field.
Example
{
"type": "any"
}
PrefixMatchertype: "prefix"
Matches string field values starting with value, evaluated against the entire field value.
Example
{
"type": "prefix",
"value": "EX-"
}
valuestringrequired
The prefix that a field value must start with.
Example
"EX-"
UnderMatchertype: "under"
Matches values at or below the specified path in a hierarchical tree. Requires a field configured with hierarchy. Path segments must match complete levels, so Men/Sho matches nothing where a prefix matcher matches.
Example
{
"type": "under",
"path": "Men/Shoes"
}
pathstringrequired
Path in the hierarchical tree to match at or below.
Example
"Men/Shoes"
RangeMatchertype: "range"
Matches values within bounds. Accepts inclusive (gte, lte) and exclusive (gt, lt) bounds; either side may be left open, and at least one bound is required (search:matcher:range_empty).
Example
{
"type": "range",
"gte": 10,
"lt": 20
}
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
RangesMatchertype: "ranges"
Matches values falling within any of the specified range objects. An empty array matches no documents, matching the behavior of an empty in matcher.
Example
{
"type": "ranges",
"values": [
{
"gte": 10,
"lt": 20
},
{
"gte": 50
}
]
}
valuesMatcherRange[]required
The ranges to evaluate, each requiring at least one bound. A bucket returned by a range facet sets from as gte and to as lt.
Example
{
"gte": 10,
"lt": 20
}
4 properties
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
TextMatchertype: "text"
Matches text within a single field using field-level analysis.
Example
{
"type": "text",
"text": "silent spring",
"match": "phrase"
}
textstringrequired
The query text to match.
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply. Setting join with any other match returns search:clause:join_unsupported.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows the field's typoTolerance configuration; off disables typo tolerance for the matcher.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Only applies to phrase queries or quoted phrases in user mode.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
interpretInterpretMode
Whether parts of user text are read as filters on the fields of the index: auto reads a number typed next to the unit of a number field, or next to a comparative word such as under, as a filter on that field; off takes every word as text. Whatever was read is reported as interpreted beside the results. See Reading numbers and units.
Default
"auto"
Values
"auto", "off"
DistanceMatchertype: "distance"
Matches geopoint values within radius meters of the specified latitude and longitude coordinates.
Example
{
"type": "distance",
"lat": 59.3,
"lon": 18.1,
"radius": 5000
}
latnumberrequired
Latitude of the origin, in degrees.
Format
double
Range
-90 to 90
Example
59.3
lonnumberrequired
Longitude of the origin, in degrees.
Format
double
Range
-180 to 180
Example
18.1
radiusnumberrequired
Maximum distance from the origin in meters.
Format
double
Example
5000
TextClausetype: "text"
Matches query text across one or more fields. Phrase queries operate within a single field and match terms exactly as typed, regardless of field typoTolerance. Fields defined only for autocomplete do not support phrase matching. See text.
Example
{
"type": "text",
"text": "silent spr",
"fields": {
"name": 3,
"description": null
}
}
textstringrequired
The query text to match.
Example
"silent spr"
fieldsmap of number
Object mapping field names to score weights. A field mapped to null uses the weight from its field definition. If omitted, searches all searchable fields, skipping autocomplete-only fields.
1 property
<key>number
Format
float
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply, and a filter read out of the text is one of the parts. Setting join with any other match returns search:clause:join_unsupported. See Reading what was typed.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows each field's typoTolerance configuration; off disables typo tolerance for the clause.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Setting slop above 0 with "match": "all" or "match": "any" returns search:clause:slop_unsupported.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
combineCombine
Scope for multi-field term matching. term evaluates each term across all targeted fields, so terms may appear in different fields; field requires a single field to satisfy match on its own. Ignored by phrase queries.
Default
"term"
Values
"term", "field"
interpretInterpret
Whether parts of user text are read as filters on the fields of the index, given as a mode or as the targets to read on. See Reading numbers and units.
Default
"auto"
2 types
Whether parts of user text are read as filters: auto reads a number typed next to a unit or a comparative word as a filter on the field declaring that unit, off takes every word as text.
Reads user text as filters on the named targets only. A number typed with a unit is read on every target declaring that unit; a number typed without one is read on every target holding a currency, when they all hold the same currency.
Example
{
"fields": [
{
"field": "prices.amount"
}
]
}
fieldsInterpretTarget[]required
The targets a reading may be a filter on. At least one is required.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
3 properties
fieldstringrequired
The field, as named in the index definition.
Example
"prices.amount"
Clauses that must hold where the number is read: in the same value as the field for a field inside a nested list, and for the document otherwise. Takes what a nested clause takes: field, text, and, or, not and boost. A clause naming a field outside the list returns search:nested:field_not_inside.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
Targets read instead, in order, where the document holds no value on this one - a product with no price on the customer's list is read on the store's list. Every target of the chain must declare the same unit; one in another unit returns search:interpret:fallback_unit_mismatch.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
KnnClausetype: "knn"
Matches the k nearest documents by vector distance in a specified field, scored by proximity. Cannot be combined with hits (search:hits:knn_unsupported).
Example
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 10,
"filter": [
{
"field": "published",
"match": {
"value": true
}
}
]
}
fieldstringrequired
The vector field to search.
Example
"embedding"
vectornumber[]required
The query vector. Its length must match the dimensions declared in the field definition.
Format
float
kintegerrequired
Number of nearest documents to return, at most EXOFIND_SEARCH_MAX_KNN_K.
Format
int32
filterClause[]
Clauses that documents must satisfy before nearest-neighbor evaluation.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NestedClausetype: "nested"
Matches documents where a single element of a nested object field satisfies all child clauses. A nested clause on a flattened object field returns search:nested:path_not_nested; on a non-object field it returns an error. See nested.
Example
{
"type": "nested",
"path": "variants",
"clauses": [
{
"field": "variants.color",
"match": {
"value": "red"
}
},
{
"field": "variants.price",
"match": {
"type": "range",
"lt": 20
}
}
]
}
pathstringrequired
Name of the nested object field.
Example
"variants"
clausesClause[]
Clauses evaluated within a single nested object value, naming fields by their dotted path. An empty array matches any document where the object field is present. May contain field, text, knn, and, or, not and boost; a clause that only means something for whole documents, such as another nested or a fuse, returns search:nested:clause_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
scoreScore
Scoring mode for aggregating matching nested values. Only applies when scoring clauses exist within the nested clause.
Default
"max"
Values
"max", "min", "avg", "total"
AndClausetype: "and"
Matches documents where all child clauses match.
Example
{
"type": "and",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "published",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, all of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
OrClausetype: "or"
Matches documents where at least one child clause matches.
Example
{
"type": "or",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "category",
"match": {
"value": "poetry"
}
}
]
}
clausesClause[]required
Child clauses, at least one of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NotClausetype: "not"
Matches documents where no child clause matches.
Example
{
"type": "not",
"clauses": [
{
"field": "discontinued",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, none of which may match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
BoostClausetype: "boost"
Increases the relevance score of documents that satisfy child clauses without excluding non-matching documents.
Example
{
"type": "boost",
"weight": 2,
"clauses": [
{
"field": "featured",
"match": {
"value": true
}
}
]
}
weightnumberrequired
Multiplier applied to matching documents. Values greater than 1 increase score; values between 0 and 1 decrease score. Leaving it out, or setting it below 0 or to a non-finite number, returns search:clause:weight_out_of_range.
Format
float
Example
2
clausesClause[]required
Clauses required to apply the boost weight.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
FuseClausetype: "fuse"
Matches documents across several rankings, scored and merged by rank. Documents are scored by the sum of weight / (rankConstant + rank) across the rankings that reached them. Because the clause reads only result positions, scores from different scales (such as BM25 text relevance and vector similarity) combine without normalization. Matches at most depth results per ranking. See fuse.
Example
{
"type": "fuse",
"depth": 200,
"rankConstant": 60,
"rankings": [
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
]
},
{
"clauses": [
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 200
}
],
"weight": 0.5
}
],
"filter": [
{
"field": "inStock",
"match": {
"value": true
}
}
]
}
rankingsFuseRanking[]required
Rankings to run and merge. Specifying fewer than two rankings returns search:clause:rankings_too_few.
Example
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
],
"weight": 0.5
}
2 properties
clausesClause[]required
Clauses the ranking searches for, combined with an implicit AND. At least one clause is required.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
weightnumber
Multiplier that scales the ranking's contribution relative to other rankings. It cannot reorder results within the ranking.
Default
1
Format
float
depthinteger
Number of results read from each ranking. Pagination cannot exceed the merged list, similar to k in a knn clause. Must be at least 1, and at most EXOFIND_SEARCH_MAX_FUSE_DEPTH.
Default
100
Format
int32
rankConstantnumber
Constant added to each rank before it is inverted. Lower values increase the weight of the highest-ranked results in each ranking; higher values flatten the difference across ranks, giving more weight to documents found by multiple rankings. Must be above 0.
Default
60
Format
float
filterClause[]
Clauses that narrow every ranking before it is cut to depth. A knn clause inside a ranking applies filter entries as a pre-filter, ensuring the vector ranking returns k results. Clauses placed beside the fuse clause filter the merged list after each ranking is cut to depth.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
filtersClause[]
Refinement clauses, specified as field clauses or nested clauses. Filters narrow hits, but facets on the filtered field exclude their own filter entries from counts by default (see Facets). Unsupported clause types return search:filter:clause_unsupported. Clauses that score results return search:filter:scoring_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
9 types
FieldClausetype: "field"
Matches documents by the value of a single field. The targeted field must be indexed for the requested matcher usage; if it is not configured for that usage, the request returns search:usage_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
fieldstringrequired
Target field, as named in the index definition.
Example
"category"
matchMatcherrequired
Criteria evaluated against the field's values.
Example
{
"value": "fiction"
}
9 types
EqualsMatchertype: "equals"
Matches field values equal to value.
Example
{
"value": "fiction"
}
valueanyrequired
The value that the field value must equal.
Example
"fiction"
InMatchertype: "in"
Matches field values equal to any value in values. An empty array matches no documents.
Example
{
"type": "in",
"values": [
"fiction",
"poetry"
]
}
valuesany[]required
The values that a field value may equal.
AnyMatchertype: "any"
Matches any document that contains a value for the field.
Example
{
"type": "any"
}
PrefixMatchertype: "prefix"
Matches string field values starting with value, evaluated against the entire field value.
Example
{
"type": "prefix",
"value": "EX-"
}
valuestringrequired
The prefix that a field value must start with.
Example
"EX-"
UnderMatchertype: "under"
Matches values at or below the specified path in a hierarchical tree. Requires a field configured with hierarchy. Path segments must match complete levels, so Men/Sho matches nothing where a prefix matcher matches.
Example
{
"type": "under",
"path": "Men/Shoes"
}
pathstringrequired
Path in the hierarchical tree to match at or below.
Example
"Men/Shoes"
RangeMatchertype: "range"
Matches values within bounds. Accepts inclusive (gte, lte) and exclusive (gt, lt) bounds; either side may be left open, and at least one bound is required (search:matcher:range_empty).
Example
{
"type": "range",
"gte": 10,
"lt": 20
}
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
RangesMatchertype: "ranges"
Matches values falling within any of the specified range objects. An empty array matches no documents, matching the behavior of an empty in matcher.
Example
{
"type": "ranges",
"values": [
{
"gte": 10,
"lt": 20
},
{
"gte": 50
}
]
}
valuesMatcherRange[]required
The ranges to evaluate, each requiring at least one bound. A bucket returned by a range facet sets from as gte and to as lt.
Example
{
"gte": 10,
"lt": 20
}
4 properties
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
TextMatchertype: "text"
Matches text within a single field using field-level analysis.
Example
{
"type": "text",
"text": "silent spring",
"match": "phrase"
}
textstringrequired
The query text to match.
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply. Setting join with any other match returns search:clause:join_unsupported.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows the field's typoTolerance configuration; off disables typo tolerance for the matcher.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Only applies to phrase queries or quoted phrases in user mode.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
interpretInterpretMode
Whether parts of user text are read as filters on the fields of the index: auto reads a number typed next to the unit of a number field, or next to a comparative word such as under, as a filter on that field; off takes every word as text. Whatever was read is reported as interpreted beside the results. See Reading numbers and units.
Default
"auto"
Values
"auto", "off"
DistanceMatchertype: "distance"
Matches geopoint values within radius meters of the specified latitude and longitude coordinates.
Example
{
"type": "distance",
"lat": 59.3,
"lon": 18.1,
"radius": 5000
}
latnumberrequired
Latitude of the origin, in degrees.
Format
double
Range
-90 to 90
Example
59.3
lonnumberrequired
Longitude of the origin, in degrees.
Format
double
Range
-180 to 180
Example
18.1
radiusnumberrequired
Maximum distance from the origin in meters.
Format
double
Example
5000
TextClausetype: "text"
Matches query text across one or more fields. Phrase queries operate within a single field and match terms exactly as typed, regardless of field typoTolerance. Fields defined only for autocomplete do not support phrase matching. See text.
Example
{
"type": "text",
"text": "silent spr",
"fields": {
"name": 3,
"description": null
}
}
textstringrequired
The query text to match.
Example
"silent spr"
fieldsmap of number
Object mapping field names to score weights. A field mapped to null uses the weight from its field definition. If omitted, searches all searchable fields, skipping autocomplete-only fields.
1 property
<key>number
Format
float
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply, and a filter read out of the text is one of the parts. Setting join with any other match returns search:clause:join_unsupported. See Reading what was typed.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows each field's typoTolerance configuration; off disables typo tolerance for the clause.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Setting slop above 0 with "match": "all" or "match": "any" returns search:clause:slop_unsupported.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
combineCombine
Scope for multi-field term matching. term evaluates each term across all targeted fields, so terms may appear in different fields; field requires a single field to satisfy match on its own. Ignored by phrase queries.
Default
"term"
Values
"term", "field"
interpretInterpret
Whether parts of user text are read as filters on the fields of the index, given as a mode or as the targets to read on. See Reading numbers and units.
Default
"auto"
2 types
Whether parts of user text are read as filters: auto reads a number typed next to a unit or a comparative word as a filter on the field declaring that unit, off takes every word as text.
Reads user text as filters on the named targets only. A number typed with a unit is read on every target declaring that unit; a number typed without one is read on every target holding a currency, when they all hold the same currency.
Example
{
"fields": [
{
"field": "prices.amount"
}
]
}
fieldsInterpretTarget[]required
The targets a reading may be a filter on. At least one is required.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
3 properties
fieldstringrequired
The field, as named in the index definition.
Example
"prices.amount"
Clauses that must hold where the number is read: in the same value as the field for a field inside a nested list, and for the document otherwise. Takes what a nested clause takes: field, text, and, or, not and boost. A clause naming a field outside the list returns search:nested:field_not_inside.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
Targets read instead, in order, where the document holds no value on this one - a product with no price on the customer's list is read on the store's list. Every target of the chain must declare the same unit; one in another unit returns search:interpret:fallback_unit_mismatch.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
KnnClausetype: "knn"
Matches the k nearest documents by vector distance in a specified field, scored by proximity. Cannot be combined with hits (search:hits:knn_unsupported).
Example
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 10,
"filter": [
{
"field": "published",
"match": {
"value": true
}
}
]
}
fieldstringrequired
The vector field to search.
Example
"embedding"
vectornumber[]required
The query vector. Its length must match the dimensions declared in the field definition.
Format
float
kintegerrequired
Number of nearest documents to return, at most EXOFIND_SEARCH_MAX_KNN_K.
Format
int32
filterClause[]
Clauses that documents must satisfy before nearest-neighbor evaluation.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NestedClausetype: "nested"
Matches documents where a single element of a nested object field satisfies all child clauses. A nested clause on a flattened object field returns search:nested:path_not_nested; on a non-object field it returns an error. See nested.
Example
{
"type": "nested",
"path": "variants",
"clauses": [
{
"field": "variants.color",
"match": {
"value": "red"
}
},
{
"field": "variants.price",
"match": {
"type": "range",
"lt": 20
}
}
]
}
pathstringrequired
Name of the nested object field.
Example
"variants"
clausesClause[]
Clauses evaluated within a single nested object value, naming fields by their dotted path. An empty array matches any document where the object field is present. May contain field, text, knn, and, or, not and boost; a clause that only means something for whole documents, such as another nested or a fuse, returns search:nested:clause_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
scoreScore
Scoring mode for aggregating matching nested values. Only applies when scoring clauses exist within the nested clause.
Default
"max"
Values
"max", "min", "avg", "total"
AndClausetype: "and"
Matches documents where all child clauses match.
Example
{
"type": "and",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "published",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, all of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
OrClausetype: "or"
Matches documents where at least one child clause matches.
Example
{
"type": "or",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "category",
"match": {
"value": "poetry"
}
}
]
}
clausesClause[]required
Child clauses, at least one of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NotClausetype: "not"
Matches documents where no child clause matches.
Example
{
"type": "not",
"clauses": [
{
"field": "discontinued",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, none of which may match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
BoostClausetype: "boost"
Increases the relevance score of documents that satisfy child clauses without excluding non-matching documents.
Example
{
"type": "boost",
"weight": 2,
"clauses": [
{
"field": "featured",
"match": {
"value": true
}
}
]
}
weightnumberrequired
Multiplier applied to matching documents. Values greater than 1 increase score; values between 0 and 1 decrease score. Leaving it out, or setting it below 0 or to a non-finite number, returns search:clause:weight_out_of_range.
Format
float
Example
2
clausesClause[]required
Clauses required to apply the boost weight.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
FuseClausetype: "fuse"
Matches documents across several rankings, scored and merged by rank. Documents are scored by the sum of weight / (rankConstant + rank) across the rankings that reached them. Because the clause reads only result positions, scores from different scales (such as BM25 text relevance and vector similarity) combine without normalization. Matches at most depth results per ranking. See fuse.
Example
{
"type": "fuse",
"depth": 200,
"rankConstant": 60,
"rankings": [
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
]
},
{
"clauses": [
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 200
}
],
"weight": 0.5
}
],
"filter": [
{
"field": "inStock",
"match": {
"value": true
}
}
]
}
rankingsFuseRanking[]required
Rankings to run and merge. Specifying fewer than two rankings returns search:clause:rankings_too_few.
Example
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
],
"weight": 0.5
}
2 properties
clausesClause[]required
Clauses the ranking searches for, combined with an implicit AND. At least one clause is required.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
weightnumber
Multiplier that scales the ranking's contribution relative to other rankings. It cannot reorder results within the ranking.
Default
1
Format
float
depthinteger
Number of results read from each ranking. Pagination cannot exceed the merged list, similar to k in a knn clause. Must be at least 1, and at most EXOFIND_SEARCH_MAX_FUSE_DEPTH.
Default
100
Format
int32
rankConstantnumber
Constant added to each rank before it is inverted. Lower values increase the weight of the highest-ranked results in each ranking; higher values flatten the difference across ranks, giving more weight to documents found by multiple rankings. Must be above 0.
Default
60
Format
float
filterClause[]
Clauses that narrow every ranking before it is cut to depth. A knn clause inside a ranking applies filter entries as a pre-filter, ensuring the vector ranking returns k results. Clauses placed beside the fuse clause filter the merged list after each ranking is cut to depth.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
facetsFacetRequest[]
Fields to aggregate match counts for. See Facets. If omitted, no facet counts are calculated.
Example
{
"field": "category",
"limit": 20,
"order": "count"
}
8 properties
namestring
Key used for the facet in the response. Required when faceting on the same field multiple times. Duplicate facet names return search:facet:name_duplicate. Defaults to the field name.
fieldstringrequired
Target field to aggregate.
Example
"category"
limitinteger
Maximum number of facet values to return, at most EXOFIND_SEARCH_MAX_FACET_VALUES.
Default
10
Format
int32
Range
1 or more
Sort order of facet values: "count" (descending by count), "value" (ascending by value), or "declared" (the order the search settings declare for the field's values, followed by every other value by count).
Default
"count"
Values
"count", "value", "declared"
rangesFacetRange[]
Array of range bucket definitions. See Range buckets. Cannot be combined with limit or order (search:facet:ranges_conflicting).
Example
{
"from": 100,
"to": 200
}
2 properties
fromany
The lowest value the bucket holds, itself included. Omit for no lower end.
Example
100
toany
Where the bucket ends, itself not included. Omit for no upper end.
Example
200
pathstring
Starting path level for hierarchical fields. See Counting down a tree. Defaults to the root.
depthinteger
Number of hierarchical levels below path to count.
Default
1
Format
int32
Range
1 to 10
excludeFiltersstring[]
List of field paths whose filter entries are excluded from this facet's calculation. Defaults to the facet's own field path. An empty array [] disables filter exclusion. A blank path returns search:facet:exclude_filters_invalid.
sortSort[]
Order in which results are returned. If omitted, results are sorted by relevance score in descending order.
Example
{
"field": "name",
"order": "asc"
}
3 types
FieldSorttype: "field"
Sorts by field value. The target field must have sorting enabled. A field inside a nested object is named by its dotted path, and only the nested values that the query's nested clauses matched are considered.
Example
{
"field": "name",
"order": "asc"
}
fieldstringrequired
Target field, as named in the index definition.
Example
"name"
Direction to order in.
Default
"asc"
Values
"asc", "desc"
ScoreSorttype: "score"
Sorts by document relevance score.
Example
{
"type": "score"
}
Direction to order in.
Default
"desc"
Values
"asc", "desc"
DistanceSorttype: "distance"
Sorts by distance from the specified geographic coordinate, nearest first. Accepts no order property. A distance sort on a nested object field returns search:sort:nested_unsupported.
Example
{
"type": "distance",
"field": "location",
"lat": 59.3,
"lon": 18.1
}
fieldstringrequired
Target geopoint field, as named in the index definition.
Example
"location"
latnumberrequired
Latitude of the origin, in degrees.
Format
double
Range
-90 to 90
Example
59.3
lonnumberrequired
Longitude of the origin, in degrees.
Format
double
Range
-180 to 180
Example
18.1
localestring
BCP-47 locale tag used to read and return locale-specific fields. Matches the closest declared locale on each field (for example, sv-SE falls back to sv). If no matching variant exists, uses the field default.
Example
"sv"
fieldsstring[]
Document fields to return with each result. Fields inside an object are specified by dotted path and returned nested inside the object. Requesting unretrievable fields returns an error (see Document source). The primary key is always included.
highlightHighlight
Fields to return highlighted snippets for. See Highlighting.
Example
{
"fields": {
"name": {},
"description": {
"fragments": 2
}
}
}
1 property
fieldsmap of HighlightFieldrequired
Fields to return fragments for, keyed by the name the field has in the index definition. An empty options object asks for the defaults. Fields must have highlighting enabled (matching or autocomplete); requesting an unconfigured field returns search:usage_unsupported.
1 property
<key>HighlightField
Configuration for highlighting text fragments in a single field.
Example
{
"fragments": 2,
"length": 150,
"pre": "<mark>",
"post": "</mark>"
}
4 properties
fragmentsinteger
Maximum number of fragments to return.
Default
3
Format
int32
lengthinteger
Target character length per fragment. Fragments break on sentence boundaries, and text shorter than this comes back as a single fragment holding all of it.
Default
150
Format
int32
Range
1 to 10000
prestring
Prefix tag inserted before highlighted terms. May be empty.
Default
"<em>"
poststring
Postfix tag inserted after highlighted terms. May be empty.
Default
"</em>"
matchedMatched
Nested object fields for which to return matched values with each hit. See Matched values.
Example
{
"fields": {
"variants": {
"limit": 3
}
}
}
1 property
fieldsmap of MatchedFieldrequired
Object fields to answer for, keyed by the name the field has in the index definition. An empty options object asks for the defaults. Targeting a field that is not a nested object returns search:matched:field_not_nested.
1 property
<key>MatchedField
Configuration for returning matched values of a nested object field.
Example
{
"limit": 3,
"fields": [
"variants.color"
]
}
2 properties
limitinteger
Maximum number of matched values to return per hit. How many matched in all always comes back beside them.
Default
3
Format
int32
Range
1 to 100
fieldsstring[]
Field paths inside the nested object to include in each returned value, defaulting to all of them. Paths must reside under the target object path (search:matched:field_not_inside) and exist in the schema (search:field_unknown). On an index whose source is none, a named field has to be stored (search:usage_unsupported).
hitsHits
Specifies an object field whose matched values return as individual hits instead of full documents. See What a hit stands for.
Example
{
"path": "variants",
"fields": [
"variants.color",
"variants.price"
]
}
3 properties
pathstringrequired
Dotted path of the nested object field whose matched values become hits. Targeting a field that is not a nested object returns search:hits:path_not_nested.
Example
"variants"
fieldsstring[]
Dotted field paths inside the nested object to return in value, defaulting to all of them. Names must be prefixed by path (search:hits:field_not_inside) and exist in the index (search:field_unknown). On an index whose source is none, a named field has to be stored (search:usage_unsupported).
Clauses deciding which documents expand into value hits; every other matching document stays a document hit. Combined with an implicit AND, and specified as field or nested clauses. If omitted, every matching document expands. Unsupported clause types return search:hits:when_clause_unsupported; clauses that score return search:hits:when_scoring_unsupported. Sorting by a field is refused while this is set (search:hits:when_sort_unsupported).
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
9 types
FieldClausetype: "field"
Matches documents by the value of a single field. The targeted field must be indexed for the requested matcher usage; if it is not configured for that usage, the request returns search:usage_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
fieldstringrequired
Target field, as named in the index definition.
Example
"category"
matchMatcherrequired
Criteria evaluated against the field's values.
Example
{
"value": "fiction"
}
9 types
EqualsMatchertype: "equals"
Matches field values equal to value.
Example
{
"value": "fiction"
}
valueanyrequired
The value that the field value must equal.
Example
"fiction"
InMatchertype: "in"
Matches field values equal to any value in values. An empty array matches no documents.
Example
{
"type": "in",
"values": [
"fiction",
"poetry"
]
}
valuesany[]required
The values that a field value may equal.
AnyMatchertype: "any"
Matches any document that contains a value for the field.
Example
{
"type": "any"
}
PrefixMatchertype: "prefix"
Matches string field values starting with value, evaluated against the entire field value.
Example
{
"type": "prefix",
"value": "EX-"
}
valuestringrequired
The prefix that a field value must start with.
Example
"EX-"
UnderMatchertype: "under"
Matches values at or below the specified path in a hierarchical tree. Requires a field configured with hierarchy. Path segments must match complete levels, so Men/Sho matches nothing where a prefix matcher matches.
Example
{
"type": "under",
"path": "Men/Shoes"
}
pathstringrequired
Path in the hierarchical tree to match at or below.
Example
"Men/Shoes"
RangeMatchertype: "range"
Matches values within bounds. Accepts inclusive (gte, lte) and exclusive (gt, lt) bounds; either side may be left open, and at least one bound is required (search:matcher:range_empty).
Example
{
"type": "range",
"gte": 10,
"lt": 20
}
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
RangesMatchertype: "ranges"
Matches values falling within any of the specified range objects. An empty array matches no documents, matching the behavior of an empty in matcher.
Example
{
"type": "ranges",
"values": [
{
"gte": 10,
"lt": 20
},
{
"gte": 50
}
]
}
valuesMatcherRange[]required
The ranges to evaluate, each requiring at least one bound. A bucket returned by a range facet sets from as gte and to as lt.
Example
{
"gte": 10,
"lt": 20
}
TextMatchertype: "text"
Matches text within a single field using field-level analysis.
Example
{
"type": "text",
"text": "silent spring",
"match": "phrase"
}
textstringrequired
The query text to match.
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply. Setting join with any other match returns search:clause:join_unsupported.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows the field's typoTolerance configuration; off disables typo tolerance for the matcher.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Only applies to phrase queries or quoted phrases in user mode.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
interpretInterpretMode
Whether parts of user text are read as filters on the fields of the index: auto reads a number typed next to the unit of a number field, or next to a comparative word such as under, as a filter on that field; off takes every word as text. Whatever was read is reported as interpreted beside the results. See Reading numbers and units.
Default
"auto"
Values
"auto", "off"
DistanceMatchertype: "distance"
Matches geopoint values within radius meters of the specified latitude and longitude coordinates.
Example
{
"type": "distance",
"lat": 59.3,
"lon": 18.1,
"radius": 5000
}
latnumberrequired
Latitude of the origin, in degrees.
Format
double
Range
-90 to 90
Example
59.3
lonnumberrequired
Longitude of the origin, in degrees.
Format
double
Range
-180 to 180
Example
18.1
radiusnumberrequired
Maximum distance from the origin in meters.
Format
double
Example
5000
TextClausetype: "text"
Matches query text across one or more fields. Phrase queries operate within a single field and match terms exactly as typed, regardless of field typoTolerance. Fields defined only for autocomplete do not support phrase matching. See text.
Example
{
"type": "text",
"text": "silent spr",
"fields": {
"name": 3,
"description": null
}
}
textstringrequired
The query text to match.
Example
"silent spr"
fieldsmap of number
Object mapping field names to score weights. A field mapped to null uses the weight from its field definition. If omitted, searches all searchable fields, skipping autocomplete-only fields.
1 property
<key>number
Format
float
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply, and a filter read out of the text is one of the parts. Setting join with any other match returns search:clause:join_unsupported. See Reading what was typed.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows each field's typoTolerance configuration; off disables typo tolerance for the clause.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Setting slop above 0 with "match": "all" or "match": "any" returns search:clause:slop_unsupported.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
combineCombine
Scope for multi-field term matching. term evaluates each term across all targeted fields, so terms may appear in different fields; field requires a single field to satisfy match on its own. Ignored by phrase queries.
Default
"term"
Values
"term", "field"
interpretInterpret
Whether parts of user text are read as filters on the fields of the index, given as a mode or as the targets to read on. See Reading numbers and units.
Default
"auto"
2 types
Whether parts of user text are read as filters: auto reads a number typed next to a unit or a comparative word as a filter on the field declaring that unit, off takes every word as text.
Reads user text as filters on the named targets only. A number typed with a unit is read on every target declaring that unit; a number typed without one is read on every target holding a currency, when they all hold the same currency.
Example
{
"fields": [
{
"field": "prices.amount"
}
]
}
fieldsInterpretTarget[]required
The targets a reading may be a filter on. At least one is required.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
KnnClausetype: "knn"
Matches the k nearest documents by vector distance in a specified field, scored by proximity. Cannot be combined with hits (search:hits:knn_unsupported).
Example
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 10,
"filter": [
{
"field": "published",
"match": {
"value": true
}
}
]
}
fieldstringrequired
The vector field to search.
Example
"embedding"
vectornumber[]required
The query vector. Its length must match the dimensions declared in the field definition.
Format
float
kintegerrequired
Number of nearest documents to return, at most EXOFIND_SEARCH_MAX_KNN_K.
Format
int32
filterClause[]
Clauses that documents must satisfy before nearest-neighbor evaluation.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NestedClausetype: "nested"
Matches documents where a single element of a nested object field satisfies all child clauses. A nested clause on a flattened object field returns search:nested:path_not_nested; on a non-object field it returns an error. See nested.
Example
{
"type": "nested",
"path": "variants",
"clauses": [
{
"field": "variants.color",
"match": {
"value": "red"
}
},
{
"field": "variants.price",
"match": {
"type": "range",
"lt": 20
}
}
]
}
pathstringrequired
Name of the nested object field.
Example
"variants"
clausesClause[]
Clauses evaluated within a single nested object value, naming fields by their dotted path. An empty array matches any document where the object field is present. May contain field, text, knn, and, or, not and boost; a clause that only means something for whole documents, such as another nested or a fuse, returns search:nested:clause_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
scoreScore
Scoring mode for aggregating matching nested values. Only applies when scoring clauses exist within the nested clause.
Default
"max"
Values
"max", "min", "avg", "total"
AndClausetype: "and"
Matches documents where all child clauses match.
Example
{
"type": "and",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "published",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, all of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
OrClausetype: "or"
Matches documents where at least one child clause matches.
Example
{
"type": "or",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "category",
"match": {
"value": "poetry"
}
}
]
}
clausesClause[]required
Child clauses, at least one of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NotClausetype: "not"
Matches documents where no child clause matches.
Example
{
"type": "not",
"clauses": [
{
"field": "discontinued",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, none of which may match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
BoostClausetype: "boost"
Increases the relevance score of documents that satisfy child clauses without excluding non-matching documents.
Example
{
"type": "boost",
"weight": 2,
"clauses": [
{
"field": "featured",
"match": {
"value": true
}
}
]
}
weightnumberrequired
Multiplier applied to matching documents. Values greater than 1 increase score; values between 0 and 1 decrease score. Leaving it out, or setting it below 0 or to a non-finite number, returns search:clause:weight_out_of_range.
Format
float
Example
2
clausesClause[]required
Clauses required to apply the boost weight.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
FuseClausetype: "fuse"
Matches documents across several rankings, scored and merged by rank. Documents are scored by the sum of weight / (rankConstant + rank) across the rankings that reached them. Because the clause reads only result positions, scores from different scales (such as BM25 text relevance and vector similarity) combine without normalization. Matches at most depth results per ranking. See fuse.
Example
{
"type": "fuse",
"depth": 200,
"rankConstant": 60,
"rankings": [
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
]
},
{
"clauses": [
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 200
}
],
"weight": 0.5
}
],
"filter": [
{
"field": "inStock",
"match": {
"value": true
}
}
]
}
rankingsFuseRanking[]required
Rankings to run and merge. Specifying fewer than two rankings returns search:clause:rankings_too_few.
Example
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
],
"weight": 0.5
}
2 properties
clausesClause[]required
Clauses the ranking searches for, combined with an implicit AND. At least one clause is required.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
weightnumber
Multiplier that scales the ranking's contribution relative to other rankings. It cannot reorder results within the ranking.
Default
1
Format
float
depthinteger
Number of results read from each ranking. Pagination cannot exceed the merged list, similar to k in a knn clause. Must be at least 1, and at most EXOFIND_SEARCH_MAX_FUSE_DEPTH.
Default
100
Format
int32
rankConstantnumber
Constant added to each rank before it is inverted. Lower values increase the weight of the highest-ranked results in each ranking; higher values flatten the difference across ranks, giving more weight to documents found by multiple rankings. Must be above 0.
Default
60
Format
float
filterClause[]
Clauses that narrow every ranking before it is cut to depth. A knn clause inside a ranking applies filter entries as a pre-filter, ensuring the vector ranking returns k results. Clauses placed beside the fuse clause filter the merged list after each ranking is cut to depth.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
limitinteger
Maximum number of results to return, at most EXOFIND_SEARCH_MAX_LIMIT. Setting limit to 0 returns the total match count without hits.
Default
10
Format
int32
offsetinteger
Number of matching results to skip. Specify at most one of offset, after, or before.
Default
0
Format
int32
afterstring
Cursor string from the next property of a previous response to fetch the next page.
beforestring
Cursor string from the previous property of a previous response to fetch the preceding page.
pagesPagesRequest
Requests numbered page metadata. Accepts an optional { "max": n } object to limit the number of page entries (default 9). Implies "total": "exact".
Example
{
"max": 9
}
1 property
maxinteger
Maximum number of page entries to return.
Default
9
Format
int32
totalTotalMode
Counting mode for the total matching document count: "estimate" counts until exceeding the returned window; "exact" counts every matching document.
Default
"estimate"
Values
"estimate", "exact"
signalsSignal[]
Document ranking signals used to adjust relevance scoring. Added to the signals configured on the index unless signalsMode says otherwise. See Signals. If omitted, uses the ranking signals configured on the index.
Example
{
"field": "purchases",
"saturation": {
"pivot": 50
},
"weight": 0.5
}
5 properties
fieldstringrequired
Field to read the value from, as named in the index definition. Must be a numeric or timestamp field with sorting enabled.
Example
"purchases"
saturationSaturation
Ranks by how far the value rises above a pivot. For number fields.
Example
{
"pivot": 50
}
1 property
pivotnumberrequired
The value that counts for half of what the signal can give. Must be above zero.
Format
double
Example
50
decayDecay
Ranks by how long ago the value was. For timestamp fields.
Example
{
"halfLife": 604800
}
1 property
halfLifeintegerrequired
How many seconds it takes for the signal to be worth half as much. Must be above zero.
Format
int64
Example
604800
linearLinear
Ranks by how far the value is toward a ceiling, as value / ceiling held between 0 and 1. For number fields holding a score computed elsewhere.
Example
{
"ceiling": 1
}
1 property
ceilingnumberrequired
The value that counts for all of what the signal can give. Must be above zero.
Format
double
Example
1
weightnumber
How much the signal can lift a document at most, as a share of its score.
Default
1
Format
float
signalsModeSignalsMode
How signals meets the ranking configured on the index: "add" ranks by both, with a signal here standing in for one on the same field; "replace" ranks by signals alone. Supplying this without signals returns search:signal:mode_without_signals.
Default
"add"
Values
"add", "replace"
rescoreRescore
Reorders the best results of a search in a second pass without changing which documents matched. See Rescoring.
Example
{
"window": 200,
"boost": [
{
"field": "brand",
"match": {
"value": "adidas"
}
}
],
"signals": [
{
"field": "purchases",
"saturation": {
"pivot": 50
}
}
],
"weight": 0.5
}
4 properties
windowintegerrequired
Number of best results to score a second time. Must be at least offset plus limit, and at most EXOFIND_SEARCH_MAX_RESCORE_WINDOW.
Format
int32
Example
200
Clauses that lift results satisfying them. Clauses do not filter or narrow search hits; a result that satisfies none of them keeps its first-pass score. Wrap a clause in boost to weigh it against the others.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
9 types
FieldClausetype: "field"
Matches documents by the value of a single field. The targeted field must be indexed for the requested matcher usage; if it is not configured for that usage, the request returns search:usage_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
fieldstringrequired
Target field, as named in the index definition.
Example
"category"
matchMatcherrequired
Criteria evaluated against the field's values.
Example
{
"value": "fiction"
}
9 types
EqualsMatchertype: "equals"
Matches field values equal to value.
Example
{
"value": "fiction"
}
valueanyrequired
The value that the field value must equal.
Example
"fiction"
InMatchertype: "in"
Matches field values equal to any value in values. An empty array matches no documents.
Example
{
"type": "in",
"values": [
"fiction",
"poetry"
]
}
valuesany[]required
The values that a field value may equal.
AnyMatchertype: "any"
Matches any document that contains a value for the field.
Example
{
"type": "any"
}
PrefixMatchertype: "prefix"
Matches string field values starting with value, evaluated against the entire field value.
Example
{
"type": "prefix",
"value": "EX-"
}
valuestringrequired
The prefix that a field value must start with.
Example
"EX-"
UnderMatchertype: "under"
Matches values at or below the specified path in a hierarchical tree. Requires a field configured with hierarchy. Path segments must match complete levels, so Men/Sho matches nothing where a prefix matcher matches.
Example
{
"type": "under",
"path": "Men/Shoes"
}
pathstringrequired
Path in the hierarchical tree to match at or below.
Example
"Men/Shoes"
RangeMatchertype: "range"
Matches values within bounds. Accepts inclusive (gte, lte) and exclusive (gt, lt) bounds; either side may be left open, and at least one bound is required (search:matcher:range_empty).
Example
{
"type": "range",
"gte": 10,
"lt": 20
}
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
RangesMatchertype: "ranges"
Matches values falling within any of the specified range objects. An empty array matches no documents, matching the behavior of an empty in matcher.
Example
{
"type": "ranges",
"values": [
{
"gte": 10,
"lt": 20
},
{
"gte": 50
}
]
}
valuesMatcherRange[]required
The ranges to evaluate, each requiring at least one bound. A bucket returned by a range facet sets from as gte and to as lt.
Example
{
"gte": 10,
"lt": 20
}
TextMatchertype: "text"
Matches text within a single field using field-level analysis.
Example
{
"type": "text",
"text": "silent spring",
"match": "phrase"
}
textstringrequired
The query text to match.
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply. Setting join with any other match returns search:clause:join_unsupported.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows the field's typoTolerance configuration; off disables typo tolerance for the matcher.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Only applies to phrase queries or quoted phrases in user mode.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
interpretInterpretMode
Whether parts of user text are read as filters on the fields of the index: auto reads a number typed next to the unit of a number field, or next to a comparative word such as under, as a filter on that field; off takes every word as text. Whatever was read is reported as interpreted beside the results. See Reading numbers and units.
Default
"auto"
Values
"auto", "off"
DistanceMatchertype: "distance"
Matches geopoint values within radius meters of the specified latitude and longitude coordinates.
Example
{
"type": "distance",
"lat": 59.3,
"lon": 18.1,
"radius": 5000
}
latnumberrequired
Latitude of the origin, in degrees.
Format
double
Range
-90 to 90
Example
59.3
lonnumberrequired
Longitude of the origin, in degrees.
Format
double
Range
-180 to 180
Example
18.1
radiusnumberrequired
Maximum distance from the origin in meters.
Format
double
Example
5000
TextClausetype: "text"
Matches query text across one or more fields. Phrase queries operate within a single field and match terms exactly as typed, regardless of field typoTolerance. Fields defined only for autocomplete do not support phrase matching. See text.
Example
{
"type": "text",
"text": "silent spr",
"fields": {
"name": 3,
"description": null
}
}
textstringrequired
The query text to match.
Example
"silent spr"
fieldsmap of number
Object mapping field names to score weights. A field mapped to null uses the weight from its field definition. If omitted, searches all searchable fields, skipping autocomplete-only fields.
1 property
<key>number
Format
float
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply, and a filter read out of the text is one of the parts. Setting join with any other match returns search:clause:join_unsupported. See Reading what was typed.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows each field's typoTolerance configuration; off disables typo tolerance for the clause.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Setting slop above 0 with "match": "all" or "match": "any" returns search:clause:slop_unsupported.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
combineCombine
Scope for multi-field term matching. term evaluates each term across all targeted fields, so terms may appear in different fields; field requires a single field to satisfy match on its own. Ignored by phrase queries.
Default
"term"
Values
"term", "field"
interpretInterpret
Whether parts of user text are read as filters on the fields of the index, given as a mode or as the targets to read on. See Reading numbers and units.
Default
"auto"
2 types
Whether parts of user text are read as filters: auto reads a number typed next to a unit or a comparative word as a filter on the field declaring that unit, off takes every word as text.
Reads user text as filters on the named targets only. A number typed with a unit is read on every target declaring that unit; a number typed without one is read on every target holding a currency, when they all hold the same currency.
Example
{
"fields": [
{
"field": "prices.amount"
}
]
}
fieldsInterpretTarget[]required
The targets a reading may be a filter on. At least one is required.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
KnnClausetype: "knn"
Matches the k nearest documents by vector distance in a specified field, scored by proximity. Cannot be combined with hits (search:hits:knn_unsupported).
Example
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 10,
"filter": [
{
"field": "published",
"match": {
"value": true
}
}
]
}
fieldstringrequired
The vector field to search.
Example
"embedding"
vectornumber[]required
The query vector. Its length must match the dimensions declared in the field definition.
Format
float
kintegerrequired
Number of nearest documents to return, at most EXOFIND_SEARCH_MAX_KNN_K.
Format
int32
filterClause[]
Clauses that documents must satisfy before nearest-neighbor evaluation.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NestedClausetype: "nested"
Matches documents where a single element of a nested object field satisfies all child clauses. A nested clause on a flattened object field returns search:nested:path_not_nested; on a non-object field it returns an error. See nested.
Example
{
"type": "nested",
"path": "variants",
"clauses": [
{
"field": "variants.color",
"match": {
"value": "red"
}
},
{
"field": "variants.price",
"match": {
"type": "range",
"lt": 20
}
}
]
}
pathstringrequired
Name of the nested object field.
Example
"variants"
clausesClause[]
Clauses evaluated within a single nested object value, naming fields by their dotted path. An empty array matches any document where the object field is present. May contain field, text, knn, and, or, not and boost; a clause that only means something for whole documents, such as another nested or a fuse, returns search:nested:clause_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
scoreScore
Scoring mode for aggregating matching nested values. Only applies when scoring clauses exist within the nested clause.
Default
"max"
Values
"max", "min", "avg", "total"
AndClausetype: "and"
Matches documents where all child clauses match.
Example
{
"type": "and",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "published",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, all of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
OrClausetype: "or"
Matches documents where at least one child clause matches.
Example
{
"type": "or",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "category",
"match": {
"value": "poetry"
}
}
]
}
clausesClause[]required
Child clauses, at least one of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NotClausetype: "not"
Matches documents where no child clause matches.
Example
{
"type": "not",
"clauses": [
{
"field": "discontinued",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, none of which may match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
BoostClausetype: "boost"
Increases the relevance score of documents that satisfy child clauses without excluding non-matching documents.
Example
{
"type": "boost",
"weight": 2,
"clauses": [
{
"field": "featured",
"match": {
"value": true
}
}
]
}
weightnumberrequired
Multiplier applied to matching documents. Values greater than 1 increase score; values between 0 and 1 decrease score. Leaving it out, or setting it below 0 or to a non-finite number, returns search:clause:weight_out_of_range.
Format
float
Example
2
clausesClause[]required
Clauses required to apply the boost weight.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
FuseClausetype: "fuse"
Matches documents across several rankings, scored and merged by rank. Documents are scored by the sum of weight / (rankConstant + rank) across the rankings that reached them. Because the clause reads only result positions, scores from different scales (such as BM25 text relevance and vector similarity) combine without normalization. Matches at most depth results per ranking. See fuse.
Example
{
"type": "fuse",
"depth": 200,
"rankConstant": 60,
"rankings": [
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
]
},
{
"clauses": [
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 200
}
],
"weight": 0.5
}
],
"filter": [
{
"field": "inStock",
"match": {
"value": true
}
}
]
}
rankingsFuseRanking[]required
Rankings to run and merge. Specifying fewer than two rankings returns search:clause:rankings_too_few.
Example
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
],
"weight": 0.5
}
2 properties
clausesClause[]required
Clauses the ranking searches for, combined with an implicit AND. At least one clause is required.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
weightnumber
Multiplier that scales the ranking's contribution relative to other rankings. It cannot reorder results within the ranking.
Default
1
Format
float
depthinteger
Number of results read from each ranking. Pagination cannot exceed the merged list, similar to k in a knn clause. Must be at least 1, and at most EXOFIND_SEARCH_MAX_FUSE_DEPTH.
Default
100
Format
int32
rankConstantnumber
Constant added to each rank before it is inverted. Lower values increase the weight of the highest-ranked results in each ranking; higher values flatten the difference across ranks, giving more weight to documents found by multiple rankings. Must be above 0.
Default
60
Format
float
filterClause[]
Clauses that narrow every ranking before it is cut to depth. A knn clause inside a ranking applies filter entries as a pre-filter, ensuring the vector ranking returns k results. Clauses placed beside the fuse clause filter the merged list after each ranking is cut to depth.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
signalsSignal[]
Document values taken into the second score, written the same way as top-level signals. Applied to every result in the window. The ranking configured on the index belongs to the first pass and is not applied again here, so signalsMode does not affect these.
Example
{
"field": "purchases",
"saturation": {
"pivot": 50
},
"weight": 0.5
}
5 properties
fieldstringrequired
Field to read the value from, as named in the index definition. Must be a numeric or timestamp field with sorting enabled.
Example
"purchases"
saturationSaturation
Ranks by how far the value rises above a pivot. For number fields.
Example
{
"pivot": 50
}
1 property
pivotnumberrequired
The value that counts for half of what the signal can give. Must be above zero.
Format
double
Example
50
decayDecay
Ranks by how long ago the value was. For timestamp fields.
Example
{
"halfLife": 604800
}
1 property
halfLifeintegerrequired
How many seconds it takes for the signal to be worth half as much. Must be above zero.
Format
int64
Example
604800
linearLinear
Ranks by how far the value is toward a ceiling, as value / ceiling held between 0 and 1. For number fields holding a score computed elsewhere.
Example
{
"ceiling": 1
}
1 property
ceilingnumberrequired
The value that counts for all of what the signal can give. Must be above zero.
Format
double
Example
1
weightnumber
How much the signal can lift a document at most, as a share of its score.
Default
1
Format
float
weightnumber
Multiplier applied to the second-pass score before adding it to the first-pass score.
Default
1
Format
float
freshnessFreshness
What the request demands of the state it is answered from. Omit it to be answered from what the node holds. See Freshness.
1 property
atLeaststring
A freshness token that an earlier response returned in its freshness property or X-Exofind-Freshness header. The node answers only once it holds the state the token describes: the generation, the commit and the search settings. A node that is behind commits, pulls or reads the settings first, and answers search:freshness:unavailable with a Retry-After header when it has waited EXOFIND_SEARCH_FRESHNESS_WAIT without reaching the state. The token is opaque; pass it back unchanged.
Example
"AQoIcHJvZHVjdHMSATIYBw"

Responses

200
How the hit scores.
ExplainResponse

Explains how a specific document or value hit scores for a search query. See Explaining a result.

matchedboolean
Whether the hit satisfies the search. A hit that does not match appears in no search results.
scorenumber
The relevance score of the hit. Returns 0 if the hit does not match.
Format
float
Example
7.42
Root score step explaining how the score was calculated.
Example
{
"matched": true,
"score": 8.42,
"description": "weight(name:spring) [BM25], result of:",
"clause": "query[0]",
"clauseType": "text",
"field": "name",
"usage": "matching"
}
9 properties
matchedboolean
Whether this step was satisfied. A non-matching step contributes nothing to the parent score, and its children describe the reason.
scorenumber
Score contributed by this step to its parent step. Returns 0 if the step did not match.
Format
float
descriptionstring
Human-readable explanation of the step.
Example
"weight(title:bok) [BM25], result of:"
clausestring
Path to the clause in the request body that produced this step. Omitted when the step is not an individual clause.
Example
"query[0].clauses[2]"
clauseTypestring
Clause type matching request syntax in type. Omitted when clause is omitted.
Example
"text"
fieldstring
Index definition field name evaluated by the step. Omitted when the step reads no fields or multiple fields.
Example
"title"
usagestring
Field usage mode evaluated by the step (such as matching or filter). Omitted when field is omitted.
Example
"matching"
localestring
BCP 47 tag of the variant this step reads. Omitted for a field that holds one variant for every language.
Example
"sv"
Child score steps that compose this step. Empty for leaf steps.
Example
{
"matched": true,
"score": 8.42,
"description": "weight(name:spring) [BM25], result of:",
"clause": "query[0]",
"clauseType": "text",
"field": "name",
"usage": "matching"
}
relaxedRelaxed
Relaxation details containing dropped words and the effective query text. Omitted if query relaxation did not run. When zero results trigger query relaxation, the explanation tree reflects the relaxed query that executed.
Example
{
"dropped": [
{
"word": "waterproof",
"reason": "unmatched"
}
],
"text": "running shoes"
}
2 properties
droppedDropped[]
List of dropped words and the reason each was removed, in the order they appeared in the query.
Example
{
"word": "waterproof",
"reason": "unmatched"
}
2 properties
wordstring
The word as it was typed.
Example
"waterproof"
reasonReason
Reason the word was dropped.
Values
"unmatched", "common"
textstring
The effective query string used to execute the search.
Example
"running shoes"
interpretedInterpreted
What the search read out of the query text as filters, and the text that was left. Omitted when nothing was read. The explanation tree reflects the search with the filters in it.
Example
{
"filters": [
{
"field": "price",
"match": {
"type": "range",
"lt": 500
},
"words": [
"under",
"500"
]
}
],
"text": "shoes"
}
2 properties
filtersFilter[]
The filters that were read, in the order their words were typed. Two fields declaring the same unit read the same words as two filters, either of which a document may satisfy.
Example
{
"field": "price",
"match": {
"type": "range",
"lt": 500
},
"words": [
"under",
"500"
]
}
5 properties
fieldstring
The field the filter is on.
Example
"price"
Clauses that hold where the filter is read, as the when of the target the request named. Absent when the filter is read wherever the field holds a value.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
9 types
FieldClausetype: "field"
Matches documents by the value of a single field. The targeted field must be indexed for the requested matcher usage; if it is not configured for that usage, the request returns search:usage_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
fieldstringrequired
Target field, as named in the index definition.
Example
"category"
matchMatcherrequired
Criteria evaluated against the field's values.
Example
{
"value": "fiction"
}
9 types
EqualsMatchertype: "equals"
Matches field values equal to value.
Example
{
"value": "fiction"
}
valueanyrequired
The value that the field value must equal.
Example
"fiction"
InMatchertype: "in"
Matches field values equal to any value in values. An empty array matches no documents.
Example
{
"type": "in",
"values": [
"fiction",
"poetry"
]
}
valuesany[]required
The values that a field value may equal.
AnyMatchertype: "any"
Matches any document that contains a value for the field.
Example
{
"type": "any"
}
PrefixMatchertype: "prefix"
Matches string field values starting with value, evaluated against the entire field value.
Example
{
"type": "prefix",
"value": "EX-"
}
valuestringrequired
The prefix that a field value must start with.
Example
"EX-"
UnderMatchertype: "under"
Matches values at or below the specified path in a hierarchical tree. Requires a field configured with hierarchy. Path segments must match complete levels, so Men/Sho matches nothing where a prefix matcher matches.
Example
{
"type": "under",
"path": "Men/Shoes"
}
pathstringrequired
Path in the hierarchical tree to match at or below.
Example
"Men/Shoes"
RangeMatchertype: "range"
Matches values within bounds. Accepts inclusive (gte, lte) and exclusive (gt, lt) bounds; either side may be left open, and at least one bound is required (search:matcher:range_empty).
Example
{
"type": "range",
"gte": 10,
"lt": 20
}
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
RangesMatchertype: "ranges"
Matches values falling within any of the specified range objects. An empty array matches no documents, matching the behavior of an empty in matcher.
Example
{
"type": "ranges",
"values": [
{
"gte": 10,
"lt": 20
},
{
"gte": 50
}
]
}
valuesMatcherRange[]required
The ranges to evaluate, each requiring at least one bound. A bucket returned by a range facet sets from as gte and to as lt.
Example
{
"gte": 10,
"lt": 20
}
TextMatchertype: "text"
Matches text within a single field using field-level analysis.
Example
{
"type": "text",
"text": "silent spring",
"match": "phrase"
}
textstringrequired
The query text to match.
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply. Setting join with any other match returns search:clause:join_unsupported.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows the field's typoTolerance configuration; off disables typo tolerance for the matcher.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Only applies to phrase queries or quoted phrases in user mode.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
interpretInterpretMode
Whether parts of user text are read as filters on the fields of the index: auto reads a number typed next to the unit of a number field, or next to a comparative word such as under, as a filter on that field; off takes every word as text. Whatever was read is reported as interpreted beside the results. See Reading numbers and units.
Default
"auto"
Values
"auto", "off"
DistanceMatchertype: "distance"
Matches geopoint values within radius meters of the specified latitude and longitude coordinates.
Example
{
"type": "distance",
"lat": 59.3,
"lon": 18.1,
"radius": 5000
}
latnumberrequired
Latitude of the origin, in degrees.
Format
double
Range
-90 to 90
Example
59.3
lonnumberrequired
Longitude of the origin, in degrees.
Format
double
Range
-180 to 180
Example
18.1
radiusnumberrequired
Maximum distance from the origin in meters.
Format
double
Example
5000
TextClausetype: "text"
Matches query text across one or more fields. Phrase queries operate within a single field and match terms exactly as typed, regardless of field typoTolerance. Fields defined only for autocomplete do not support phrase matching. See text.
Example
{
"type": "text",
"text": "silent spr",
"fields": {
"name": 3,
"description": null
}
}
textstringrequired
The query text to match.
Example
"silent spr"
fieldsmap of number
Object mapping field names to score weights. A field mapped to null uses the weight from its field definition. If omitted, searches all searchable fields, skipping autocomplete-only fields.
1 property
<key>number
Format
float
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply, and a filter read out of the text is one of the parts. Setting join with any other match returns search:clause:join_unsupported. See Reading what was typed.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows each field's typoTolerance configuration; off disables typo tolerance for the clause.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Setting slop above 0 with "match": "all" or "match": "any" returns search:clause:slop_unsupported.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
combineCombine
Scope for multi-field term matching. term evaluates each term across all targeted fields, so terms may appear in different fields; field requires a single field to satisfy match on its own. Ignored by phrase queries.
Default
"term"
Values
"term", "field"
interpretInterpret
Whether parts of user text are read as filters on the fields of the index, given as a mode or as the targets to read on. See Reading numbers and units.
Default
"auto"
2 types
Whether parts of user text are read as filters: auto reads a number typed next to a unit or a comparative word as a filter on the field declaring that unit, off takes every word as text.
Reads user text as filters on the named targets only. A number typed with a unit is read on every target declaring that unit; a number typed without one is read on every target holding a currency, when they all hold the same currency.
Example
{
"fields": [
{
"field": "prices.amount"
}
]
}
fieldsInterpretTarget[]required
The targets a reading may be a filter on. At least one is required.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
KnnClausetype: "knn"
Matches the k nearest documents by vector distance in a specified field, scored by proximity. Cannot be combined with hits (search:hits:knn_unsupported).
Example
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 10,
"filter": [
{
"field": "published",
"match": {
"value": true
}
}
]
}
fieldstringrequired
The vector field to search.
Example
"embedding"
vectornumber[]required
The query vector. Its length must match the dimensions declared in the field definition.
Format
float
kintegerrequired
Number of nearest documents to return, at most EXOFIND_SEARCH_MAX_KNN_K.
Format
int32
filterClause[]
Clauses that documents must satisfy before nearest-neighbor evaluation.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NestedClausetype: "nested"
Matches documents where a single element of a nested object field satisfies all child clauses. A nested clause on a flattened object field returns search:nested:path_not_nested; on a non-object field it returns an error. See nested.
Example
{
"type": "nested",
"path": "variants",
"clauses": [
{
"field": "variants.color",
"match": {
"value": "red"
}
},
{
"field": "variants.price",
"match": {
"type": "range",
"lt": 20
}
}
]
}
pathstringrequired
Name of the nested object field.
Example
"variants"
clausesClause[]
Clauses evaluated within a single nested object value, naming fields by their dotted path. An empty array matches any document where the object field is present. May contain field, text, knn, and, or, not and boost; a clause that only means something for whole documents, such as another nested or a fuse, returns search:nested:clause_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
scoreScore
Scoring mode for aggregating matching nested values. Only applies when scoring clauses exist within the nested clause.
Default
"max"
Values
"max", "min", "avg", "total"
AndClausetype: "and"
Matches documents where all child clauses match.
Example
{
"type": "and",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "published",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, all of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
OrClausetype: "or"
Matches documents where at least one child clause matches.
Example
{
"type": "or",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "category",
"match": {
"value": "poetry"
}
}
]
}
clausesClause[]required
Child clauses, at least one of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NotClausetype: "not"
Matches documents where no child clause matches.
Example
{
"type": "not",
"clauses": [
{
"field": "discontinued",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, none of which may match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
BoostClausetype: "boost"
Increases the relevance score of documents that satisfy child clauses without excluding non-matching documents.
Example
{
"type": "boost",
"weight": 2,
"clauses": [
{
"field": "featured",
"match": {
"value": true
}
}
]
}
weightnumberrequired
Multiplier applied to matching documents. Values greater than 1 increase score; values between 0 and 1 decrease score. Leaving it out, or setting it below 0 or to a non-finite number, returns search:clause:weight_out_of_range.
Format
float
Example
2
clausesClause[]required
Clauses required to apply the boost weight.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
FuseClausetype: "fuse"
Matches documents across several rankings, scored and merged by rank. Documents are scored by the sum of weight / (rankConstant + rank) across the rankings that reached them. Because the clause reads only result positions, scores from different scales (such as BM25 text relevance and vector similarity) combine without normalization. Matches at most depth results per ranking. See fuse.
Example
{
"type": "fuse",
"depth": 200,
"rankConstant": 60,
"rankings": [
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
]
},
{
"clauses": [
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 200
}
],
"weight": 0.5
}
],
"filter": [
{
"field": "inStock",
"match": {
"value": true
}
}
]
}
rankingsFuseRanking[]required
Rankings to run and merge. Specifying fewer than two rankings returns search:clause:rankings_too_few.
Example
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
],
"weight": 0.5
}
2 properties
clausesClause[]required
Clauses the ranking searches for, combined with an implicit AND. At least one clause is required.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
weightnumber
Multiplier that scales the ranking's contribution relative to other rankings. It cannot reorder results within the ranking.
Default
1
Format
float
depthinteger
Number of results read from each ranking. Pagination cannot exceed the merged list, similar to k in a knn clause. Must be at least 1, and at most EXOFIND_SEARCH_MAX_FUSE_DEPTH.
Default
100
Format
int32
rankConstantnumber
Constant added to each rank before it is inverted. Lower values increase the weight of the highest-ranked results in each ranking; higher values flatten the difference across ranks, giving more weight to documents found by multiple rankings. Must be above 0.
Default
60
Format
float
filterClause[]
Clauses that narrow every ranking before it is cut to depth. A knn clause inside a ranking applies filter entries as a pre-filter, ensuring the vector ranking returns k results. Clauses placed beside the fuse clause filter the merged list after each ranking is cut to depth.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
matchMatcher
What the values of the field have to satisfy, in the shape the match of a field clause takes: a range for a bound, an equals for a number written with its unit and nothing else. Can be sent back as a filter as it is.
Example
{
"value": "fiction"
}
9 types
EqualsMatchertype: "equals"
Matches field values equal to value.
Example
{
"value": "fiction"
}
valueanyrequired
The value that the field value must equal.
Example
"fiction"
InMatchertype: "in"
Matches field values equal to any value in values. An empty array matches no documents.
Example
{
"type": "in",
"values": [
"fiction",
"poetry"
]
}
valuesany[]required
The values that a field value may equal.
AnyMatchertype: "any"
Matches any document that contains a value for the field.
Example
{
"type": "any"
}
PrefixMatchertype: "prefix"
Matches string field values starting with value, evaluated against the entire field value.
Example
{
"type": "prefix",
"value": "EX-"
}
valuestringrequired
The prefix that a field value must start with.
Example
"EX-"
UnderMatchertype: "under"
Matches values at or below the specified path in a hierarchical tree. Requires a field configured with hierarchy. Path segments must match complete levels, so Men/Sho matches nothing where a prefix matcher matches.
Example
{
"type": "under",
"path": "Men/Shoes"
}
pathstringrequired
Path in the hierarchical tree to match at or below.
Example
"Men/Shoes"
RangeMatchertype: "range"
Matches values within bounds. Accepts inclusive (gte, lte) and exclusive (gt, lt) bounds; either side may be left open, and at least one bound is required (search:matcher:range_empty).
Example
{
"type": "range",
"gte": 10,
"lt": 20
}
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
RangesMatchertype: "ranges"
Matches values falling within any of the specified range objects. An empty array matches no documents, matching the behavior of an empty in matcher.
Example
{
"type": "ranges",
"values": [
{
"gte": 10,
"lt": 20
},
{
"gte": 50
}
]
}
valuesMatcherRange[]required
The ranges to evaluate, each requiring at least one bound. A bucket returned by a range facet sets from as gte and to as lt.
Example
{
"gte": 10,
"lt": 20
}
4 properties
gteany
Lower bound, the value itself included.
Example
10
gtany
Lower bound, the value itself excluded.
lteany
Upper bound, the value itself included.
ltany
Upper bound, exclusive.
Example
20
TextMatchertype: "text"
Matches text within a single field using field-level analysis.
Example
{
"type": "text",
"text": "silent spring",
"match": "phrase"
}
textstringrequired
The query text to match.
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply. Setting join with any other match returns search:clause:join_unsupported.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows the field's typoTolerance configuration; off disables typo tolerance for the matcher.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Only applies to phrase queries or quoted phrases in user mode.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
interpretInterpretMode
Whether parts of user text are read as filters on the fields of the index: auto reads a number typed next to the unit of a number field, or next to a comparative word such as under, as a filter on that field; off takes every word as text. Whatever was read is reported as interpreted beside the results. See Reading numbers and units.
Default
"auto"
Values
"auto", "off"
DistanceMatchertype: "distance"
Matches geopoint values within radius meters of the specified latitude and longitude coordinates.
Example
{
"type": "distance",
"lat": 59.3,
"lon": 18.1,
"radius": 5000
}
latnumberrequired
Latitude of the origin, in degrees.
Format
double
Range
-90 to 90
Example
59.3
lonnumberrequired
Longitude of the origin, in degrees.
Format
double
Range
-180 to 180
Example
18.1
radiusnumberrequired
Maximum distance from the origin in meters.
Format
double
Example
5000
wordsstring[]
The words the filter was read from, as they were typed and in the order they were typed.
The targets read instead where a document holds no value on the field, in order, as the fallback of the target the request named. Absent when there are none.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
3 properties
fieldstringrequired
The field, as named in the index definition.
Example
"prices.amount"
Clauses that must hold where the number is read: in the same value as the field for a field inside a nested list, and for the document otherwise. Takes what a nested clause takes: field, text, and, or, not and boost. A clause naming a field outside the list returns search:nested:field_not_inside.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
9 types
FieldClausetype: "field"
Matches documents by the value of a single field. The targeted field must be indexed for the requested matcher usage; if it is not configured for that usage, the request returns search:usage_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
fieldstringrequired
Target field, as named in the index definition.
Example
"category"
matchMatcherrequired
Criteria evaluated against the field's values.
Example
{
"value": "fiction"
}
TextClausetype: "text"
Matches query text across one or more fields. Phrase queries operate within a single field and match terms exactly as typed, regardless of field typoTolerance. Fields defined only for autocomplete do not support phrase matching. See text.
Example
{
"type": "text",
"text": "silent spr",
"fields": {
"name": 3,
"description": null
}
}
textstringrequired
The query text to match.
Example
"silent spr"
fieldsmap of number
Object mapping field names to score weights. A field mapped to null uses the weight from its field definition. If omitted, searches all searchable fields, skipping autocomplete-only fields.
matchMatch
Term matching mode. phrase requires terms to appear in exact order and adjacent; user parses search syntax such as quotes and negation.
Default
"all"
Values
"all", "any", "phrase", "user"
joinJoin
How the parts of user text combine: all requires every word and every quoted phrase, any accepts a document that holds one of them. Excluded terms (-word) always apply, and a filter read out of the text is one of the parts. Setting join with any other match returns search:clause:join_unsupported. See Reading what was typed.
Default
"all"
Values
"all", "any"
prefixPrefix
Prefix matching behavior on the final query term. last_token matches the trailing word as a prefix; off requires an exact word match.
Default
"last_token"
Values
"last_token", "off"
Typo tolerance handling. auto follows each field's typoTolerance configuration; off disables typo tolerance for the clause.
Default
"auto"
Values
"auto", "off"
slopinteger
Number of intervening words permitted between terms in a phrase, without changing their relative order. Setting slop above 0 with "match": "all" or "match": "any" returns search:clause:slop_unsupported.
Default
0
Format
int32
relaxRelax
Query relaxation strategy applied only when the query returns zero matches. See Finding something rather than nothing.
Default
"unmatched"
Values
"off", "unmatched", "words"
combineCombine
Scope for multi-field term matching. term evaluates each term across all targeted fields, so terms may appear in different fields; field requires a single field to satisfy match on its own. Ignored by phrase queries.
Default
"term"
Values
"term", "field"
interpretInterpret
Whether parts of user text are read as filters on the fields of the index, given as a mode or as the targets to read on. See Reading numbers and units.
Default
"auto"
KnnClausetype: "knn"
Matches the k nearest documents by vector distance in a specified field, scored by proximity. Cannot be combined with hits (search:hits:knn_unsupported).
Example
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 10,
"filter": [
{
"field": "published",
"match": {
"value": true
}
}
]
}
fieldstringrequired
The vector field to search.
Example
"embedding"
vectornumber[]required
The query vector. Its length must match the dimensions declared in the field definition.
Format
float
kintegerrequired
Number of nearest documents to return, at most EXOFIND_SEARCH_MAX_KNN_K.
Format
int32
filterClause[]
Clauses that documents must satisfy before nearest-neighbor evaluation.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NestedClausetype: "nested"
Matches documents where a single element of a nested object field satisfies all child clauses. A nested clause on a flattened object field returns search:nested:path_not_nested; on a non-object field it returns an error. See nested.
Example
{
"type": "nested",
"path": "variants",
"clauses": [
{
"field": "variants.color",
"match": {
"value": "red"
}
},
{
"field": "variants.price",
"match": {
"type": "range",
"lt": 20
}
}
]
}
pathstringrequired
Name of the nested object field.
Example
"variants"
clausesClause[]
Clauses evaluated within a single nested object value, naming fields by their dotted path. An empty array matches any document where the object field is present. May contain field, text, knn, and, or, not and boost; a clause that only means something for whole documents, such as another nested or a fuse, returns search:nested:clause_unsupported.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
scoreScore
Scoring mode for aggregating matching nested values. Only applies when scoring clauses exist within the nested clause.
Default
"max"
Values
"max", "min", "avg", "total"
AndClausetype: "and"
Matches documents where all child clauses match.
Example
{
"type": "and",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "published",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, all of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
OrClausetype: "or"
Matches documents where at least one child clause matches.
Example
{
"type": "or",
"clauses": [
{
"field": "category",
"match": {
"value": "fiction"
}
},
{
"field": "category",
"match": {
"value": "poetry"
}
}
]
}
clausesClause[]required
Child clauses, at least one of which must match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
NotClausetype: "not"
Matches documents where no child clause matches.
Example
{
"type": "not",
"clauses": [
{
"field": "discontinued",
"match": {
"value": true
}
}
]
}
clausesClause[]required
Child clauses, none of which may match.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
BoostClausetype: "boost"
Increases the relevance score of documents that satisfy child clauses without excluding non-matching documents.
Example
{
"type": "boost",
"weight": 2,
"clauses": [
{
"field": "featured",
"match": {
"value": true
}
}
]
}
weightnumberrequired
Multiplier applied to matching documents. Values greater than 1 increase score; values between 0 and 1 decrease score. Leaving it out, or setting it below 0 or to a non-finite number, returns search:clause:weight_out_of_range.
Format
float
Example
2
clausesClause[]required
Clauses required to apply the boost weight.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
FuseClausetype: "fuse"
Matches documents across several rankings, scored and merged by rank. Documents are scored by the sum of weight / (rankConstant + rank) across the rankings that reached them. Because the clause reads only result positions, scores from different scales (such as BM25 text relevance and vector similarity) combine without normalization. Matches at most depth results per ranking. See fuse.
Example
{
"type": "fuse",
"depth": 200,
"rankConstant": 60,
"rankings": [
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
]
},
{
"clauses": [
{
"type": "knn",
"field": "embedding",
"vector": [
0.1,
0.2
],
"k": 200
}
],
"weight": 0.5
}
],
"filter": [
{
"field": "inStock",
"match": {
"value": true
}
}
]
}
rankingsFuseRanking[]required
Rankings to run and merge. Specifying fewer than two rankings returns search:clause:rankings_too_few.
Example
{
"clauses": [
{
"type": "text",
"text": "waterproof jacket",
"fields": {
"name": null
}
}
],
"weight": 0.5
}
depthinteger
Number of results read from each ranking. Pagination cannot exceed the merged list, similar to k in a knn clause. Must be at least 1, and at most EXOFIND_SEARCH_MAX_FUSE_DEPTH.
Default
100
Format
int32
rankConstantnumber
Constant added to each rank before it is inverted. Lower values increase the weight of the highest-ranked results in each ranking; higher values flatten the difference across ranks, giving more weight to documents found by multiple rankings. Must be above 0.
Default
60
Format
float
filterClause[]
Clauses that narrow every ranking before it is cut to depth. A knn clause inside a ranking applies filter entries as a pre-filter, ensuring the vector ranking returns k results. Clauses placed beside the fuse clause filter the merged list after each ranking is cut to depth.
Example
{
"field": "category",
"match": {
"value": "fiction"
}
}
Targets read instead, in order, where the document holds no value on this one - a product with no price on the customer's list is read on the store's list. Every target of the chain must declare the same unit; one in another unit returns search:interpret:fallback_unit_mismatch.
Example
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "customer"
}
}
],
"fallback": [
{
"field": "prices.amount",
"when": [
{
"field": "prices.list",
"match": {
"value": "store"
}
}
]
}
]
}
textstring
The text that was left once the words of the filters were taken out. Empty when everything typed was read.
Example
"shoes"
generationstring
Name of the generation that answered. A request that names the index answers from the generation that is live when it arrives, so add @ and this name to the index name to send a later request to the same data. See Names and generations.
Example
"2"
freshnessstring
A freshness token for the state the answer came from: the generation, its commit, and the version of the search settings. Pass it as freshness.atLeast on a later request, and that request is answered from this state or a later one whichever node it lands on. Opaque; pass it back unchanged. See Freshness.
Example
"AQoIcHJvZHVjdHMSATIYBw"
tookMsnumber
Execution time for the explanation in milliseconds, including fractions of one. An explanation compiles and runs the search the way a search does, so it costs what a search costs.
Format
double
Example
1.208
400
The request is not a valid search, or the index declares no primary key so a hit cannot be named.
ErrorResponse

The body of every failed request. Error codes use colon-separated namespaces such as index:field:name_invalid, are stable across API versions, and are never renamed or reused, so clients match on code rather than on message. See Errors.

codestring
Identifies the failure type. For validation failures, this is validation and the individual problems are listed in errors. For all other failures, this matches the code of the single entry in errors.
Example
"validation"
messagestring
Human-readable message for log output. Match on code rather than on message. When a validation failure contains one problem, this is that problem's message. When it contains several, it reads Request contains N errors.
Example
"Request contains 2 errors"
All problems found in the request. A validation failure reports every field with a problem, so a caller can fix them in one pass rather than one request at a time.
Example
{
"code": "index:field:primary_key:multiple_unsupported",
"message": "Field `id` is marked as a primary key and multiple, primary keys can not have multiple values",
"path": "id"
}
4 properties
codestring
The error code identifying this specific problem.
Example
"index:field:primary_key:multiple_unsupported"
messagestring
Human-readable description of this problem.
Example
"Field `id` is marked as a primary key and multiple, primary keys can not have multiple values"
pathstring
Location of the offending value in the request, such as fields.title or documents[1].nonexistent. Names join with ., one element of a list reads [n] counted from zero, and a key of a free-form map such as metadata goes in brackets and double quotes when it holds a dot or a bracket, as metadata["build.sha"]. A field inside an object field carries its own dotted path, so a path here reaches a field the same way a query does. Omitted when the problem applies to the request as a whole. See API conventions.
Example
"id"
argumentsmap of string
The values the message was rendered with, so a client can render a message of its own from the code.
1 property
<key>string
Error codes
request:value_required
A part of the request that needs a value carries none. The `path` names it.
search:clause:field_required
A `field` clause does not name the field to match.
search:clause:match_required
A `field` clause does not say what to look for in the field.
search:clause:text_required
A `text` clause carries no text to search for.
search:clause:path_required
A `nested` clause does not name the object field to match inside.
search:clause:vector_required
A `knn` clause carries no vector to find the neighbours of.
search:clause:k_out_of_range
The `k` of a `knn` clause is missing, below one, or above `EXOFIND_SEARCH_MAX_KNN_K`.
search:clause:weight_out_of_range
The `weight` of a `boost` clause is missing, below zero or not a finite number.
search:clause:slop_out_of_range
The `slop` of a `text` clause is below zero.
search:clause:slop_unsupported
A `text` clause sets `slop` without matching as a phrase. Set `match` to `phrase`, or to `user`.
search:clause:join_unsupported
A `text` clause sets `join` without matching what somebody typed. Set `match` to `user`, or say `all` or `any` in `match` itself.
search:clause:rankings_too_few
A `fuse` clause holds fewer than two rankings to fuse.
search:clause:ranking_empty
A ranking of a `fuse` clause holds nothing to rank by.
search:clause:rank_constant_out_of_range
The `rankConstant` of a `fuse` clause is not a number above zero.
search:clause:depth_out_of_range
The `depth` of a `fuse` clause is below one result, or above `EXOFIND_SEARCH_MAX_FUSE_DEPTH`.
search:clause:interpret_fields_required
The `interpret` of a `text` clause names no target field. Name at least one, or use `auto` or `off`.
search:clause:interpret_when_unsupported
The `when` of an `interpret` target holds a `nested`, `knn` or `fuse` clause.
search:matcher:value_required
A matcher carries no value to look for.
search:matcher:range_empty
A range matcher carries no bound.
search:matcher:range_conflicting
A range matcher combines `gte` with `gt`, or `lte` with `lt`.
search:matcher:origin_required
A distance matcher carries no `lat` and `lon` to measure from.
search:matcher:radius_required
A distance matcher does not say how far from the origin values may be.
search:filter:clause_unsupported
A clause under `filters` is neither a `field` nor a `nested` clause. A clause that scopes the whole search belongs in `query`.
search:filter:scoring_unsupported
A clause under `filters` affects the score. Move it out of `filters`.
search:sort:field_required
A `sort` entry does not name the field to sort by.
search:sort:origin_required
A `sort` entry that orders by distance carries no `lat` and `lon` to measure from.
search:limit_out_of_range
`limit` is below zero or above `EXOFIND_SEARCH_MAX_LIMIT`.
search:offset_out_of_range
`offset` is below zero.
search:paging_conflicting
The request combines more than one of `offset`, `after` and `before`.
search:paging_too_deep
`offset` plus `limit` reaches past `EXOFIND_SEARCH_MAX_PAGE_DEPTH`.
search:cursor:invalid
`after` or `before` carries a cursor this engine did not hand out.
search:cursor:sort_mismatch
A cursor is used under a different `sort` than the one it was handed out under.
search:pages:without_limit
`pages` is asked for without a `limit` above zero.
search:pages:without_offset
`pages` is asked for from a `next` or `previous` cursor, which carries no page number.
search:pages:max_out_of_range
The `max` of `pages` is not above zero.
search:clauses_too_many
The query holds more clauses than the node allows.
search:clauses_too_deep
The query nests deeper than the node allows.
search:facet:field_required
A facet does not name the field to count.
search:facet:name_invalid
A facet is keyed by a blank name. Leave `name` out to key the counts by the field.
search:facet:name_duplicate
Two facets are keyed by the same name.
search:facet:limit_out_of_range
The `limit` of a facet asks for more values than the node allows, or for none.
search:facet:depth_out_of_range
The `depth` of a facet counts more levels of a tree than the node allows, or none.
search:facet:path_invalid
The `path` of a facet is blank. Leave it out to count from the top of the tree.
search:facet:range_empty
A bucket of a facet carries no bound.
search:facet:ranges_required
A facet counts into buckets and lists none. Leave `ranges` out to count one value at a time.
search:facet:ranges_too_many
A facet counts into more buckets than the node allows.
search:facet:ranges_conflicting
A facet combines `ranges` with `limit` or `order`. A facet with `ranges` answers one count per bucket, in the order the buckets are given.
search:facet:ranges_with_tree
A facet combines `ranges` with `path` or `depth`. Those count one level of a tree, and `ranges` counts buckets.
search:facet:exclude_filters_invalid
An entry of `excludeFilters` is blank.
search:highlight:fields_required
`highlight` names no field to highlight.
search:highlight:field_required
An entry of the fields to highlight is blank.
search:highlight:fragments_out_of_range
The number of fragments to highlight is not above zero.
search:highlight:length_out_of_range
The length a highlighted fragment aims for is outside 1 to 10000 characters.
search:matched:fields_required
`matched` names no object field to answer matched values for.
search:matched:field_required
An entry of the fields to answer matched values for is blank.
search:matched:fields_empty
A `matched` entry asks for only some fields of the values and names none.
search:matched:field_not_inside
A `matched` entry names a field that is not inside its object field.
search:matched:limit_out_of_range
A `matched` entry asks for more values per field than the node allows, or for none.
search:hits:path_required
`hits` does not name the object field whose matched values are the hits.
search:hits:fields_empty
`hits` asks for only some fields of the values and names none.
search:hits:field_not_inside
`hits` names a field that is not inside the object field it stands for.
search:hits:when_clause_unsupported
A clause under `hits.when` is neither a `field` nor a `nested` clause.
search:hits:when_scoring_unsupported
A clause under `hits.when` affects the score. Clauses that score belong in `query`.
search:hits:when_sort_unsupported
A search whose hits are chosen by `hits.when` is ordered by a field. Order it by score.
search:hits:sort_unsupported
A search whose hits are the values of an object field is ordered by distance.
search:hits:knn_unsupported
A search whose hits are the values of an object field holds a `knn` clause.
search:hits:matched_unsupported
A search whose hits are the values of an object field also asks for `matched`.
search:hits:highlight_field_not_inside
A search whose hits are the values of an object field highlights a field that is not inside those values.
search:signal:field_required
A signal does not name the field to read its value from.
search:signal:shape_invalid
A signal is not exactly one of `saturation`, `decay` and `linear`.
search:signal:pivot_out_of_range
The `pivot` of a saturation signal is not a number above zero.
search:signal:half_life_out_of_range
The `halfLife` of a decay signal is not a number of seconds above zero.
search:signal:ceiling_out_of_range
The `ceiling` of a linear signal is not a number above zero.
search:signal:weight_out_of_range
The `weight` of a signal is below zero.
search:signal:mode_without_signals
`signalsMode` is given without `signals`.
search:rescore:window_required
A `rescore` block does not say how many of the best results the second pass reaches.
search:rescore:window_out_of_range
The `window` of a `rescore` block is below one or above `EXOFIND_SEARCH_MAX_RESCORE_WINDOW`.
search:rescore:window_too_small
`offset` plus `limit` reaches past the `window` of a `rescore` block.
search:rescore:empty
A `rescore` block holds neither a boost nor a signal to reorder by.
search:rescore:weight_out_of_range
The `weight` of a `rescore` block is below zero.
search:rescore:hits_unsupported
A search whose hits are the values of an object field also asks to `rescore`.
search:locale_unsupported
The request names a locale this engine has no rules for.
index:no_primary_key
The index declares no primary key, so a hit cannot be named.
search:explain:key_required
The request carries no `key`, so it names no hit to explain.
search:explain:index_out_of_range
`index` is below zero, so it names no value of the `hits` path.
search:field_unknown
A clause, sort or facet names a field the index does not have.
search:usage_unsupported
A clause, sort or facet uses a field in a way the definition does not enable for it.
search:value_invalid
A matcher is given a value of the wrong kind for the type of its field.
search:matcher:type_unsupported
A matcher is used on a field whose type cannot answer it.
search:no_searchable_fields
A text clause names no fields and the index has none defined for matching.
search:nested:path_not_nested
A `nested` clause names a path whose values are flattened.
search:nested:field_not_inside
A clause inside a `nested` clause names a field outside its path.
search:nested:field_outside
A clause outside a `nested` clause names a field inside a nested list.
search:nested:clause_unsupported
A `nested` clause holds a clause that cannot run against a single value, such as `fuse`.
search:interpret:unit_required
An `interpret` target names a field that is not a number field or declares no `unit`.
search:interpret:fallback_unit_mismatch
A `fallback` target declares another unit than the target it stands in for.
search:source_not_kept
`fields` names something only the document copy can answer, and the index keeps none.
search:facet:range_invalid
A range bucket has `to` at or below `from`.
search:hits:facet_unsupported
A facet of a search with `hits` names a field inside another object than the `hits` path.
search:hits:path_not_nested
The `hits` path names an object field that is not in `nested` mode.
search:matched:field_not_nested
A `matched` field is an object field that is not in `nested` mode.
search:sort:nested_unsupported
A sort names a field inside a nested list in a way its values cannot be ordered.
search:cursor:stale
The cursor was taken under this sort, but the values it carries no longer fit how the index defines the sort. Start from the first page.
search:clause:k_required
A `knn` clause carries no `k`.
search:freshness:invalid
The freshness token is not one the engine issued. Pass a token back unchanged.
search:freshness:version_unsupported
The freshness token was issued in a format version this node does not read. The `version` argument carries it; send the request to a node of the release that issued the token.
search:freshness:index_mismatch
The freshness token is of another index than the one in the path. The `index` argument carries the index the token is of.
401
The request carries no credential this node accepts. Absent, malformed, unknown and lapsed keys are all answered alike, so a refusal cannot be used to find out which keys exist. The response carries WWW-Authenticate: Bearer.
ErrorResponse

The body of every failed request. Error codes use colon-separated namespaces such as index:field:name_invalid, are stable across API versions, and are never renamed or reused, so clients match on code rather than on message. See Errors.

codestring
Identifies the failure type. For validation failures, this is validation and the individual problems are listed in errors. For all other failures, this matches the code of the single entry in errors.
Example
"validation"
messagestring
Human-readable message for log output. Match on code rather than on message. When a validation failure contains one problem, this is that problem's message. When it contains several, it reads Request contains N errors.
Example
"Request contains 2 errors"
All problems found in the request. A validation failure reports every field with a problem, so a caller can fix them in one pass rather than one request at a time.
Example
{
"code": "index:field:primary_key:multiple_unsupported",
"message": "Field `id` is marked as a primary key and multiple, primary keys can not have multiple values",
"path": "id"
}
4 properties
codestring
The error code identifying this specific problem.
Example
"index:field:primary_key:multiple_unsupported"
messagestring
Human-readable description of this problem.
Example
"Field `id` is marked as a primary key and multiple, primary keys can not have multiple values"
pathstring
Location of the offending value in the request, such as fields.title or documents[1].nonexistent. Names join with ., one element of a list reads [n] counted from zero, and a key of a free-form map such as metadata goes in brackets and double quotes when it holds a dot or a bracket, as metadata["build.sha"]. A field inside an object field carries its own dotted path, so a path here reaches a field the same way a query does. Omitted when the problem applies to the request as a whole. See API conventions.
Example
"id"
argumentsmap of string
The values the message was rendered with, so a client can render a message of its own from the code.
1 property
<key>string
Error codes
auth:unauthenticated
The request carries no credential this node accepts.
403
The API key does not have the search permission.
ErrorResponse

The body of every failed request. Error codes use colon-separated namespaces such as index:field:name_invalid, are stable across API versions, and are never renamed or reused, so clients match on code rather than on message. See Errors.

codestring
Identifies the failure type. For validation failures, this is validation and the individual problems are listed in errors. For all other failures, this matches the code of the single entry in errors.
Example
"validation"
messagestring
Human-readable message for log output. Match on code rather than on message. When a validation failure contains one problem, this is that problem's message. When it contains several, it reads Request contains N errors.
Example
"Request contains 2 errors"
All problems found in the request. A validation failure reports every field with a problem, so a caller can fix them in one pass rather than one request at a time.
Example
{
"code": "index:field:primary_key:multiple_unsupported",
"message": "Field `id` is marked as a primary key and multiple, primary keys can not have multiple values",
"path": "id"
}
4 properties
codestring
The error code identifying this specific problem.
Example
"index:field:primary_key:multiple_unsupported"
messagestring
Human-readable description of this problem.
Example
"Field `id` is marked as a primary key and multiple, primary keys can not have multiple values"
pathstring
Location of the offending value in the request, such as fields.title or documents[1].nonexistent. Names join with ., one element of a list reads [n] counted from zero, and a key of a free-form map such as metadata goes in brackets and double quotes when it holds a dot or a bracket, as metadata["build.sha"]. A field inside an object field carries its own dotted path, so a path here reaches a field the same way a query does. Omitted when the problem applies to the request as a whole. See API conventions.
Example
"id"
argumentsmap of string
The values the message was rendered with, so a client can render a message of its own from the code.
1 property
<key>string
Error codes
auth:forbidden
The key is accepted but does not hold the `search` permission.
404
The index does not exist, the key has no permissions on it, or the explanation names something the index does not hold.
ErrorResponse

The body of every failed request. Error codes use colon-separated namespaces such as index:field:name_invalid, are stable across API versions, and are never renamed or reused, so clients match on code rather than on message. See Errors.

codestring
Identifies the failure type. For validation failures, this is validation and the individual problems are listed in errors. For all other failures, this matches the code of the single entry in errors.
Example
"validation"
messagestring
Human-readable message for log output. Match on code rather than on message. When a validation failure contains one problem, this is that problem's message. When it contains several, it reads Request contains N errors.
Example
"Request contains 2 errors"
All problems found in the request. A validation failure reports every field with a problem, so a caller can fix them in one pass rather than one request at a time.
Example
{
"code": "index:field:primary_key:multiple_unsupported",
"message": "Field `id` is marked as a primary key and multiple, primary keys can not have multiple values",
"path": "id"
}
4 properties
codestring
The error code identifying this specific problem.
Example
"index:field:primary_key:multiple_unsupported"
messagestring
Human-readable description of this problem.
Example
"Field `id` is marked as a primary key and multiple, primary keys can not have multiple values"
pathstring
Location of the offending value in the request, such as fields.title or documents[1].nonexistent. Names join with ., one element of a list reads [n] counted from zero, and a key of a free-form map such as metadata goes in brackets and double quotes when it holds a dot or a bracket, as metadata["build.sha"]. A field inside an object field carries its own dotted path, so a path here reaches a field the same way a query does. Omitted when the problem applies to the request as a whole. See API conventions.
Example
"id"
argumentsmap of string
The values the message was rendered with, so a client can render a message of its own from the code.
1 property
<key>string
Error codes
search:explain:document_not_found
Nothing is indexed under `key`.
search:explain:value_not_found
The document holds no value along the `hits` path at `index`.
index:not_found
The node holds no such index, or the key has no permission on it.
409
The index cannot be searched right now.
ErrorResponse

The body of every failed request. Error codes use colon-separated namespaces such as index:field:name_invalid, are stable across API versions, and are never renamed or reused, so clients match on code rather than on message. See Errors.

codestring
Identifies the failure type. For validation failures, this is validation and the individual problems are listed in errors. For all other failures, this matches the code of the single entry in errors.
Example
"validation"
messagestring
Human-readable message for log output. Match on code rather than on message. When a validation failure contains one problem, this is that problem's message. When it contains several, it reads Request contains N errors.
Example
"Request contains 2 errors"
All problems found in the request. A validation failure reports every field with a problem, so a caller can fix them in one pass rather than one request at a time.
Example
{
"code": "index:field:primary_key:multiple_unsupported",
"message": "Field `id` is marked as a primary key and multiple, primary keys can not have multiple values",
"path": "id"
}
4 properties
codestring
The error code identifying this specific problem.
Example
"index:field:primary_key:multiple_unsupported"
messagestring
Human-readable description of this problem.
Example
"Field `id` is marked as a primary key and multiple, primary keys can not have multiple values"
pathstring
Location of the offending value in the request, such as fields.title or documents[1].nonexistent. Names join with ., one element of a list reads [n] counted from zero, and a key of a free-form map such as metadata goes in brackets and double quotes when it holds a dot or a bracket, as metadata["build.sha"]. A field inside an object field carries its own dotted path, so a path here reaches a field the same way a query does. Omitted when the problem applies to the request as a whole. See API conventions.
Example
"id"
argumentsmap of string
The values the message was rendered with, so a client can render a message of its own from the code.
1 property
<key>string
Error codes
index:no_live_generation
The index has no live generation. Promote one and send the request again.
503
The explanation did not finish on the node.
ErrorResponse

The body of every failed request. Error codes use colon-separated namespaces such as index:field:name_invalid, are stable across API versions, and are never renamed or reused, so clients match on code rather than on message. See Errors.

codestring
Identifies the failure type. For validation failures, this is validation and the individual problems are listed in errors. For all other failures, this matches the code of the single entry in errors.
Example
"validation"
messagestring
Human-readable message for log output. Match on code rather than on message. When a validation failure contains one problem, this is that problem's message. When it contains several, it reads Request contains N errors.
Example
"Request contains 2 errors"
All problems found in the request. A validation failure reports every field with a problem, so a caller can fix them in one pass rather than one request at a time.
Example
{
"code": "index:field:primary_key:multiple_unsupported",
"message": "Field `id` is marked as a primary key and multiple, primary keys can not have multiple values",
"path": "id"
}
4 properties
codestring
The error code identifying this specific problem.
Example
"index:field:primary_key:multiple_unsupported"
messagestring
Human-readable description of this problem.
Example
"Field `id` is marked as a primary key and multiple, primary keys can not have multiple values"
pathstring
Location of the offending value in the request, such as fields.title or documents[1].nonexistent. Names join with ., one element of a list reads [n] counted from zero, and a key of a free-form map such as metadata goes in brackets and double quotes when it holds a dot or a bracket, as metadata["build.sha"]. A field inside an object field carries its own dotted path, so a path here reaches a field the same way a query does. Omitted when the problem applies to the request as a whole. See API conventions.
Example
"id"
argumentsmap of string
The values the message was rendered with, so a client can render a message of its own from the code.
1 property
<key>string
Error codes
index:closed
The request raced the index being closed to free local resources. Sending it again reopens the index.
search:timeout
The search behind the explanation ran for longer than `EXOFIND_SEARCH_TIMEOUT`.
search:freshness:unavailable
The node did not reach the state the freshness token asks for within `EXOFIND_SEARCH_FRESHNESS_WAIT`. Send the request again after the `Retry-After` header.

Authorization

Permission
search
Checked on
The index the path names
Roles
reader, writer, admin
Anonymous
Served to a request carrying no credential where the node sets an anonymous key.

An API key sent as a bearer token, such as Authorization: Bearer exok_4ff6b760264c1918_ePQcdT1O9HSATZoXfDbT8hhHGsP9VpZH. A key carries grants that pair permissions with index patterns; the permission each endpoint needs is named beside it. Nodes running with EXOFIND_AUTH_MODE=none accept requests without a credential, and a node with EXOFIND_AUTH_ANONYMOUS_KEY set serves requests that carry none with the permissions of that key.

Exofind is built by Level Four AB and is available under the Apache License 2.0.