Elasticsearch Ghid de completare automată

echipa Opster

Ultima actualizare: Mar 2021

echipa Opster

martie 2021

pe lângă citirea acestui ghid, vă recomandăm să efectuați controlul de sănătate Elasticsearch. Acesta va detecta probleme și de a îmbunătăți performanța Elasticsearch prin analizarea dimensiunile cioburi, threadpools, memorie, instantanee, filigrane disc și mai mult.Verificarea Elasticsearch este gratuită și nu necesită instalare.

pe lângă citirea acestui ghid, ar trebui să rulați analizorul Jurnalului de căutare Opster dacă doriți să îmbunătățiți performanța căutării în Elasticsearch.

cu Analyzer Opster, puteți localiza cu ușurință căutări lente și să înțeleagă ceea ce a dus la adăugarea de sarcină suplimentară pentru sistemul dumneavoastră. Veți primi recomandări personalizate pentru a reduce latența căutării și pentru a îmbunătăți performanța căutării. Instrumentul este gratuit și durează doar 2 minute pentru a rula.

Background

în acest articol vom acoperi cum să evitați greșelile critice de performanță, de ce soluția implicită Elasticsearch nu o taie și considerente importante de implementare.
toate site-urile moderne au funcții de completare automată (căutare pe măsură ce tastați) în bara de căutare pentru a îmbunătăți experiența utilizatorului (nimeni nu dorește să introducă Termeni de căutare întregi…). Este imperativ ca completarea automată să fie mai rapidă decât căutarea standard, deoarece întregul punct al completării automate este să începeți să afișați rezultatele în timp ce utilizatorul tastează. Dacă latența este mare, aceasta va duce la o experiență de utilizator subpar.

mai jos este un exemplu de căutare automată pe celebrul site de întrebări și răspunsuri, Quora. Acesta este un bun exemplu de completare automată: când căutați elasticsearch auto, următoarele postări încep să apară în bara de căutare.

 această imagine are un atribut alt gol; numele fișierului este GtQyiRxpwyXg_NmYFLO5mSlG5Zwa-k6a-s2AIi-uP3EsEP8dRql8eR0CrfGZlN_PIcUMU9K-GDZ2WfEASrxgxGSXiE37pzwNNffIcjq-xlBA982DZe8TQJFzYaLl8WojdrdlVNjQ

rețineți că în rezultatele căutării există întrebări legate de caracteristicile de auto-scalare, auto-tag și completare automată ale Elasticsearch. Utilizatorii pot introduce în continuare câteva caractere pentru a rafina rezultatele căutării.

diverse abordări pentru completarea automată în Elasticsearch / căutare pe măsură ce tastați

există mai multe moduri de a implementa caracteristica de completare automată care se încadrează în general în patru categorii principale:

  1. Index timp
  2. interogare timp
  3. completare suggester
  4. căutare-ca-tine-tip de baze de date

1. Index time

uneori cerințele sunt doar finalizarea prefixului sau finalizarea infixului în completarea automată. Nu este neobișnuit să vedeți implementarea completă automată folosind analizoarele personalizate, care implică indexarea jetoanelor în așa fel încât să se potrivească cu termenul de căutare al utilizatorului.
dacă continuăm cu exemplul nostru, ne uităm la documente care constau în “elasticsearch autocomplete”, “elasticsearch auto-tag”, “elasticsearch Auto scaling” și “elasticsearch automat”. Analizorul implicit nu va genera jetoane parțiale pentru “completare automată”, “autoscaling” și “automat”, iar căutarea “auto” nu va da rezultate.
pentru a depăși problema de mai sus, edge Ngram sau n-gram tokenizer sunt utilizate pentru a indexa jetoanele în Elasticsearch, așa cum se explică în Es doc oficial și analizorul de timp de căutare pentru a obține rezultatele de completare automată.
abordarea de mai sus folosește interogări de potrivire, care sunt rapide, deoarece folosesc o comparație de șiruri (care folosește hashcode) și există jetoane relativ mai puțin exacte în index.

2. Timpul de interogare

completarea automată poate fi realizată prin schimbarea interogărilor de potrivire în interogări de prefix. În timp ce interogările de potrivire funcționează pe jeton (indexat) la jeton (token-uri de interogare de căutare) se potrivesc, interogările de prefix (așa cum sugerează și numele lor) se potrivesc cu toate jetoanele începând cu jetoanele de căutare, prin urmare numărul de documente (rezultate) potrivite este ridicat.

după cum sa explicat, prefix query nu este o potrivire exactă a jetonului, mai degrabă se bazează pe potrivirile de caractere din șir, care este foarte costisitor și aduce o mulțime de documente. Elasticsearch utilizează intern un tip de arbore B + de structură de date pentru a-și stoca jetoanele. Este util să înțelegeți componentele interne ale structurii de date utilizate de indicii inversați și modul în care diferite tipuri de interogări influențează performanța și rezultatele.

