Questa funzionalità è possibile a causa di un concetto chiamato logica fuzzy, sfocatura o ricerca sfocata.
Cos'è il confuso?
La logica sfocata o fuzzy si riferisce a una logica matematica che descrive che la verità di un valore può essere un intervallo di numeri tra 0 e 1, dove 1 rappresenta la verità assoluta e 0 rappresenta un falso assoluto.
A differenza della logica booleana con due valori distinti: 0 e 1, Fuzzy Logic accetta una gamma variabile di verità e falsy.
In termini semplici, Fuzziness descrive quanto può essere chiaro un valore. Prendi, ad esempio, un errore di battitura. Come fai a sapere che è un errore di battitura? Valuta le lettere esistenti e determina cosa stava cercando di descrivere la parola.
Nella logica fuzzy, possiamo esprimerlo nell'intervallo 0 e 1. Se un errore di battitura è inferno, è più probabile che descriva ciao o inferno piuttosto che descrivere "umano" o "pomodoro."
Ricerca fuzzy in elasticsearch
Una ricerca fuzzy troverà i valori di corrispondenza in base alla query iniziale in base ai criteri specifici.
ElaSticSearch implementa la sfocatura usando l'algoritmo di distanza di modifica Levenshtein.
La distanza di modifica è il numero totale di variazioni di parole come modifiche, eliminazioni, sostituzioni o trasposte della parola iniziale per raggiungere una parola target.
Come funziona Elasticsearch Fuzzy Search
L'algoritmo è semplice da capire. Inizi prendendo due parole e confrontandole sequenzialmente, carattere per carattere.
Se il personaggio è diverso, si aumenta la distanza tra le parole di una. Quindi determinate il valore della distanza finale tra le lettere.
NOTA: Quanto sopra non descrive l'implementazione matematica dell'algoritmo. Considera il link
Elasticsearch query fuzzy
Una query sfocata non è molto diversa da una normale query di Elasticsarch. Per usarlo, aggiungi il parametro fuzziness alla query di ricerca.
È inoltre possibile aggiungere la massima distanza di Levenshtein da usare nella domanda.
Ottieni kibana_sample_data_ecommerce/_searchEseguiamo una query sfocata per abbinare i termini "uomini" e fissare un valore sfocatura personalizzato nell'esempio sopra.
Di seguito è una risposta di esempio:
Se si abbassa la distanza di modifica, ElasticSearch limiterà la distanza di ricerca, il che porterà a perdere alcuni valori.
Ad esempio, la seguente query con una distanza di modifica di 0.2 non restituirà risultati.
Ottieni kibana_sample_data_ecommerce/_searchLa risposta è come mostrato di seguito:
Parametro fuzziness di Elasticsearch
Come accennato, il parametro fuzziness nella query imposta la distanza massima di modifica Levenshtein o il numero di modifiche.
Possiamo specificare i valori fuzziness come: 0, 1, 2 o auto.
Quando si imposta manualmente la distanza di modifica per le tue domande sfocate, potresti perdere alcuni risultati. ElasticSearch fornisce un valore automatico che consente a Elasticsearch di determinare la distanza di modifica.
Per esempio:
Ottieni kibana_sample_data_ecommerce/_searchSe hai il valore impostato su Auto, Elasticsearch modificherà la distanza in base alla lunghezza del termine di ricerca. È inoltre possibile specificare valori bassi e alti per l'auto come:
AUTO:[Basso] O AUTO:[alto]
Per capire come funziona Fuzziness in Elasticsearch, controlla la documentazione.
Query multi-match fuzzy
È possibile utilizzare Elasticsearch Multi-Query con fuzziness, come mostrato nella query di esempio di seguito:
Ottieni kibana_sample_data_ecommerce/_searchLa risposta per questo è:
Parametri di ricerca fuzzy di Elasticsearch
I parametri del campo e del valore sono richiesti quando si utilizza la query fuzzy in Elasticsearch. Altri parametri come la sfocatura sono opzionali ma possono svolgere un ruolo essenziale nella query.
Altri parametri includono:
max_expansions - Controlla il numero di variazioni create. È impostato su 60 per impostazione predefinita. Elasticsearch scoraggia la specifica di un alto valore per max_expansions in quanto può portare a prestazioni scadenti.
Trasposizioni - Determina se la distanza di modifica include trasposizioni di due caratteri adiacenti. Questo valore è impostato su true per impostazione predefinita.
prefix_length - Questo imposta il numero di caratteri iniziali per lasciare inalterata durante l'espansione. Questo valore è impostato su 0 per impostazione predefinita.
Riscrivere - Imposta il metodo per riscrivere la query. Il valore predefinito è impostato su Constant_Core. Altri metodi includono:
NOTA: Evita di cambiare il metodo di riscrittura a meno che tu non sia sicuro di quello che stai facendo.
Conclusione
Elasticsearch è uno strumento potente da solo. Tuttavia, come mostrato in questo tutorial, può fornire una potenza enorme se abbinata a caratteristiche come le query sfocate.
È bene notare che c'è di più in Elasticsearch Fuzzy query di quanto discusso in questa guida. Si prega di considerare la documentazione per saperne di più.
Grazie per aver letto!