Product · Search

The right result from the first letter.

Typo-tolerant instant search with facets, synonyms and hybrid semantic matching, plus the controls a merchandiser needs — pins, boosts, schedules — and a ladder that rescues queries before they return nothing.

What happens when a query finds nothing

A real typo, step by step. The ladder stops at the first step that finds results and tells you which one it was.

кросовки найк 44
  1. As typed — 0 results
  2. Learned correction — visitors who typed this went on to “кроссовки найк 44” and clicked — results found
  3. Keyboard layout — would repair “rhjccjdrb”-style typing
  4. Transliteration — would try “krossovki”
  5. More typos — would allow two typos per word
  6. Drop the last word — would search “кросовки найк”
  7. Any word — would match any of the words

Runs on the first page only. Category, availability and access filters are never relaxed. The step that worked is returned in the response and logged.

Finding

What happens between the keystroke and the result list.

Instant, typo-tolerant

Prefix search with typo tolerance; model numbers and SKUs are matched exactly instead of being “corrected”.

Synonyms

Synonym sets per index, plus suggestions mined from queries that returned nothing.

Hybrid semantic search

Keyword precision and embedding similarity blended in one query, for queries that describe rather than name.

Natural-language filters

“Under 10 000”, colours and sizes in the query become filters instead of competing words.

Image and voice

Search by photo over product images and by voice from a phone.

Geo

Radius filters and sorting by distance for stores, listings and pickup points.

Navigating

Facets, including hierarchical

Live counts, numeric ranges, facet search and category trees with parent counts.

Zero-result ladder

Graph-learned correction → normalise → fix keyboard layout → transliterate → widen typo tolerance → drop the last word → match any word. Your filters are never dropped, and the answer says which step worked.

Wrong keyboard layout

“rjhcjdrb” is recognised as “кроссовки” and searched again before the visitor sees an empty page.

Controlling

Ranking is a business decision. These are the levers, all without a deploy.

Merchandising rules

Pin, bury, boost, exclude, redirect and diversify — scoped by query, locale or device, with start and end dates.

Relevance evaluation

Golden query sets scored with nDCG, MRR, precision and recall, so a ranking change is measured, not guessed.

Analytics

Top queries, zero-result queries, clicks, conversions and slow queries per index.

A/B testing

Split live traffic between two ranking profiles with sticky per-visitor assignment and compare clicks and conversions.

Specifications

Search platform
AACSearch
Query length
up to 1,000 characters
Results per page
up to 250 (plan limit applies)
Deep pagination
up to page 100
Facet values per field
up to 100
Documents per import request
500
Rule changes take effect
within 60 seconds, no reindex
Languages
stemming and stop words per field locale, incl. Russian

Before you start

  • A product feed, a site with a sitemap, or a 1C-Bitrix / Shopify / WordPress store
  • Access to your server code to mint embed session tokens (one endpoint)
  • A list of your top 20–50 queries, to build a golden set for measuring changes

How to start

  1. 1

    Create an index and load data

    Upload JSON or CSV, crawl a sitemap, or connect a store. Field roles (searchable, facet, sort) are suggested from the data.

  2. 2

    Embed the widget

    Mint a short-lived session token on your server and drop in one script. The page never sees an API key.

    <div id="aacsearch"></div>
    <script src="https://app.example.com/embed/v1/aacsearch.js"
            data-aac-token="SESSION_TOKEN"
            data-aac-target="#aacsearch"></script>
  3. 3

    Or call the API

    The same search from your own UI through the REST API or the TypeScript and Python SDKs.

    const client = new AACSearchClient({ apiKey: process.env.AAC_KEY });
    const res = await client.search("products", { q: "кросовки найк", per_page: 20 });

Questions