Elasticsearch di completamento automatico di Guida

Opster Team

Ultimo Aggiornamento: Mar 2021

Opster Team

Marzo 2021

oltre alla lettura di questa guida si consiglia di eseguire il Elasticsearch Salute Check-Up. Rileva i problemi e migliora le prestazioni di Elasticsearch analizzando le dimensioni del frammento, i threadpool, la memoria, le istantanee, le filigrane del disco e altro ancora.Il check-up Elasticsearch è gratuito e non richiede installazione.

Oltre a leggere questa guida, è necessario eseguire l’analizzatore di log di ricerca di Opster se si desidera migliorare le prestazioni di ricerca in Elasticsearch.

Con l’analizzatore di Opster, puoi facilmente individuare le ricerche lente e capire cosa ha portato ad aggiungere ulteriore carico al tuo sistema. Riceverai consigli personalizzati su come ridurre la latenza di ricerca e migliorare le prestazioni di ricerca. Lo strumento è gratuito e richiede solo 2 minuti per l’esecuzione.

Background

In questo articolo parleremo di come evitare errori critici di prestazioni, perché la soluzione predefinita Elasticsearch non la taglia e importanti considerazioni sull’implementazione.
Tutti i siti Web moderni hanno funzionalità di completamento automatico (ricerca durante la digitazione) sulla barra di ricerca per migliorare l’esperienza utente (nessuno vuole digitare interi termini di ricerca…). È imperativo che il completamento automatico sia più veloce della ricerca standard, poiché l’intero punto di completamento automatico è quello di iniziare a mostrare i risultati mentre l’utente sta digitando. Se la latenza è alta, porterà a un’esperienza utente subpar.

Di seguito è riportato un esempio di ricerca di completamento automatico sul famoso sito di domande e risposte, Quora. Questo è un buon esempio di completamento automatico: durante la ricerca di elasticsearch auto, i seguenti post iniziano a mostrare nella loro barra di ricerca.

 Questa immagine ha un attributo alt vuoto; il suo nome file è GtQyiRxpwyXg_NmYFLO5mSlG5Zwa-k6a-s2AIi-uP3EsEP8dRql8eR0CrfGZlN_PIcUMU9K-GDZ2WfEASrxgxGSXiE37pzwNNffIcjq-xlBA982DZe8TQJFzYaLl8WojdrdlVNjQ

Si noti che nei risultati della ricerca ci sono domande relative alle funzionalità di auto-scaling, auto-tag e completamento automatico di Elasticsearch. Gli utenti possono inoltre digitare alcuni caratteri in più per affinare i risultati della ricerca.

Vari approcci per il completamento automatico in Elasticsearch / search durante la digitazione

Ci sono diversi modi per implementare la funzione di completamento automatico che rientrano ampiamente in quattro categorie principali:

  1. Tempo di indice
  2. Tempo di query
  3. Suggerimento di completamento
  4. Database di ricerca come tipo

1. Tempo di indice

A volte i requisiti sono solo completamento prefisso o completamento infisso nel completamento automatico. Non è raro vedere l’implementazione del completamento automatico utilizzando gli analizzatori personalizzati, che comporta l’indicizzazione dei token in modo tale da corrispondere al termine di ricerca dell’utente.
Se continuiamo con il nostro esempio, stiamo esaminando i documenti che consistono in “elasticsearch autocomplete”, “elasticsearch auto-tag”, “elasticsearch auto scaling” e “elasticsearch automatically”. L’analizzatore predefinito non genererà alcun token parziale per” completamento automatico”,” autoscaling “e” automaticamente “e la ricerca” auto ” non produrrebbe alcun risultato.
Per superare il problema di cui sopra, edge ngram o n-gram tokenizer vengono utilizzati per indicizzare i token in Elasticsearch, come spiegato nel documento ufficiale ES e search time analyzer per ottenere i risultati di completamento automatico.
L’approccio di cui sopra utilizza le query di corrispondenza, che sono veloci in quanto utilizzano un confronto di stringhe (che utilizza hashcode), e ci sono token relativamente meno esatti nell’indice.

2. Il tempo di query

Il completamento automatico può essere ottenuto modificando le query di corrispondenza in query di prefisso. Mentre le query di corrispondenza funzionano su token (indicizzati) a token (token di query di ricerca), le query di prefisso (come suggerisce il loro nome) corrispondono a tutti i token che iniziano con i token di ricerca, quindi il numero di documenti (risultati) corrispondenti è alto.

Come spiegato, la query prefix non è una corrispondenza esatta del token, piuttosto è basata su corrispondenze di caratteri nella stringa che è molto costosa e recupera molti documenti. Elasticsearch utilizza internamente un tipo di struttura dati B+ tree per memorizzare i suoi token. È utile comprendere gli interni della struttura dati utilizzata dagli indici invertiti e in che modo diversi tipi di query influiscono sulle prestazioni e sui risultati.

