Elasticsearch Autocomplete Guide

Opster Team

Ostatnia aktualizacja: Mar 2021

Opster Team

marzec 2021

oprócz przeczytania tego przewodnika zalecamy przeprowadzenie kontroli zdrowia Elasticsearch. Wykrywa problemy i poprawia wydajność Elasticsearch, analizując rozmiary odłamków, podkładki, pamięć, migawki, znaki wodne dysku i inne.Kontrola Elasticsearch jest bezpłatna i nie wymaga instalacji.

oprócz czytania tego przewodnika, powinieneś uruchomić analizator dzienników wyszukiwania Opster, jeśli chcesz poprawić wydajność wyszukiwania w Elasticsearch.

dzięki analizatorowi Opster możesz łatwo zlokalizować powolne wyszukiwania i zrozumieć, co doprowadziło do ich dodatkowego obciążenia systemu. Otrzymasz spersonalizowane zalecenia dotyczące zmniejszenia opóźnień wyszukiwania i poprawy wydajności wyszukiwania. Narzędzie jest bezpłatne i trwa zaledwie 2 minuty.

Tło

w tym artykule omówimy, jak uniknąć krytycznych błędów wydajności, dlaczego domyślne rozwiązanie Elasticsearch go nie tnie i ważne kwestie implementacji.
wszystkie nowoczesne strony internetowe mają funkcje autouzupełniania (wyszukiwanie podczas pisania) na pasku wyszukiwania, aby poprawić wrażenia użytkownika (nikt nie chce wpisywać całych wyszukiwanych haseł…). Konieczne jest, aby autouzupełnianie było szybsze niż standardowe wyszukiwanie, ponieważ celem autouzupełniania jest rozpoczęcie wyświetlania wyników podczas pisania przez użytkownika. Jeśli opóźnienie jest wysokie, doprowadzi to do podrzędnego doświadczenia użytkownika.

Poniżej znajduje się przykład automatycznego wyszukiwania na słynnej stronie z pytaniami i odpowiedziami, Quora. Jest to dobry przykład autouzupełniania: podczas wyszukiwania elasticsearch auto, następujące posty zaczynają się wyświetlać na pasku wyszukiwania.

ten obrazek ma pusty atrybut alt; jego nazwa pliku to GtQyiRxpwyXg_NmYFLO5mSlG5Zwa-k6a-s2AIi-uP3EsEP8dRql8eR0CrfGZlN_PIcUMU9K-GDZ2WfEASrxgxGSXiE37pzwNNffIcjq-xlBA982DZe8TQJFzYaLl8WojdrdlVNjQ

zwróć uwagę, że w wynikach wyszukiwania pojawiają się pytania dotyczące funkcji automatycznego skalowania, automatycznego tagowania i autouzupełniania Elasticsearch. Użytkownicy mogą dodatkowo wpisać kilka znaków, aby zawęzić wyniki wyszukiwania.

różne podejścia do autouzupełniania w Elasticsearch / search podczas wpisywania

istnieje wiele sposobów implementacji funkcji autouzupełniania, które zasadniczo dzielą się na cztery główne kategorie:

  1. czas indeksu
  2. Czas zapytania
  3. czas zakończenia
  4. Szukaj-jako-wpisujesz bazę danych

1. Czas indeksu

czasami wymagania są tylko uzupełnianiem przedrostków lub uzupełnianiem przedrostków w autouzupełnianiu. Często zdarza się, że autouzupełnianie implementacji odbywa się za pomocą analizatorów niestandardowych, które polegają na indeksowaniu tokenów w taki sposób, aby pasowały do wyszukiwanego hasła użytkownika.
jeśli kontynuujemy nasz przykład, patrzymy na dokumenty, które składają się z” Elasticsearch autocomplete”,” Elasticsearch auto-tag”,” Elasticsearch auto scaling “i”Elasticsearch automatically”. Domyślny analizator nie wygeneruje żadnych częściowych tokenów dla “autocomplete”, “autoscaling” i “automatically”, A wyszukiwanie “auto” nie przyniesie żadnych wyników.
aby rozwiązać powyższy problem, edge Ngram lub n-gram tokenizer są używane do indeksowania tokenów w Elasticsearch, jak wyjaśniono w oficjalnym es doc I search time analyzer, aby uzyskać wyniki autouzupełniania.
powyższe podejście wykorzystuje zapytania dopasowania, które są szybkie, ponieważ używają porównania łańcuchów (które używają hashcode), a w indeksie są stosunkowo mniej dokładne tokeny.

2. Czas zapytania

Autouzupełnianie można osiągnąć, zmieniając zapytania dopasowania na zapytania prefiksowe. Podczas gdy zapytania dopasowujące działają na dopasowaniu tokenów (indeksowanych) do tokenów (tokenów kwerend wyszukiwania), zapytania prefiksowe (jak sama nazwa wskazuje) dopasowują wszystkie tokeny zaczynając od tokenów wyszukiwania, stąd liczba dopasowanych dokumentów (wyników) jest wysoka.

jak wyjaśniono, Zapytanie o prefiks nie jest dokładnym dopasowaniem tokena, raczej opiera się na dopasowaniu znaków w łańcuchu, co jest bardzo kosztowne i pobiera wiele dokumentów. Elasticsearch wewnętrznie używa struktury danych typu drzewa B+ do przechowywania swoich tokenów. Przydatne jest zrozumienie wewnętrznej struktury danych wykorzystywanej przez odwrócone indeksy oraz tego, jak różne typy zapytań wpływają na wydajność i wyniki.

