The trace

Why an answer is what it is: every step a search, a page or a product lookup took, with what it decided.

releasestringRequired

The id of a release. A release is named by its content and never changes.

snapshotstringRequired

The id of a catalog snapshot. A snapshot is named by its content and never changes.

A release was being published while this request was answered; either release's live settings, such as its synonyms or typo settings, may have applied.

The index run this was answered from and how it took the release live: switched in, with settings, or built.

derivedarray of strings

The release's files the live run derived from its catalog because the release leaves them out, such as categories.json with the facets or ranking.json with the sort options. They answered as if written; the run report gives the reason for each of their settings.

The request as it was answered: with the time it arrived at, and the channel and locale it was answered in. Replayed as a search test or in the preview, against the same release and snapshot, it gives the same response.

One entry per step, in the order the steps ran.

How long the Query API took for the request. A page's listing leaves it to the page's trace, which measures the whole page.

The steps of a search

One entry per step, in the order the steps ran.

normalize

The query as the engine's tokenizer reads it.

querystringRequired
normalizedstringRequired

resolve

What the query named, and the text that is left.

resolutionobjectRequired

The categories, brands and values a query named, and the text that is left.

5 fields
categorystring

The id of a category node, such as wohnen/sofas: the merchant's id of a category entity.

The detected filters, such as { "color": "grey", "width": { "lte": 220 } }.

textstringRequired
completebooleanRequired

Nothing is left as text.

What a relaxed search left out of what the query named, each as the filter it would have been, with its labels, so a storefront can say what the results leave out. Empty unless the response is relaxed.

Each word or phrase that became the category or a filter, with the entry it matched.

keptarray of objects

Words that matched something and stay text all the same, each with the reason.

Words that matched something and stay text.

3 fields
wordsstringRequired
reasonstringRequired

Why they stay text, such as "they name the category Sofas and the brand Sofa Company alike".

What they could have meant.

What the words named in a field the shopper chose themselves: their choice replaces it, so the words neither filter nor are searched, as "graues" after the shopper ticked blue on "graues Sofa".

What the query named as its chips read in the request's locale, held to or left out: the category and one filter per field, each with its labels, such as the category's title.

rules

Every candidate rule of one phase, in rule order, with the one state it ended in.

phasestringRequired
3 values

Rules that resolve terms or remove words, before the query is resolved.

Rules that redirect; the highest one ends planning.

Rules that filter, hide, pin, boost, bury, order sections and place banners.

rulesarray of objectsRequired

What became of one candidate rule.

8 fields
rulestringRequired

A rule's id, unique per release, such as home/out-of-stock-last. It appears in traces, tests, diffs and filter chips, so it is visible to storefronts and holds no secrets.

descriptionstringRequired

The rule's line from rules.json, so the trace reads without the release.

originobject

Where an imported rule or overlay came from.

2 fields
importstringRequired

What it was imported from, such as the previous search's export.

refstringRequired
statestringRequired
5 values

Every effect took place.

Some effects were moved or skipped; each says why.

The rule matched, but a higher rule's redirect ended planning.

The condition failed.

Disabled, or outside its schedule.

matchedstring

The part of the condition that matched, as a sentence.

failedstring

The part of the condition that failed, as a sentence.

reasonstring

Why the rule was inactive or not applied.

effectsarray of objects

What became of one effect.

10 fields
effectstringRequired

One of resolve, rewrite, redirect, filter, hide, pin, boost, bury, sections or place.

outcomestringRequired

One of applied, moved or skipped.

sectionstring

The section it acted in, by type: an effect that reaches the sections of several types is traced once for each.

targetstring

What the effect was about, as a sentence, such as "brand is bosch", "product:SOFA-LUND-3" or, for a placement, the banner's title.

slotstring

Placements: where on the page the banner sits.

3 values

Above the results, on the first page. Banners of several rules stand in rule order, the highest first.

Among the tiles, before the one at its position, on the page that holds that tile.

After the results, on the last page. Banners of several rules stand in rule order, the highest first.

positioninteger

Pins and grid placements: the position asked for.

placedinteger

Pins: the slot the plan expects it to take. A higher pin that fails a filter frees its slot only in the engine, so where a hit landed is the rank step's. Grid placements: the position it took.

strengthstring

One of slight, medium or strong.

reasonstring

Why the effect was moved or skipped, such as "skipped: limit", or for a placement this page does not show, why not, such as "position 30 is on page 2".