3. Completare suggester

acest lucru este util dacă furnizați sugestii pentru termeni de căutare, cum ar fi pe site-urile de comerț electronic și de căutare hotelieră. Bara de căutare oferă sugestii de interogare, spre deosebire de sugestiile care apar în rezultatele căutării reale și, după selectarea uneia dintre sugestiile furnizate de complement suggester, oferă rezultatele căutării.

după cum se menționează în documentul oficial ES, acesta este încă în curs de dezvoltare și nu aduce rezultatele căutării pe baza termenilor de căutare, așa cum se explică în exemplul nostru.

intern funcționează prin indexarea jetoanelor pe care utilizatorii doresc să le sugereze și nu pe baza documentelor existente.

mostre de cod

1. Timp Index

definiție Index:

{ "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 } } }}

interogare de căutare:

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

2. Timp de interogare

definiție Index:

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

interogare de căutare:

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

4. Căutați pe măsură ce tastați

este un tip de date lansat recent (lansat în 7.2) destinat să faciliteze interogările de completare automată fără cunoștințe prealabile despre configurarea analizorului personalizat. Elasticsearch stochează intern diferitele jetoane (edge n-gram, zona zoster) ale aceluiași text și, prin urmare, pot fi utilizate atât pentru finalizarea prefixului, cât și pentru infix. Poate fi convenabil dacă nu este familiarizat cu caracteristicile avansate ale Elasticsearch, ceea ce este cazul celorlalte trei abordări. Nu este necesară o configurație prea mare pentru a funcționa cu cazuri simple de utilizare, iar eșantioanele de cod și mai multe detalii sunt disponibile pe documentele oficiale ES.

luarea în considerare a performanței

aproape toate abordările de mai sus funcționează bine pe seturi de date mai mici, cu sarcini de căutare mai ușoare, dar atunci când aveți un indice masiv care obține un număr mare de sugestii automate interogări, atunci SLA și performanța interogărilor de mai sus sunt esențiale . Următoarele puncte glonț ar trebui să vă ajute în alegerea abordarea cea mai potrivită pentru nevoile dumneavoastra:

  • jetoanele Ngram sau edge Ngram cresc semnificativ dimensiunea indicelui, oferind limitele min și max gram în funcție de aplicație și capacitate. Planificarea ar economisi probleme semnificative în producție.
  • permiterea interogărilor prefixelor goale sau puține caractere poate afișa toate documentele dintr-un index și are potențialul de a reduce un întreg cluster. Este întotdeauna o idee mai bună de a face interogare prefix numai pe termen n(pe câteva câmpuri) și limita caracterele minime în interogări prefix.
  • ES furnizat “căutare pe măsură ce tastați” tip de date tokenizes textul de intrare în diferite formate. Deoarece este o soluție furnizată de ES, care nu poate aborda toate cazurile de utilizare, este întotdeauna o idee mai bună să verificați toate cazurile de colț necesare pentru cazul dvs. de utilizare a afacerii. În plus, după cum sa menționat, tokenizează câmpurile în mai multe formate, ceea ce poate crește dimensiunea magazinului Index Elasticsearch.
  • finalizarea sugerează indexarea separată a sugestiilor, iar o parte din aceasta este încă în modul de dezvoltare și nu abordează cazul de utilizare a preluării rezultatelor căutării.
  • abordările de timp ale indexului sunt rapide, deoarece există mai puține cheltuieli generale în timpul interogării, dar implică mai multă muncă, cum ar fi reindexarea, planificarea capacității și costul crescut al discului. Timpul de interogare este ușor de implementat, dar interogările de căutare sunt costisitoare. Acest lucru este foarte important pentru a înțelege ca cele mai multe ori utilizatorii trebuie să aleagă una dintre ele și să înțeleagă acest compromis poate ajuta cu multe probleme de performanță de depanare.

diverse

în majoritatea cazurilor, ES a furnizat soluții pentru completarea automată fie nu abordează cerințele specifice afacerii, fie au impact asupra performanței asupra sistemelor mari, deoarece acestea nu sunt soluții unice. De cele mai multe ori, utilizatorii trebuie să ajusteze pentru a obține soluția optimizată (mai performantă și tolerantă la erori), iar rezolvarea problemelor de performanță Elasticsearch nu este banală. Opster ajută la detectarea lor timpurie și oferă asistență și instrumentele necesare pentru depanarea și prevenirea eficientă a acestora.

pentru lecturi suplimentare vă rugăm să revedeți :

  1. Ghidul Opster privind latența crescută a căutării pentru a obține câteva informații și pentru a îmbunătăți performanța.
  2. Ghidul Opster despre cum să utilizați jurnalele lente de căutare despre cum să depanați rapid problemele de căutare lentă

îmbunătățiți performanța Elasticsearch

rulați analiza

Lasă un răspuns

Adresa ta de email nu va fi publicată.