Smart POST
Smart POST

ElasticSearch, czyli wszystko o wyszukiwaniu pełnotekstowym

Adam Okwieka
Autor: Adam OkwiekaFull-stack developer

Pisanie aplikacji bez względu na to, w jakim języku jest wykonywane, to zazwyczaj ogrom zapisanych danych. Jednocześnie jest to konieczność przeszukiwania tych danych, by znaleźć kluczowe dla kolejnych kroków i struktury zapisy. W takich właśnie sytuacjach z pomocą może przyjść ElasticSearch!

Wyszukiwarka ElasticSearch

Jak wyszukiwane są dane?

Gdy dochodzi do wyszukiwania danych, o którym wspomniane było już wyżej, zazwyczaj zależy nam na przeszukiwaniu „inteligentnym”. Co to oznacza? Wyszukiwarka ma pozwalać na to, by w pisowni wyszukiwanego słowa były drobne błędy lub też by zostały uwzględnione różne odmiany słów, których przecież w językach nie brakuje. To wszystko dotyczy oczywiście wyszukiwania pełnotekstowego.

Jeśli danych jest mało, to wyszukiwarka wbudowana w narzędzie (w tym wypadku silniki bazodanowe) sprawdzi się bez większych trudności czy problemów. Jednak gdy liczba indeksów, jakie należy przeszukać, rośnie, jak to ma miejsce w przypadku aplikacji i programów, to niezbędna może być lepiej rozwinięta pomoc. I to jest miejsce, w którym ElasticSearch może okazać się zbawieniem dla programisty, a także dla użytkownika końcowego.

Czym jest ElasticSearch?

ElasticSearch to silnik wyszukiwania pełnotekstowego – to baza danych, która wykorzystuje Apache Lucene. W połączeniu otrzymujemy potężne narzędzie, które daje możliwość kompleksowego przeszukiwania danych niemalże w czasie rzeczywistym. To nie tylko klasyczne wyszukiwanie, ale też zaawansowane grupowanie czy filtrowanie według wytycznych. Gdy doda się do tego fakt, że model pracy jest rozproszony, a API REST-owe, to pojawia nam się przed oczyma jeden z najlepszych dostępnych silników wyszukiwania pełnotekstowego.

Budowa ElasticSearch

By w pełni poznać możliwości opisywanej wyszukiwarki, najlepiej jest najpierw poznać ją i jej strukturę. Nawet jeśli to tylko podstawowe elementy, to pozwalają lepiej zrozumieć jej elementy i w rezultacie otrzymywać lepsze, dokładniejsze rezultaty swoich działań.

Dla przykładu – Node to pojedynczy serwer. To właśnie tutaj dochodzi do przetwarzania i przeszukiwania danych. Każdy z takich serwerów ma unikalną nazwę, a także port, na którym działa – standardowo jest to 9200. Zbiór, złożony z jednego lub kilku node’ów, nazywamy Clusterem.

Zagłębiając się dalej, znajdziemy pojęcie Index – to z kolei kolekcja dokumentów o bardzo podobnej charakterystyce. To na podstawie nazwy indeksu odwołujemy się do konkretnych kolekcji dokumentów i w zależności od naszych potrzeb dodajemy, usuwamy lub po prostu wyszukujemy kluczowe dla nas dokumenty. W przypadku standardowych, relacyjnych baz danych indeks moglibyśmy traktować jako pełnoprawną bazę danych.

Inny sposób grupowania danych nazywamy Type. Często sposób ten nazywa się także tabelą, z tym że jej struktura nie jest ściśle zdefiniowana, co wyróżnia ją chociażby od tabel znanych z relacyjnej bazy danych. Tutaj struktura zależna jest przede wszystkim od przechowywanych w grupie dokumentów. Z kolei Document, czyli dokumenty, to rekordy zapisywane w formacie JSON.

Dobrodziejstwa Open Source

Co kluczowe dla wielu programistów czy koderów, ElasticSearch jest projektem OpenSource, co oznacza, że jest w pełni darmowym narzędziem. Dzięki temu bezkosztowo można korzystać z zaawansowanego, ciągle rozwijanego silnika wyszukiwania. Jednocześnie jest mnóstwo klientów, którzy pozwalają na intuicyjne połączenie z ElasticSearch. To z kolei pozwala na wykorzystanie wyszukiwarki chociażby w pracy z Pythonem, C# czy Javą.

Funkcjonalność ElasticSearch

Samą funkcjonalność i przydatność ElasticSearch najłatwiej pokazać za pomocą prostego, acz bardzo wymownego przykładu.

Na podstawie odpowiedniego przedstawienia ElasticSearcha załóżmy więc, że w swoim sklepie internetowym masz solidne 200 tysięcy produktów. Nie jest to przecież kosmiczna liczba, nawet jeśli jest to sklep umiarkowanej wielkości. Jednocześnie masz już pewne doświadczenie z programowaniem i zdajesz sobie sprawę, jak powinno wyglądać „proste” zapytanie do bazy SQL. Wiesz również, że zapytanie powinno nie tylko działać, ale jednocześnie być szybkie i wydajne, byle tylko użytkownik z zadowoleniem pozostał w sklepie i nie zniechęcił się wolno działającą wyszukiwarką.

Jest to tyle trudne, że przecież zapytanie nie musi składać się tylko z nazwy produktu. Równie dobrze może to być też producent i już wtedy zaczynają się schody. Który element zapytania jest ważniejszy? Który z członów wyszukiwania powinien mieć większy wpływ na wyświetlany wynik? Dzięki ElasticSearch do każdego pola możemy dodać wagę, by wpłynąć na tzw. scoring zapytania. Wtedy sami decydujemy, co jest ważniejsze dla nas, a także przede wszystkim pod kątem UX – co ma większą wartość dla potencjalnego klienta. Mało tego, można tego dokonać za pomocą relatywnie prostych komend. To jedna z podstawowych funkcji ElasticSearch, która potrafi jednak bardzo ułatwić życie!

Podsumowanie

Czy ElasticSearch to jedyne, skuteczne rozwiązanie? Oczywiście, że nie, ale odpowiednio wdrożona i zastosowana wyszukiwarka może przynieść zbawienne rezultaty dla działania aplikacji, strony www czy też e-commerce. Dlatego też nieustannie rośnie popularność tego narzędzia, a coraz więcej programistów łączy swój kod czy program z ElasticSearch, by osiągnąć lepsze rezultaty.

Udostępnij artykuł: