Praktický návod

Jak vytvořit našeptávač produktů v e-shopu

Po několika znacích vrať malou sadu rychlých a relevantních návrhů, ne zmenšenou kopii celé výsledkové stránky.

25 minut · Elasticsearch

Nejdřív stručně

Našeptávač má jiný úkol než fulltext

Autocomplete reaguje během psaní. Potřebuje nízkou latenci, omezený počet návrhů a prefixové hledání optimalizované v indexu, ne drahý wildcard přes celý text.

Elasticsearch nabízí typ search_as_you_type i completion suggester. Pro produktové názvy s běžným relevance scoringem je dobrý výchozí bod search_as_you_type a bool_prefix dotaz.

Připrav si

Co budeš potřebovat

Rozhodni, co je návrh: produkt, značka, kategorie nebo historie dotazů. Každý typ má jiné zdroje a pravidla.

  • Produktové názvy, značky, kategorie, dostupnost, popularitu a stabilní URL výsledku.
  • Reálné prefixy uživatelů včetně diakritiky, překlepů, mobilního psaní a frází bez výsledku.
  • Cíl odezvy, například p95 do 100 ms na backendu, minimální délku vstupu a maximální počet návrhů.
  • Pravidla viditelnosti podle trhu, jazyka, tenantu a dostupnosti produktu.

Kroky 1 až 3

Optimalizuj index, dotaz i rozhraní

Rychlost nevznikne jen debounce na frontendu. Prefix musí být efektivně reprezentovaný už ve vyhledávacím indexu.

1. Připrav pole pro psaní za běhu

  1. Název produktu mapuj jako search_as_you_type. Elasticsearch vytvoří shingle a prefixová podpole optimalizovaná pro průběžné doplňování.
  2. Analyzér přizpůsob jazyku a otestuj malá písmena i diakritiku. Agresivní stemming může u krátkého prefixu překvapit.
  3. Do dokumentu přidej keyword filtry pro trh, stav a dostupnost a číselnou popularitu pro omezené zvýhodnění.
  4. Neindexuj každou možnou kombinaci ručně jako n-gram bez měření. Více tokenů zvětšuje index i cenu aktualizací.
"name_suggest": {"type": "search_as_you_type", "max_shingle_size": 3}
Oficiální dokumentace k search_as_you_type

2. Dotazuj prefix a omez výsledky

  1. Použij multi_match typu bool_prefix nad name_suggest a jeho _2gram a _3gram poli. Nezačínej dotazem *text*.
  2. Filtruj jen aktivní a viditelné produkty. Rozhodni, zda nedostupný produkt úplně skrýt, nebo pouze snížit jeho pořadí.
  3. Vrať třeba osm návrhů s ID, názvem, obrázkem, cenou a URL. Velké popisy a agregace do našeptávače nepatří.
  4. Relevanci stav nejdřív na textové shodě, potom opatrně přidej popularitu, dostupnost nebo obchodní pravidlo s horním limitem vlivu.
multi_match type=bool_prefix fields=name_suggest,name_suggest._2gram,name_suggest._3gram size=8
Oficiální dokumentace k multi_match

3. Omez provoz z prohlížeče

  1. Začni hledat například od dvou znaků a vstup debounce na 150 až 250 ms. Hodnoty dolaď podle měření, ne pocitu.
  2. Předchozí request při dalším znaku zruš a odpověď přiřaď ke konkrétnímu dotazu. Pomalejší stará odpověď nesmí přepsat novou.
  3. Krátce cachuj běžné anonymní prefixy, ale klíč musí obsahovat jazyk, trh a další viditelnostní kontext.
  4. Návrhy escapuj, podporuj klávesnici a oznam stav asistivním technologiím. Text z indexu nevkládej jako důvěryhodné HTML.
minLength=2; debounce=200ms; size=8; cancelPrevious=true
WAI-ARIA vzor pro combobox

Krok 4

Ověř rychlost i kvalitu návrhů

Našeptávač musí zůstat užitečný při rychlém psaní, souběhu i nečekaném pořadí odpovědí.

  1. Přehraj skutečné prefixy

    Pro nejčastější začátky slov ulož očekávané produkty a měř pořadí, zero-result rate i p95 latenci.

    php bin/phpunit --filter Autocomplete
  2. Simuluj rychlé psaní

    Pošli několik dotazů těsně za sebou a vrať odpovědi v opačném pořadí. UI musí zobrazit pouze výsledek posledního vstupu.

  3. Otestuj přístupnost a nebezpečný text

    Projdi návrhy klávesnicí, screen readerem a produktem s HTML znaky v názvu. Název se musí zobrazit jako text.

Když to zlobí

Nejčastější chyby

Wildcard dotaz zatěžuje cluster

Prefix indexuj vhodným field typem a použij bool_prefix nebo completion suggester. Vedoucí wildcard přes velký text není dobrý základ našeptávače.

Starší odpověď přepisuje novější návrhy

Request zruš nebo označ pořadovým ID a před vykreslením ověř, že stále odpovídá aktuálnímu vstupu.

Popularita vytlačí přesnou shodu

Omez její váhu a chraň textovou relevanci testy. Obchodní boost nesmí udělat z našeptávače reklamní seznam bez vztahu k prefixu.

Návrhy ukazují skrytý produkt

Viditelnost filtruj přímo v dotazu a synchronizuj změnu stavu do indexu. Nespoléhej jen na kontrolu po návratu hitů.

Hotovo

Našeptávač je rychlý, relevantní a bezpečný.

Elasticsearch teď odpovídá optimalizovaným prefixovým dotazem a rozhraní posílá jen omezený provoz. Kvalitu dál řiď skutečnými prefixy, kliknutími a latencí.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.