engineobject

How the engine carried it out; for developers.

The engine rule that executed a pin, boost or bury, and the weight it gave.

2 fields
rulestringRequired
weightnumber

sort

The order the page lists its hits in, and where that choice came from.

sortstringRequired

The sort option; relevance is built in.

sourcestringRequired

Where the order of a page came from.

5 values

The shopper chose it; it wins over any default.

The request has words, which rank by relevance unless the shopper chose another order.

The nearest category node that sets a default sort, up the tree from the page's category.

The default layout of categories.json.

Nothing sets a default sort: relevance, which is built in.

categorystring

The category whose node sets the sort, when source is category.

reasonstringRequired

Why, as a sentence, such as "The category wohnen/sofas sets price_desc as its default sort."

plan

The searches the engine is asked for, one per section, and the type the page lists.

listedobjectRequired

The type a page lists, whose section pages through the results, carries the facets and takes what the query named.

2 fields
typestringRequired

The code of an entity type, such as product, category or a merchant's own store.

reasonstringRequired

Why, as a sentence, such as "The category werkstatt/bremsenservice holds 7 service and no product entities."

searchesarray of objectsRequired

One search of the plan, as the engine receives it; for developers.

9 fields
typestringRequired

The section it fills.

indexstringRequired

The engine index it searches.

textstringRequired

The text it searches for.

filterstring

The engine filter, when the search is narrowed.

sortarray of strings

The engine sort, when the request chose one.

pageintegerRequired
per_pageintegerRequired

Hits it returns; none for a search that only counts.

facetsarray of strings

The engine fields whose values it counts.

withoutstring

The facet it counts under every filter but that facet's own, so that choosing a value keeps its siblings; its hits are not shown.

execute

The engine's answer, in one multi-search call.

round_trip_msnumberRequired

From sending the call to reading its answer, in milliseconds.

searchesarray of objectsRequired

What the engine answered for one search.

3 fields
indexstringRequired
totalintegerRequired

How many entities match in all, counted exactly however many they are.

engine_msintegerRequired

The engine's own time for the search, in milliseconds. It leaves out parsing the filter, so it is no budget.

relax

Nothing matched the resolved search, so it was searched again with less of what the query named.

What the next search leaves out: the category and the filters the query named, one field each.

textstringRequired

The text it searches.

facets

How each facet was counted, and where a count can only be an upper bound.

facetsarray of objectsRequired

How one facet of a section was counted.

9 fields
typestringRequired

The code of an entity type, such as product, category or a merchant's own store.

fieldstringRequired

A field a selector, filter or facet reads: an attribute code, or one of the built-in fields category, brand, price, on_sale, availability, delivery_days and rating.

searchintegerRequired

The search of the plan that counted it, counted from 0.

valuesintegerRequired

The values shown.

limitinteger

The most values the facet carries before more: the layout's limit, or the limit facet_values. None for a facet without a cap: one the request named, and every kind but a list or a swatch.

moreinteger

How many values with results the cap left out.

keptarray of strings

Chosen values the results do not hold, shown with a count of 0 so they can be unchosen.

Why the counts are upper bounds, when they are.

Why a facet's counts can be higher than the tiles a shopper would find. Every other count is exact.

2 fields
multi_selectby: "multi_select"

Several values are chosen in these variant-level fields, and a tile may hold a variant for each: the counts add them up, at most as high as the tiles that have the value in some variant matching the other choices.

1 field
fieldsarray of stringsRequired
free_rangeby: "free_range"

A free range over this variant-level field narrows the results beside a choice in another variant-level field, and one variant may meet the range while another meets the choice.

1 field
fieldstringRequired

A field a selector, filter or facet reads: an attribute code, or one of the built-in fields category, brand, price, on_sale, availability, delivery_days and rating.

histogramobject

The bins of a histogram, which only approximate the distribution. The same however the facet came to be counted, by the page or by a request that named it; a histogram the page left out is in deferred of the step instead.

How a histogram's bars were drawn, which makes them an approximation of the distribution: the bins are a fixed ladder of preferred numbers, each 8 to 15 percent above the one before and the same whatever the catalog holds, so a bar says where products sit, not exactly how many. A tile with several prices counts in every bin one of them falls in, so the bars may add up to more than the tiles, and the chosen range may cut a bin in two. Each count itself follows the rules of any other facet's.

