Elasticsearch Search Fuzzy

Elasticsearch Search Fuzzy
Ti sei mai chiesto come gli strumenti dei motori di ricerca come Google possano prevedere accuratamente le tue query di ricerca mentre digiti? O correggere errori di battitura nelle query di ricerca? No, non è un ragionamento simile all'uomo.

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/_search

"query":
"fuzzy":
"Categoria":
"valore": "uomini",
"Fuzziness": 0.5



Eseguiamo 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/_search

"query":
"fuzzy":
"Categoria":
"valore": "uomini",
"Fuzziness": 0.2



La 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/_search

"query":
"fuzzy":
"Categoria":
"valore": "uomini",
"Fuzziness": "Auto"



Se 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/_search

"query":
"Multi_match":
"query": "scarpe",
"Fields": ["categoria", "customer_first_name"],
"Fuzziness": "Auto"


La 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:

  1. Costant_Core_Boolean
  2. Punteggio_Boolean
  3. top_terms_boost_n
  4. top_terms_n
  5. top_terms_bleded_freqs_n

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!