3. Sugestia zakończenia

jest to przydatne, jeśli podajesz sugestie dotyczące wyszukiwanych terminów, takich jak e-commerce i witryny wyszukiwania hoteli. Pasek wyszukiwania oferuje sugestie zapytań, w przeciwieństwie do sugestii pojawiających się w rzeczywistych wynikach wyszukiwania, a po wybraniu jednej z sugestii dostarczonych przez suggestera zakończenia, zapewnia wyniki wyszukiwania.

jak wspomniano w oficjalnym es doc, jest on nadal w użyciu programistycznym i nie pobiera wyników wyszukiwania na podstawie wyszukiwanych terminów, jak wyjaśniono w naszym przykładzie.

wewnętrznie działa poprzez indeksowanie tokenów, które użytkownicy chcą zasugerować, a nie w oparciu o istniejące dokumenty.

próbki kodu

1. Czas indeksowania

definicja indeksu:

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

zapytanie ofertowe:

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

2. Czas zapytania

definicja indeksu:

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

zapytanie:

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

4. Wyszukiwanie podczas wpisywania

jest to niedawno wydany typ danych (wydany w wersji 7.2) mający na celu ułatwienie autouzupełniania zapytań bez uprzedniej wiedzy o konfiguracji niestandardowego analizatora. Elasticsearch wewnętrznie przechowuje różne tokeny (krawędź n-gram, półpasiec) tego samego tekstu, dlatego może być używany zarówno do uzupełniania przedrostków, jak i infiksów. Może to być wygodne, jeśli nie znasz zaawansowanych funkcji Elasticsearch, co ma miejsce w przypadku pozostałych trzech podejść. Nie jest wymagana duża Konfiguracja,aby działał w prostych przypadkach użycia, a próbki kodu i więcej szczegółów są dostępne na oficjalnych dokumentach ES.

uwzględnienie wydajności

prawie wszystkie powyższe podejścia działają dobrze na mniejszych zestawach danych przy lżejszych obciążeniach wyszukiwania, ale gdy masz ogromny indeks, w którym uzyskujesz dużą liczbę zapytań auto suggest, niezbędna jest umowa SLA i wydajność powyższych zapytań . Poniższe punkty powinny pomóc w wyborze podejścia najlepiej dopasowanego do Twoich potrzeb:

  • tokeny Ngram lub edge Ngram znacznie zwiększają rozmiar indeksu, zapewniając limity min i max gramów w zależności od aplikacji i pojemności. Planowanie pozwoli zaoszczędzić znaczne problemy w produkcji.
  • Umożliwienie pustych lub kilku zapytań o prefiks znakowy może wywołać wszystkie dokumenty w indeksie i może obniżyć cały klaster. Zawsze lepszym pomysłem jest wykonanie zapytania prefiksowego tylko na N-tym wyrazie(w kilku polach) i ograniczenie minimalnych znaków w zapytaniach prefiksowych.
  • dostarczony przez ES typ danych “Szukaj podczas pisania” tokenizuje tekst wejściowy w różnych formatach. Ponieważ jest to rozwiązanie dostarczane przez ES, które nie może rozwiązać wszystkich przypadków użycia, zawsze lepszym pomysłem jest sprawdzenie wszystkich narożnych przypadków wymaganych dla Twojego biznesowego przypadku użycia. Ponadto, jak wspomniano, tokenizuje pola w wielu formatach, co może zwiększyć rozmiar magazynu indeksu Elasticsearch.
  • zakończenie sugeruje oddzielne indeksowanie sugestii, a część z nich jest nadal w trybie programowania i nie odnosi się do przypadku użycia pobierania wyników wyszukiwania.
  • podejścia do czasu indeksowania są szybkie, ponieważ w czasie zapytań jest mniej narzutu, ale wymagają więcej prac gruntowych, takich jak ponowne indeksowanie, planowanie pojemności i wzrost kosztów dysku. Czas zapytania jest łatwy do wdrożenia, ale zapytania wyszukiwania są kosztowne. Jest to bardzo ważne, aby zrozumieć, ponieważ większość czasu użytkownicy muszą wybrać jeden z nich, a zrozumienie tego kompromisu może pomóc w wielu rozwiązywaniu problemów z wydajnością.

różne

w większości przypadków ES dostarcza rozwiązania do autouzupełniania, które nie spełniają specyficznych wymagań biznesowych lub mają wpływ na wydajność dużych systemów, ponieważ nie są to rozwiązania uniwersalne. Przez większość czasu użytkownicy muszą dostosować, aby uzyskać zoptymalizowane rozwiązanie (bardziej wydajne i odporne na błędy), a radzenie sobie z problemami z wydajnością Elasticsearch nie jest trywialne. Opster pomaga wcześnie je wykryć i zapewnia wsparcie oraz niezbędne narzędzia do ich skutecznego debugowania i zapobiegania.

zapraszam do dalszej lektury :

  1. przewodnik Opstera dotyczący zwiększonego opóźnienia wyszukiwania, aby uzyskać szczegółowe informacje i poprawić wydajność.
  2. opster ‘ s guide on how to use search slow logs on how to quickly debug slow search issues

Popraw wydajność Elasticsearch

Uruchom analizę

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.