Elasticsearch Autocomplete Guide

Opster Team

Poslední aktualizace: Mar 2021

Opster Team

Březen 2021

kromě čtení této příručky doporučujeme spustit kontrolu stavu Elasticsearch. Detekuje problémy a zlepší výkon Elasticsearch analýzou velikostí střepů, threadpoolů, paměti, snímků, vodoznaků na disku a dalších.Kontrola Elasticsearch je zdarma a nevyžaduje žádnou instalaci.

kromě čtení této příručky byste měli spustit analyzátor protokolu vyhledávání Opster, pokud chcete zlepšit výkon vyhledávání v Elasticsearch.

s analyzátorem Opster můžete snadno najít pomalé vyhledávání a pochopit, co vedlo k tomu, že do vašeho systému přidali další zatížení. Obdržíte přizpůsobená doporučení, jak snížit latenci vyhledávání a zlepšit výkon vyhledávání. Nástroj je zdarma a trvá jen 2 minuty.

pozadí

v tomto článku se budeme zabývat tím, jak se vyhnout kritickým chybám při výkonu, proč výchozí řešení Elasticsearch neřeže, a důležité aspekty implementace.
všechny moderní webové stránky mají funkce automatického doplňování (vyhledávání při psaní) na vyhledávací liště, aby se zlepšila uživatelská zkušenost (nikdo nechce psát celé hledané výrazy…). Je nezbytné, aby automatické doplňování bylo rychlejší než standardní vyhledávání, protože celý bod automatického doplňování je začít zobrazovat výsledky, zatímco uživatel píše. Pokud je latence vysoká, povede to k dílčímu uživatelskému zážitku.

níže je uveden příklad automatického doplňování vyhledávání na slavném webu Quora. Toto je dobrý příklad automatického doplňování: při hledání elasticsearch auto se ve vyhledávacím panelu začnou zobrazovat následující příspěvky.

tento obrázek má prázdný atribut alt; jeho název souboru je GtQyiRxpwyXg_NmYFLO5mSlG5Zwa-k6a-s2AIi-uP3EsEP8dRql8eR0CrfGZlN_PIcUMU9K-GDZ2WfEASrxgxGSXiE37pzwNNffIcjq-xlBA982DZe8TQJFzYaLl8WojdrdlVNjQ

Všimněte si, že ve výsledcích vyhledávání jsou otázky týkající se funkcí automatického škálování, automatického značení a automatického doplňování Elasticsearch. Uživatelé mohou dále zadat několik dalších znaků pro upřesnění výsledků vyhledávání.

různé přístupy pro automatické dokončování v Elasticsearch / search při psaní

existuje několik způsobů, jak implementovat funkci automatického dokončování, které obecně spadají do čtyř hlavních kategorií:

  1. Index time
  2. Query time
  3. dokončení suggester
  4. Search-as-you-type databáze

1. Index time

někdy jsou požadavky pouze dokončení předpony nebo dokončení infixu v automatickém dokončení. Není neobvyklé vidět implementaci automatického doplňování pomocí vlastních analyzátorů, což zahrnuje indexování tokenů tak, aby odpovídalo vyhledávacímu výrazu uživatele.
pokud budeme pokračovat v našem příkladu, podíváme se na dokumenty, které se skládají z “elasticsearch autocomplete”, “elasticsearch auto-tag”, “elasticsearch auto scaling” a “elasticsearch automaticky”. Výchozí analyzátor nebude generovat žádné dílčí tokeny pro “automatické dokončování”, “automatické kalibrace” a “automaticky” a hledání “auto” by nepřineslo žádné výsledky.
k překonání výše uvedeného problému se edge ngram nebo n-gram tokenizer používají k indexování tokenů v Elasticsearch, jak je vysvětleno v oficiálním es doc a analyzátoru času vyhledávání, aby se získaly výsledky automatického doplňování.
výše uvedený přístup používá dotazy shody, které jsou rychlé, protože používají porovnání řetězců (které používá hashcode) a v indexu jsou poměrně méně přesné tokeny.

2. Čas dotazu

Automatické doplňování lze dosáhnout změnou dotazů shody na prefixové dotazy. Zatímco dotazy na shodu pracují na tokenu (indexovaném) na tokenu (tokeny vyhledávacích dotazů), prefixové dotazy (jak jejich název napovídá) odpovídají všem tokenům počínaje vyhledávacími tokeny, a proto je počet shodných dokumentů (výsledků) vysoký.

jak je vysvětleno, prefix query není přesná shoda tokenů, spíše je založen na shodách znaků v řetězci, což je velmi nákladné a načte mnoho dokumentů. Elasticsearch interně používá B + stromovou datovou strukturu k ukládání svých tokenů. Je užitečné porozumět vnitřnostem datové struktury používané obrácenými indexy a tomu, jak různé typy dotazů ovlivňují výkon a výsledky.

3. Dokončení suggester