3. Suggerimento di completamento

Questo è utile se si forniscono suggerimenti per termini di ricerca come su e-commerce e siti web di ricerca di hotel. La barra di ricerca offre suggerimenti di query, al contrario dei suggerimenti che appaiono nei risultati di ricerca effettivi, e dopo aver selezionato uno dei suggerimenti forniti dal suggeritore di completamento, fornisce i risultati della ricerca.

Come menzionato nel documento ufficiale ES è ancora in uso in sviluppo e non recupera i risultati della ricerca in base ai termini di ricerca come spiegato nel nostro esempio.

Internamente funziona indicizzando i token che gli utenti vogliono suggerire e non in base a documenti esistenti.

Esempi di codice

1. Tempo indice

Definizione indice:

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

Query di ricerca:

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

2. Tempo di query

Definizione dell’indice:

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

Query di ricerca:

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

4. Ricerca mentre si digita

Si tratta di un tipo di dati rilasciato di recente (rilasciato in 7.2) destinato a facilitare le query di completamento automatico senza previa conoscenza dell’impostazione personalizzata dell’analizzatore. Elasticsearch memorizza internamente i vari token (edge n-gram, shingles) dello stesso testo e quindi può essere utilizzato sia per il completamento del prefisso che dell’infisso. Può essere conveniente se non ha familiarità con le funzionalità avanzate di Elasticsearch, che è il caso con gli altri tre approcci. Non è necessaria molta configurazione per farlo funzionare con casi di utilizzo semplici, e esempi di codice e maggiori dettagli sono disponibili sui documenti ES ufficiali.

Considerazione delle prestazioni

Quasi tutti gli approcci di cui sopra funzionano bene su set di dati più piccoli con carichi di ricerca più leggeri, ma quando si ha un indice massiccio che ottiene un numero elevato di query di suggerimento automatico, lo SLA e le prestazioni delle query di cui sopra sono essenziali . I seguenti punti elenco dovrebbero aiutarti a scegliere l’approccio più adatto alle tue esigenze:

  • I token Ngram o edge Ngram aumentano significativamente le dimensioni dell’indice, fornendo i limiti di min e max gram in base all’applicazione e alla capacità. La pianificazione risparmierebbe notevoli problemi nella produzione.
  • Consentire query di prefisso vuote o di pochi caratteri può far apparire tutti i documenti in un indice e ha il potenziale per abbattere un intero cluster. È sempre un’idea migliore fare query di prefisso solo sull’ennesimo termine (su pochi campi) e limitare i caratteri minimi nelle query di prefisso.
  • ES fornito “cerca durante la digitazione” tipo di dati tokenizes il testo di input in vari formati. Poiché si tratta di una soluzione fornita da ES che non può affrontare tutti i casi d’uso, è sempre un’idea migliore controllare tutti i casi d’angolo richiesti per il tuo caso d’uso aziendale. Inoltre, come accennato, tokenizza i campi in più formati che possono aumentare la dimensione dell’archivio dell’indice Elasticsearch.
  • Il completamento suggerisce l’indicizzazione separata dei suggerimenti e parte di esso è ancora in modalità di sviluppo e non affronta il caso d’uso del recupero dei risultati della ricerca.
  • Gli approcci di tempo di indice sono veloci in quanto vi è meno sovraccarico durante il tempo di query, ma comportano un lavoro più grugnito, come la riindicizzazione, la pianificazione della capacità e l’aumento del costo del disco. Il tempo di query è facile da implementare, ma le query di ricerca sono costose. Questo è molto importante da capire come la maggior parte del tempo gli utenti hanno bisogno di scegliere uno di loro e per capire questo trade-off può aiutare con molti problemi di risoluzione dei problemi di prestazioni.

Varie

Nella maggior parte dei casi, le soluzioni fornite da ES per il completamento automatico non soddisfano requisiti specifici per l’azienda o hanno impatti sulle prestazioni su sistemi di grandi dimensioni, in quanto non si tratta di soluzioni one-size-fits-all. La maggior parte delle volte, gli utenti devono modificare per ottenere la soluzione ottimizzata (più performante e fault-tolerant) e gestire i problemi di prestazioni di Elasticsearch non è banale. Opster aiuta a rilevarli in anticipo e fornisce supporto e gli strumenti necessari per eseguire il debug e prevenirli in modo efficace.

Per ulteriori letture si prega di rivedere :

  1. Opster’s guide on increased search latency to gain some insights and improve performance.
  2. Guida di Opster su come utilizzare search slow logs su come eseguire rapidamente il debug dei problemi di ricerca lenta

Migliorare le prestazioni di Elasticsearch

Eseguire l’analisi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.