Elasticsearch Fuzzy Search

Elasticsearch Fuzzy Search
Czy kiedykolwiek zastanawiałeś się, w jaki sposób narzędzia wyszukiwarki, takie jak Google, mogą dokładnie przewidzieć swoje pytania w wyszukiwarce podczas pisania? Lub poprawić literówki w zapytaniach dotyczących wyszukiwania? Nie, to nie jest ludzkie rozumowanie.

Ta funkcjonalność jest możliwa ze względu na koncepcję zwaną logiką rozmytą, rozmyty lub rozmyte wyszukiwanie.

Co to jest rozmycie?

Rozmycie lub rozmyta logika odnosi się do logiki matematycznej, która opisuje, że prawdą wartości może być zakres liczb między 0 a 1, gdzie 1 reprezentuje absolutną prawdę, a 0 reprezentuje absolutne fałsz.

W przeciwieństwie do logiki logicznej z dwoma odrębnymi wartościami: 0 i 1, logika rozmyta akceptuje zmienny zakres prawdy i falsy.

Mówiąc prosto, niewyraźność opisuje, jak jasna może być wartość. Weźmy na przykład literówkę. Skąd wiesz, że to literówka? Oceniasz istniejące litery i określasz, co słowo próbowało opisać.

W logice rozmytej możemy to wyrazić w zakresie 0 i 1. Jeśli literówka to helli, jest bardziej prawdopodobne, że opisze hello lub piekło, niż opisując „ludzki” lub „pomidor."

Rozmyte wyszukiwanie w ElasticSearch

Wyszukiwanie rozmyte znajdzie dopasowane wartości na podstawie początkowego zapytania na podstawie określonych kryteriów.

ElasticSearch implementuje niewyraźność za pomocą algorytmu dystansu edycji Levenshtein.

Odległość edycji to całkowita liczba wariantów słów, takich jak edycje, usunięcie, zamienniki lub transpozycja początkowego słowa, aby dotrzeć do słowa docelowego.

Jak działa Elasticsearch Fuzzy Search

Algorytm jest łatwy do zrozumienia. Zaczynasz od przyjmowania dwóch słów i porównania ich sekwencyjnego, charakteru według charakteru.

Jeśli postać jest inna, zwiększasz odległość między słowami według jednego. Następnie określasz ostateczną wartość odległości między literami.

NOTATKA: Powyższe nie opisuje matematycznej implementacji algorytmu. Rozważ link

Elasticsearch Fuzzy Query

Rozmyte zapytanie nie różni się bardzo od zwykłego zapytania ElasticSearch. Aby go użyć, dodaj parametr rozmycia do zapytania wyszukiwania.

Możesz także dodać maksymalną odległość Levenshtein do użycia w zapytaniu.

Pobierz kibana_sample_data_ecommerce/_search

"zapytanie":
"zamazany":
"Kategoria":
„Wartość”: „mężczyzn”,
„Rozmyście”: 0.5



Prowadzimy rozmyte zapytanie, aby pasowały do ​​terminów „mężczyzn” i wyznaczamy niestandardową wartość rozmycia w powyższym przykładzie.

Poniżej znajduje się przykładowa odpowiedź:

Jeśli obniżesz odległość edycji, ElasticSearch ograniczy odległość wyszukiwania, co doprowadzi do brakowania niektórych wartości.

Na przykład następujące zapytanie z odległością edycji 0.2 Nie zwróci żadnych wyników.

Pobierz kibana_sample_data_ecommerce/_search

"zapytanie":
"zamazany":
"Kategoria":
„Wartość”: „mężczyzn”,
„Rozmyście”: 0.2



Odpowiedź jest jak pokazana poniżej:

Parametr Elasticsearch Parametr

Jak wspomniano, parametr rozmycia w zapytaniu ustawia maksymalną odległość edycji Levenshtein lub liczbę edycji.

Możemy określić wartości rozmycia jako: 0, 1, 2 lub automatyczne.

Kiedy ręcznie ustawiasz dystans edycji dla swoich rozmytych zapytań, możesz przegapić niektóre wyniki. ElasticSearch zapewnia wartość automatyczną, która pozwala Elasticsearch określić odległość edycji.

Na przykład:

Pobierz kibana_sample_data_ecommerce/_search

"zapytanie":
"zamazany":
"Kategoria":
„Wartość”: „mężczyzn”,
„Rozmyście”: „Auto”



Jeśli masz ustawioną wartość na automatyczne, ElasticSearch edytuje odległość na podstawie długości wyszukiwanego terminu. Możesz także określić niskie i wysokie wartości dla automatycznego jako:

AUTOMATYCZNY:[Niski] Lub AUTOMATYCZNY:[wysoki]

Aby zrozumieć, jak działa rozmycie w ElasticSearch, sprawdź dokumentację.

Fuzzy Multi-Match Query

Możesz użyć multi-serwisu ElasticSearch z rozmytnością, jak pokazano na przykładowym zapytaniu poniżej:

Pobierz kibana_sample_data_ecommerce/_search

"zapytanie":
„Multi_Match”:
„zapytanie”: „buty”,
„Pola”: [„kategoria”, „Customer_first_name”],
„Rozmyście”: „Auto”


Odpowiedź na to brzmi:

Elasticsearch Parametry wyszukiwania rozmyte

Parametry pola i wartości są wymagane podczas korzystania z zapytań Fuzzy w ElasticSearch. Inne parametry, takie jak niewyraźność, są opcjonalne, ale mogą odgrywać istotną rolę w zapytaniu.

Inne parametry obejmują:

Max_Expansions - Kontroluje liczbę utworzonych wariantów. Domyślnie jest ustawiony na 60. Elasticsearch zniechęca do określenia wysokiej wartości dla MAX_Expansions, ponieważ może to prowadzić do słabej wydajności.

Transpozycje - Określa, czy odległość edycji obejmuje transpozycje dwóch sąsiednich znaków. Ta wartość jest domyślnie ustawiona na true.

Prefix_length - To ustawia liczbę początkowych znaków, które pozostawiają niezmienione podczas rozszerzenia. Ta wartość jest domyślnie ustawiona na 0.

Przepisać - Ustawia metodę przepisania zapytania. Wartość domyślna jest ustawiona na Constant_Core. Inne metody obejmują:

  1. constant_core_boolean
  2. Score_boolean
  3. top_terms_boost_n
  4. top_terms_n
  5. top_terms_blend_freqs_n

NOTATKA: Unikaj zmiany metody przepisywania, chyba że jesteś pewien, co robisz.

Wniosek

Elasticsearch to potężne narzędzie same. Jednak, jak pokazano w tym samouczku, może zapewnić ogromną moc w połączeniu z takimi funkcjami, jak zapytale rozmyte.

Warto zauważyć, że w tym przewodniku jest coś więcej do elasticsearch, niż omówione w tym przewodniku. Rozważ dokumentację, aby dowiedzieć się więcej.

Dziękuję za przeczytanie!