to je užitečné, pokud poskytujete návrhy pro hledané výrazy, jako na e-commerce a hotel vyhledávání webových stránek. Vyhledávací lišta nabízí návrhy dotazů, na rozdíl od návrhů, které se objevují ve skutečných výsledcích vyhledávání, a po výběru jednoho z návrhů poskytnutých dokončením suggester, poskytuje výsledky vyhledávání.

jak je uvedeno v oficiálním es doc, stále se používá ve vývoji a nepřináší výsledky vyhledávání na základě hledaných výrazů, jak je vysvětleno v našem příkladu.

interně funguje indexováním tokenů, které uživatelé chtějí navrhnout, a nikoli na základě existujících dokumentů.

ukázky kódu

1. Čas indexu

definice indexu:

{ "settings": { "analysis": { "filter": { "autocomplete_filter": { "type": "edge_ngram", "min_gram": 1, "max_gram": 10 } }, "analyzer": { "autocomplete": { "type": "custom", "tokenizer": "standard", "filter": } } } }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "autocomplete", "search_analyzer": "standard" :-> note search_analyzer } } }}

vyhledávací dotaz:

{ "query": { "match": { "movie_name": { "query": "avengers inf" } } }}

2. Čas dotazu

definice indexu:

{ "mappings": { "properties": { "movie_name": { "type": "text" } } }}

vyhledávací dotaz:

{ "query": { "bool": { "should": } }}

4. Vyhledávání při psaní

jedná se o nedávno vydaný datový typ (vydaný v 7.2), který má usnadnit automatické doplňování dotazů bez předchozí znalosti nastavení vlastního analyzátoru. Elasticsearch interně ukládá různé tokeny (edge n-gram, šindele) stejného textu, a proto může být použit pro dokončení předpony i infixu. To může být výhodné, pokud nejsou obeznámeni s pokročilými funkcemi Elasticsearch, což je případ s ostatními třemi přístupy. Není zapotřebí mnoho konfigurace, aby to fungovalo s jednoduchými případy použití, a ukázky kódu a další podrobnosti jsou k dispozici na oficiálních dokumentech ES.

úvaha o výkonu

téměř všechny výše uvedené přístupy fungují dobře na menších datových sadách s lehčím vyhledávacím zatížením, ale když máte masivní index, který získává vysoký počet dotazů na automatické návrhy, pak je zásadní SLA a výkon výše uvedených dotazů . Následující odrážky by vám měly pomoci při výběru přístupu, který nejlépe vyhovuje vašim potřebám:

  • Ngram nebo edge Ngram tokeny zvýšit velikost indexu výrazně, poskytuje limity min a max gram podle aplikace a kapacity. Plánování by ušetřilo značné problémy ve výrobě.
  • umožnění prázdných nebo několika dotazů na prefix znaků může vyvolat všechny dokumenty v indexu a má potenciál svrhnout celý cluster. Vždy je lepší udělat prefixový dotaz pouze na n-tém termínu (na několika polích) a omezit minimální znaky v prefixových dotazech.
  • ES poskytuje datový typ “hledat při psaní” tokenizes vstupní text v různých formátech. Vzhledem k tomu, že se jedná o řešení poskytované ES, které nemůže řešit všechny případy použití,je vždy lepší zkontrolovat všechny rohové případy potřebné pro váš obchodní případ použití. Kromě toho, jak již bylo zmíněno, tokenizuje pole ve více formátech, které mohou zvýšit velikost úložiště indexu Elasticsearch.
  • dokončení navrhuje Samostatně indexovat návrhy a část z nich je stále ve vývojovém režimu a neřeší případ použití načítání výsledků vyhledávání.
  • přístupy k časovému indexu jsou rychlé, protože během času dotazu je méně režijních nákladů, ale zahrnují více práce s gruntem, jako je opětovné indexování, plánování kapacity a zvýšené náklady na disk. Čas dotazu se snadno implementuje, ale vyhledávací dotazy jsou nákladné. To je velmi důležité pochopit, protože většinu času uživatelé potřebují vybrat jeden z nich a pochopit tento kompromis může pomoci s mnoha problémy s výkonem řešení problémů.

různé

ve většině případů es poskytuje řešení pro automatické doplňování buď neřeší požadavky specifické pro podniky, nebo mají dopad na výkon velkých systémů, protože se nejedná o univerzální řešení. Uživatelé se většinou musí vyladit, aby získali optimalizované řešení (výkonnější a odolnější vůči chybám) a řešení problémů s výkonem Elasticsearch není triviální. Opster je pomáhá včas odhalit a poskytuje podporu a potřebné nástroje k jejich účinnému ladění a prevenci.

pro další čtení prosím zkontrolujte :

  1. průvodce Opster o zvýšené latenci vyhledávání, abyste získali nějaké poznatky a zlepšili výkon.
  2. průvodce Opsterem o tom, jak používat pomalé protokoly vyhledávání o tom, jak rychle ladit problémy s pomalým vyhledáváním

zlepšit výkon Elasticsearch

spusťte analýzu

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.