3 fields
binsintegerRequired

How many bins the response lists, those without tiles included.

fromnumberRequired

Where the first bin starts: the ladder's number at or below the cheapest price.

tonumberRequired

Where the last bin ends, exclusive: the ladder's number above the dearest.

deferredarray of strings

The facets the page lists without counting them: those past the limit counted_facets that no choice and no request named, and the facets of a group that none of those reached.

groupsarray of objects

The page's groups of facets and how each was counted.

How a group of facets was counted: all of them or none, since a finder with a facet left out would draw an empty select, and a group is one control that a shopper opens or reads at once.

4 fields
groupstringRequired

The code of a group of facets on a page, such as tyre_size.

facetsarray of stringsRequired

Its facets as the page lists them, in the group's order.

countedbooleanRequired

The page counted every facet of it, or none: it did not count the group.

reasonstringRequired

Why, as a sentence, such as "tyre_size stands at position 7 of the page, within the first 30 facets it counts".

rank

Why each hit of the page sits where it does: the pin that placed it, the boosts and buries that weighed it, and its business score.

sectionsarray of objectsRequired

The hits of one section and why each sits where it does.

2 fields
typestringRequired

The code of an entity type, such as product, category or a merchant's own store.

hitsarray of objectsRequired

One hit and what placed it.

10 fields
entitystringRequired

An entity named with its type, type:id, such as product:SOFA-LUND-3.

variantstring

The merchant's id of an entity, unique per type, such as SOFA-LUND-3. It travels unchanged; OrbSearch never rewrites it.

positionintegerRequired

Its place on the page, counted from 1.

pinnedstring

The rule whose pin put it here.

sponsoredobject

The campaign of that pin, when it is a paid one.

The campaign a paid placement belongs to: { "campaign": "Michelin spring" }.

1 field
campaignstringRequired

The merchant's name for it, which the campaign report counts by.

The boosts and buries that weighed it, each with the factor it gave.

criteriaarray of objects

What the engine compared it by, in the order it compares, its business score among them.

One criterion the engine compared hits by, with this hit's value. Hits are compared criterion by criterion in the order the engine ranks by, and the first criterion two hits differ in decides which comes first.

7 fields
wordscriterion: "words"

How many of the query's words it was found by, as typed, through a synonym or with a typo; more come first.

2 fields
matchedintegerRequired
ofintegerRequired
typoscriterion: "typos"

How many typos it took to find those words; fewer come first.

1 field
typosintegerRequired
sortcriterion: "sort"

The sort the request chose, and the hit's value in it; a hit without a value comes last.

4 fields
sortstringRequired

The code of a sort option, such as price_asc. relevance is built in.

bystringRequired

A field of an entity as search and result settings name it: a core field such as title, or an attribute as attributes.<code>; sort options also read signals.<code>.

directionstringRequired

One of asc or desc.

business_scorecriterion: "business_score"

Its business score from 0 to 1; higher comes first.

1 field
scorenumberRequired
proximitycriterion: "proximity"

How close together the query's words stand in it, from 0 to 1; closer comes first.

1 field
scorenumberRequired
fieldscriterion: "fields"

How early among the type's searched fields, and how early in a field, the words were found, from 0 to 1.

1 field
scorenumberRequired
exactnesscriterion: "exactness"

Whether a field holds the query as a whole, starts with it, or neither, from 0 to 1.

2 fields
exactstringRequired
3 values

A field holds exactly the query.

A field starts with the query.

No field holds the query as it was written.

scorenumberRequired
matchedarray of objects

The query's words it was found by, each with the fields it was found in and the synonym it was found through.

A word of the query and how the hit was found by it.

5 fields
wordstringRequired

The word as the engine reads the query.

synonymstring

The synonym it was found through, when the hit holds the synonym and not the word itself.

entrystring

The entry of synonyms.json that leads the word to its synonym, such as de/groups/0; with synonym only.

typostring

The word of the hit it was found by with a typo, as its field writes it, such as Bremsbelag for bremsbelg.

fieldsarray of stringsRequired

The searched fields it was found in, in the type's order, such as title; words holds what the index adds, such as the titles of its categories.

The signals of its business score with their weights, the one that adds the most first.

whyarray of objects

Why it sits here, from the facts above and the rest of the trace, in the order the reasons act.

One reason a hit sits where it does, in a sentence and as data.

2 fields
sentencestringRequired

