Elasticsearch Fuzzy Search

Elasticsearch Fuzzy Search
Har du noen gang lurt på hvordan søkemotorverktøy som Google kan forutsi søkespørsmålene dine nøyaktig som du skriver? Eller riktig skrivefeil i søket ditt? Nei, det er ikke menneskelignende resonnement.

Denne funksjonaliteten er mulig på grunn av et konsept som heter Fuzzy Logic, Fuzziness eller Fuzzy Search.

Hva er uklarhet?

Fuzziness eller Fuzzy Logic refererer til en matematisk logikk som beskriver at sannheten om en verdi kan være et antall tall mellom 0 og 1, der 1 representerer absolutt sannhet, og 0 representerer absolutt falsk.

I motsetning til boolsk logikk med to distinkte verdier: 0 og 1, aksepterer uklar logikk et variabelt utvalg av sannhet og falske.

Enkelt sagt beskriver uklarhet hvor klar en verdi kan være. Ta for eksempel en skrivefeil. Hvordan vet du at det er en skrivefeil? Du evaluerer de eksisterende bokstavene og bestemmer hva ordet prøvde å beskrive.

I uklar logikk kan vi uttrykke dette i området 0 og 1. Hvis en skrivefeil er helvete, er det mer sannsynlig å beskrive hei eller helvete i stedet for at den beskriver "menneske" eller "tomat.”

Fuzzy Search i Elasticsearch

Et uklar søk vil finne de samsvarende verdiene basert på den første spørringen basert på de spesifikke kriteriene.

Elasticsearch implementerer fuzziness ved bruk av Levenshtein Edit Distance -algoritmen.

Redigeringsavstanden er det totale antallet ordvariasjoner som redigeringer, sletter, erstatninger eller transposisjoner av det første ordet for å nå et målord.

Hvordan Elasticsearch Fuzzy Search fungerer

Algoritmen er enkel å forstå. Du starter med å ta to ord og sammenligne dem i rekkefølge, karakter etter karakter.

Hvis karakteren er annerledes, øker du avstanden mellom ordene med en. Du bestemmer deretter den endelige avstandsverdien mellom bokstavene.

MERK: Ovennevnte beskriver ikke den matematiske implementeringen av algoritmen. Tenk på lenken

Elasticsearch Fuzzy Query

En uklar spørsmål er ikke veldig forskjellig fra en vanlig Elasticsearch -spørring. For å bruke den, legg til fuzziness -parameteren til søket.

Du kan også legge til den maksimale Levenshtein -avstanden som skal brukes i spørringen.

Få kibana_sample_data_ecommerce/_search

"spørring":
"Fuzzy":
"Kategori":
"Verdi": "menn",
"Fuzziness": 0.5



Vi kjører en uklar spørring for å matche begrepene “menn” og sette en tilpasset fuzziness -verdi i eksemplet over.

Nedenfor er et eksempel svar:

Hvis du senker redigeringsavstanden, vil Elasticsearch begrense søkeavstanden, noe som vil føre til at du mangler noen verdier.

For eksempel følgende spørsmål med en redigeringsavstand på 0.2 vil returnere ingen resultater.

Få kibana_sample_data_ecommerce/_search

"spørring":
"Fuzzy":
"Kategori":
"Verdi": "menn",
"Fuzziness": 0.2



Responsen er som vist nedenfor:

Elasticsearch Fuzziness Parameter

Som nevnt setter fuzziness -parameteren i spørringen den maksimale Levenshtein redigeringsavstand eller antall redigeringer.

Vi kan spesifisere fuzziness -verdiene som: 0, 1, 2 eller auto.

Når du manuelt setter redigeringsavstanden for dine uklar spørsmål, kan du savne noen resultater. Elasticsearch gir en bilverdi som lar Elasticsearch bestemme redigeringsavstanden.

For eksempel:

Få kibana_sample_data_ecommerce/_search

"spørring":
"Fuzzy":
"Kategori":
"Verdi": "menn",
"Fuzziness": "Auto"



Hvis du har verdien som er satt til Auto, vil Elasticsearch redigere avstanden basert på lengden på søkeordet. Du kan også spesifisere lave og høye verdier for Auto som:

Bil:[lav] eller Bil:[høy]

For å forstå hvordan fuzziness fungerer i Elasticsearch, sjekk dokumentasjonen.

Fuzzy multi-kamp-spørring

Du kan bruke Elasticsearch Multi-Query med Fuzziness, som vist i eksemplet på spørringen nedenfor:

Få kibana_sample_data_ecommerce/_search

"spørring":
"multi_match":
"spørring": "sko",
"Fields": ["kategori", "customer_first_name"],
"Fuzziness": "Auto"


Responsen for dette er:

Elasticsearch Fuzzy søkeparametere

Felt- og verdiparametrene er påkrevd når du bruker den uklare spørringen i Elasticsearch. Andre parametere som fuzziness er valgfritt, men kan spille en essensiell rolle i spørringen.

Andre parametere inkluderer:

MAX_EXPANSIONS - Kontrollerer antall opprettet variasjoner. Den er satt til 60 som standard. Elasticsearch fraråder å spesifisere en høy verdi for max_expansions, da det kan føre til dårlig ytelse.

Transposisjoner - Bestemmer om redigeringsavstanden inkluderer transponering av to tilstøtende tegn. Denne verdien er satt til sann som standard.

prefiks_lengde - Dette setter antall innledende tegn som skal forlate uendret under utvidelsen. Denne verdien er satt til 0 som standard.

Omskrive - Angir metoden for å omskrive spørringen. Standardverdien er satt til Constant_core. Andre metoder inkluderer:

  1. constant_core_boolean
  2. scoring_boolean
  3. top_terms_boost_n
  4. top_terms_n
  5. TOP_TERMS_BLENDED_FREQS_N

MERK: Unngå å endre omskrivingsmetoden med mindre du er sikker på hva du gjør.

Konklusjon

Elasticsearch er et kraftig verktøy på egen hånd. Som vist i denne opplæringen, kan den imidlertid gi massiv kraft når den kombineres med funksjoner som uklar spørsmål.

Det er godt å merke seg at det er mer å elasticsearch Fuzzy Query enn diskutert i denne guiden. Vennligst vurder dokumentasjonen for å lære mer.

Takk for at du leser!