Skip to content

Offer search query ​

On Offer, Search is GET /offer/{store}/search. One request starts on ShowSearch.vue, finds document ids in Typesense, loads the models, and shows SearchHitData cards.

When Typesense runs ​

You type a query or change a filter. The page calls router.get on FrontRoute.SearchStore.

ShowSearch asks ShowSearchRequest for StorefrontSearchData. That object holds the terms after stop-word removal, the selected types, the sort, and the filters. SearchStorefront turns the filters into a Typesense filter_by string through SearchDocumentsFilter.

QuerySearchDocuments searches the search collection. It queries title, keywords, description, and body. When the terms are at least three characters, it also sends a vector query from Embeddings. Typesense returns document ids only.

HydrateSearchDocuments loads those ids as Product, Provider, ContentTranslation, and ChallengeTranslation rows, in the same order. ShowSearch eager-loads the card relations, maps each row to SearchHitData, and Inertia renders the page.

When Typesense does not run ​

SearchStorefront returns an empty paginator when no result types are selected, or when Recommended for you has no recommended ids. That path does not call Typesense.

Out of scope ​

The chart is one storefront query. It does not show how documents are indexed, or backoffice search. Similar products on a product page are in Similar products.