The reason in a sentence, such as "Pinned to position 1 by the rule “Sommer-Sale”."

becauseobjectRequired
7 fields
pinkind: "pin"

A rule pinned it to its place, which comes before everything else; a paid pin names its campaign, and the sentence calls it a sponsored placement of that campaign.

4 fields
rulestringRequired

A rule's id, unique per release, such as home/out-of-stock-last. It appears in traces, tests, diffs and filter chips, so it is visible to storefronts and holds no secrets.

descriptionstringRequired
positionintegerRequired
sponsoredobject

The campaign a paid placement belongs to: { "campaign": "Michelin spring" }.

1 field
campaignstringRequired

The merchant's name for it, which the campaign report counts by.

weightkind: "weight"

A rule's boost or bury weighed it against the hits beside it.

4 fields
rulestringRequired

A rule's id, unique per release, such as home/out-of-stock-last. It appears in traces, tests, diffs and filter chips, so it is visible to storefronts and holds no secrets.

descriptionstringRequired
effectstringRequired

One of resolve, rewrite, redirect, filter, hide, pin, boost, bury, sections or place.

factornumberRequired
namedkind: "named"

Words of the query named something it is or has, which narrowed the results to it.

6 fields
wordsstringRequired
asobjectRequired

Picks entities (where). Attribute codes and the built-in fields brand, price, on_sale, availability and delivery_days are keys of the same object; category takes is or within.

{ "any": [{ "brand": "bosch" }, { "quality": "oe" }], "not": { "availability": "out_of_stock" } }

entrystringRequired

Where the meaning comes from, such as "the alias "graues" of the color group Grau".

rulestring

A rule's id, unique per release, such as home/out-of-stock-last. It appears in traces, tests, diffs and filter chips, so it is visible to storefronts and holds no secrets.

patternstring
synonymstring

The entry of synonyms.json that let the words name it, such as de/groups/0, when a synonym did.

synonymkind: "synonym"

A word of the query found it only through a synonym, which the entry of synonyms.json holds.

3 fields
wordstringRequired
synonymstringRequired
entrystring

A synonym entry's place in synonyms.json: its language, its kind and its index there, such as de/groups/0, de/one_way/2 or de/never/0. A delete moves the entries after it up, so a write names the draft version it read.

textkind: "text"

How well it matches the query's text, and where.

4 fields
matchedintegerRequired
ofintegerRequired
typosintegerRequired
fieldsarray of stringsRequired
sortkind: "sort"

The sort the request chose orders the page.

4 fields
sortstringRequired

The code of a sort option, such as price_asc. relevance is built in.

bystringRequired

A field of an entity as search and result settings name it: a core field such as title, or an attribute as attributes.<code>; sort options also read signals.<code>.

directionstringRequired

One of asc or desc.

business_scorekind: "business_score"

Its business score orders it among the hits that match as well as it does; signal adds the most to it.

2 fields
scorenumberRequired

One signal of a hit's business score.

assemble

The sections of the response, in order.

sectionsarray of objectsRequired

One section of the response.

4 fields
typestringRequired

The code of an entity type, such as product, category or a merchant's own store.

totalintegerRequired

Why the total is an upper bound, when it is.

Why a facet's counts can be higher than the tiles a shopper would find. Every other count is exact.

2 fields
multi_selectby: "multi_select"

Several values are chosen in these variant-level fields, and a tile may hold a variant for each: the counts add them up, at most as high as the tiles that have the value in some variant matching the other choices.

1 field
fieldsarray of stringsRequired
free_rangeby: "free_range"

A free range over this variant-level field narrows the results beside a choice in another variant-level field, and one variant may meet the range while another meets the choice.

1 field
fieldstringRequired

A field a selector, filter or facet reads: an attribute code, or one of the built-in fields category, brand, price, on_sale, availability, delivery_days and rating.

hitsintegerRequired

How many hits this page shows.

suggest

The suggestions of the autocomplete surface, in order, each with the entry of the catalog dictionary it came from.

suggestionsarray of objectsRequired

One suggestion and where it comes from.

4 fields
textstringRequired
scopestring

The id of a category node, such as wohnen/sofas: the merchant's id of a category entity.

sourcestringRequired

The entry it completes, as a sentence, such as "the word "Ecksofa" of product titles, whose head is the category Sofas".

productsintegerRequired

The products that hold it, which rank it; for a scoped suggestion, those in its category.

