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.
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
- Název produktu mapuj jako search_as_you_type. Elasticsearch vytvoří shingle a prefixová podpole optimalizovaná pro průběžné doplňování.
- Analyzér přizpůsob jazyku a otestuj malá písmena i diakritiku. Agresivní stemming může u krátkého prefixu překvapit.
- Do dokumentu přidej keyword filtry pro trh, stav a dostupnost a číselnou popularitu pro omezené zvýhodnění.
- 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
- Použij multi_match typu bool_prefix nad name_suggest a jeho _2gram a _3gram poli. Nezačínej dotazem *text*.
- Filtruj jen aktivní a viditelné produkty. Rozhodni, zda nedostupný produkt úplně skrýt, nebo pouze snížit jeho pořadí.
- 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ří.
- 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
- Začni hledat například od dvou znaků a vstup debounce na 150 až 250 ms. Hodnoty dolaď podle měření, ne pocitu.
- 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.
- Krátce cachuj běžné anonymní prefixy, ale klíč musí obsahovat jazyk, trh a další viditelnostní kontext.
- 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í.
-
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 -
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.
-
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í.