A page

How a URL was resolved: each step of the order with what it found; the last one decided.

channelstringRequired

The channel and locale the URL was resolved in.

localestringRequired

A BCP 47 language tag such as de, de-CH or en. A locale falls back along its tag: de-CH to de.

pathstringRequired

The path as it is matched: percent-decoded, in lowercase, without duplicate or trailing slashes.

stepsarray of objectsRequired
2 fields
stepstringRequired

The order a URL is resolved in, then what decides about the page once it is known.

8 values

The legacy table, redirects.json: its exact entries, then its patterns.

The search page's path.

The paths of the catalog's categories and brands.

The path written differently from the page's own, such as in another case or with a trailing slash.

The URL's parameters read as filters, sort and page.

A product by its URL.

Whether search engines may index the page, and its canonical.

What the results change: an empty page, a page past the last, a search that leads elsewhere.

outcomestringRequired

What the step found, in a sentence.

How long the Query API took for the whole page, its listing's search or its product included.

A product

Why a product lookup answered what it did.

releasestringRequired

The id of a release. A release is named by its content and never changes.

snapshotstringRequired

The id of a catalog snapshot. A snapshot is named by its content and never changes.

A release was being published while this request was answered; the product may be the new release's already.

The index run this was answered from and how it took the release live.

derivedarray of strings

The release's files the live run derived from its catalog because the release leaves them out, such as types.json, whose details say which details the product lists.

requestobjectRequired

The request as it was answered, with the channel and locale it was answered in.

A product lookup as it was answered.

4 fields
idstring

The merchant's id of an entity, unique per type, such as SOFA-LUND-3. It travels unchanged; OrbSearch never rewrites it.

urlstring
channelstringRequired

A channel's id, such as de or ch: a market or storefront.

localestringRequired

A BCP 47 language tag such as de, de-CH or en. A locale falls back along its tag: de-CH to de.

indexstringRequired

The engine index the product was read from, which the index run compiled for lookups.

filterstringRequired

The engine filter that found it.

round_trip_msnumberRequired

From sending the lookup to reading its answer, in milliseconds.

Guide: The trace

Detection

Words of the query that became the category or a filter.

wordsstringRequired

The words as the query wrote them, such as graues.

asobjectRequired

What they became, with exactly one field or category, as the filter chip writes it.

entrystringRequired

Where the meaning comes from, as a sentence, such as "the alias "graues" of the color group Grau".

rulestring

The rule that decided what the words mean, when one did.

patternstring

The pattern that read them, when one did: the id of the release's pattern, or the built-in pattern's name.

synonymstring

The entry of synonyms.json that let the words name it, such as de/groups/0: "couch" names the category Sofas through the group of "couch" and "sofa".

SignalScore

One signal of a hit's business score.

signalstringRequired

The code of a signal, such as sales_30d or rating.

The signal as the catalog sends it, when it does.

scorenumberRequired

Normalized to 0..1, the better the higher.

weightnumberRequired

Its weight in the type's business score.

Timings

How long the Query API took for a request, as the server measured it: from the request's arrival to its assembled answer, so writing the answer and the network path to the client come on top. Each time is held against the p95 budget of its kind: one request above it is a warning, and the budget is missed when more than 5 of 100 are. Only the server measures, so a trace assembled anywhere else, such as in a test, has none.

total_msnumberRequired

The whole time in milliseconds, the engine round trips included.

round_trip_msnumberRequired

The engine round trips together, in milliseconds: every call the request sent, a relaxed search's first one included.

own_msnumberRequired

The Query API's own share in milliseconds: the whole time without the engine round trips.

The Query API's own time before its first engine call: reading the request, understanding the query and planning the searches. The rest of own_ms comes after the engine answered. A request that asks the engine nothing has none.

total_budget_msintegerRequired

The budget of the whole time for the request's kind: autocomplete's, or that of a search and a page.

own_budget_msintegerRequired

The budget of the Query API's own share.

WentLive

The index run a response was answered from, how it took its release live, and the offer changes its documents hold. With the release and the snapshot, they name what answered: a replay with the same three gives the same answer.

runintegerRequired
courseobjectRequired

The way a release goes live and why, as data and as a sentence.

offersinteger

The offers revision: the latest batch of offer changes the run's indexes hold, applied on top of its snapshot by the run or written into its indexes since; left out when they hold none.

On this page