Przejdź do treści
Podobają Ci się nasze treści?
Sięgnij po unikalną wiedzę prosto od developerów i marketingowców. Zapisz się do newslettera.
CAPTCHA
Dziękujemy za zapisanie się do newslettera!
Aby otrzymywać najświeższe, branżowe informacje, potwierdź subskrypcję w mailu, który od nas dostałeś.
PS. Nawet tak ważne wiadomości lubią czasem pomylić folder, dlatego upewnij się, że mail nie trafił do SPAMU
Otwórz swoją skrzynkę e-mail

Czym jest Elasticsearch?

Kategoria: 
Data aktualizacji: 
Czas czytania
: 12 min

Elasticsearch to rozproszony silnik wyszukiwania danych, oparty na bibliotece Apache Lucene. Umożliwia wyszukiwanie pełnotekstowe, filtrowanie, agregacje oraz analizę bardzo dużych zbiorów danych. Robi to praktycznie w czasie rzeczywistym, dzięki czemu idealnie sprawdza się w e-commerce i nie tylko. Można go też wykorzystywać do analizy logów czy w narzędziach do oceny danych behawioralnych – lista potencjalnych zastosowań jest długa. Jak działa Elasticsearch i w jakich projektach warto korzystać z tego silnika? O tym przeczytasz poniżej.

Czym jest Elasticsearch?
Najważniejsze informacje
  • Elasticsearch to silnik wyszukiwania i analizy danych, który sprawdza się przy dużych zbiorach, wyszukiwaniu pełnotekstowym i analizie w czasie (niemal) rzeczywistym.
  • Silnik nie przeszukuje dokumentów jeden po drugim, tylko szybko znajduje te, które zawierają konkretne słowa, frazy lub ich odmiany.
  • Elasticsearch nie zastępuje bazy SQL – działa jako dodatkowa warstwa wyszukiwania i analizy danych synchronizowanych z głównego źródła.
  • Przy małych projektach Elastic często jest zbyt kosztowny i złożony, dlatego wystarczają prostsze rozwiązania, np. PostgreSQL lub FULLTEXT w MySQL.

Co oferuje Elasticsearch i czy jest najlepszym rozwiązaniem na rynku?

Elasticsearch nie bez powodu jest od lat najpopularniejszym silnikiem search and analyticsw porównaniu do relacyjnych baz danych oraz innych silników jest bardziej wydajny i lepiej się skaluje przy dużej liczbie rekordów (liczonych w milionach). Zapytania, które w kilkumilionowej bazie w mySQL zajęłyby sekundy, Elasticsearch obsługuje w milisekundach, niemal w czasie rzeczywistym. Jest to możliwe dzięki jego architekturze – dane w zbiorze nie są przechowywane w tabelach, lecz w odwróconych indeksach.

Jak działa odwrócony indeks?

Gdy indeksujemy dokument, Elasticsearch rozbija jego treść na pojedyncze tokeny (słowa lub frazy), a następnie buduje mapę: które tokeny występują w którym dokumencie. Szukając frazy – np. „ekspresowa dostawa” – silnik nie przeszukuje dokumentów jeden po drugim, tylko od razu zagląda do indeksu i pobiera listę tych, w których te tokeny się pojawiają. Dla porównania, relacyjna baza SQL przy zapytaniu LIKE '%ekspresowa dostawa%' musiałaby przejrzeć każdy wiersz w tabeli.

Elasticsearch oferuje też bardzo elastyczne środowisko do pracy i to jest jego druga główna zaleta. Do komunikacji z silnikiem wykorzystuje własny język zapytań – Query DSL – który pozwala budować bardzo złożone zapytania z filtrowaniem, agregacjami wyników czy oceną ich trafności. Oprócz tego, dla niemal wszystkich popularnych języków programowania – od Javy i PHP, po Pythona i Ruby – Elastic udostępnia oficjalne biblioteki ze wszystkimi niezbędnymi narzędziami do integracji z aplikacjami zewnętrznymi.

Trzeba tylko pamiętać o tym, że Elasticsearch jest jednak narzędziem klasy enterprise ze wszystkimi tego zaletami oraz wadami. Utrzymanie architektury jest stosunkowo drogie i czasochłonne, wymaga też sporego doświadczenia w pracy z tym silnikiem.

Dlatego też warto z niego korzystać, jeśli:

  • pracujesz z dużymi zbiorami danych (miliony rekordów i więcej);
  • potrzebujesz wyszukiwania pełnotekstowego z obsługą wielu języków, fuzzy matchingiem, algorytmem mierzącym trafność wyników;
  • zależy Ci na analizie i agregacji danych w czasie niemal rzeczywistym;
  • budujesz system do monitorowania logów lub analiz behawioralnych.

Natomiast, gdy:

  • baza danych ma tylko kilka-kilkanaście tysięcy rekordów,
  • zapytania są proste i opierają się głównie na dokładnym dopasowaniu,
  • nie masz zasobów na utrzymanie całej architektury,

być może wystarczy prostszy silnik albo nawet i klasyczna, relacyjna baza danych oparta na SQL.

Czym jest wyszukiwanie pełnotekstowe?

Tak jak wspomnieliśmy, Elasticsearch umożliwia wyszukiwanie pełnotekstowe. Na czym polega?

Zanim zapytanie trafi do indeksu, tekst przechodzi przez całą analizę: zostaje podzielony na tokeny, zamieniony na małe litery, oczyszczony ze stop words (czyli słów bez istotnego znaczenia dla wyszukiwarki, na przykład „i”, „w”, „the”), a potem zredukowany do formy podstawowej przez stemming lub lematyzację. Na marginesie, dokładnie ten sam proces zachodzi podczas indeksowania dokumentów, dlatego odwrócony indeks zawiera już przetworzone tokeny, a nie surowy tekst.

Dzięki temu silnik na zapytanie o „ekspresową dostawę” może zwrócić dokumenty zawierające frazy w różnych odmianach, typu „dostawa ekspresowa”, „dostawy ekspresowej” czy „ekspresowe dostawy”. SQL przy zapytaniu LIKE '%ekspresowa dostawa%' zwróci tylko dokładne dopasowanie ciągu znaków.

Elasticsearch a obsługa wielu języków

Silnik oferuje też bardzo zaawansowane możliwości, jeśli chodzi o przetwarzanie i indeksowanie tekstów w różnych językach.

Elasticsearch ma kilkadziesiąt wbudowanych analizatorów (tzw. language analyzers) dostosowanych do specyfiki danego języka – inaczej działa stemming dla języka polskiego (gdzie odmiana przez przypadki jest rozbudowana), a inaczej dla angielskiego.

Wdrożenie silnika dla bazy treści w różnych językach jest, oczywiście, trudniejsze. Aby uniknąć sytuacji, w której silnik np. stosuje stemming angielski do słów po polsku czy niemiecku, standardowo albo tworzy się osobne pola dla każdego języka (np. title_pl, title_en, title_de) z przypisanymi do nich analizatorami, albo nawet buduje osobne indeksy.

Analiza w czasie rzeczywistym – czym jest i jak działa?

Tak jak wspomnieliśmy, Elasticsearch działa w czasie niemal rzeczywistym – przetwarzanie zapytań zajmuje milisekundy, a indeksowanie nowego dokumentu mniej więcej jedną sekundę, bo tyle czasu potrzebuje silnik na odświeżenie indeksu. Jednak takie opóźnienie jest w praktyce niezauważalne dla użytkownika.

Właśnie dlatego Elasticsearch sprawdza się świetnie przy analizie danych, które napływają na bieżąco, czyli np. z logów aplikacji, systemów bezpieczeństwa lub narzędzi analitycznych.

Dostępność i skalowalność

Elasticsearch wyróżnia się też architekturą indeksu – jest oparta na klastrach, dzięki czemu zapewnia świetną skalowalność i odporność na awarie.

Wyobraź sobie, że masz indeks z milionem dokumentów, np. katalog produktów dużego sklepu internetowego. Elasticsearch nie przechowuje go w jednym miejscu, tylko dzieli go na fragmenty (tzw. shardy) i rozkłada między węzły, czyli instancje działające na osobnych serwerach, które w ten sposób są mniej obciążone. Wszystkie węzły razem stanowią klaster. Oprócz tego silnik tworzy repliki – kopie każdego sharda – i umieszcza je na pozostałych węzłach. Jeśli jeden z węzłów przestanie działać, Elasticsearch po prostu „promuje” repliki fragmentów indeksu z wyłączonego serwera do roli shardów głównych i dalej obsługuje zapytania, bez żadnych przestojów.

Typowy klaster dla średniej wielkości projektu liczy 3 węzły, ale ich liczbę można zwiększać w zależności od rozmiarów indeksu. Duże platformy e-commerce potrafią korzystać z klastrów rzędu nawet 15-20 węzłów.

W jaki sposób Elasticsearch wpływa na efektywność zespołów IT?

Dzięki tym wszystkim rozwiązaniom wdrożenie Elasticsearch może ułatwić pracę całych zespołów IT, nie tylko developerów pracujących nad, powiedzmy, wyszukiwarką w e-sklepie. Z zalet silnika skorzystają:

  • specjaliści DevOps – mogą zbierać i analizować zapisy z logów z całej firmowej infrastruktury w jednym miejscu;
  • helpdesk – zyskuje narzędzie do przeszukiwania historii zdarzeń, ticketów i logów bez potrzeby angażowania developera do każdego zapytania do bazy;
  • specjaliści ds. bezpieczeństwa – mogą używać Elasticsearch jako silnika dla systemów SIEM.

W klastrach i węzłach da się zbierać dane z wielu systemów i w ten sposób maksymalnie skrócić czas dotarcia do informacji. Zamiast przeszukiwać osobno bazy danych, pliki logów, systemy monitoringu oraz narzędzia analityczne, wszystko może trafiać do jednego klastra i być dostępne przez API.

Korzyści z zarządzania danymi przez Elasticsearch

W jaki jeszcze sposób Elasticsearch ułatwia zarządzanie danymi w organizacji „na co dzień”?

  1. Szybkie wyszukiwanie i filtrowanie danych

    Dane w Elasticsearch przechowywane są jako dokumenty JSON, czyli nie w tabelach z ustalonymi kolumnami, tylko w bardziej elastycznej strukturze, która może się różnić między dokumentami w tym samym indeksie. Każdy dokument jest indeksowany w momencie zapisu, co oznacza, że wyszukiwanie nie wymaga skanowania całego zbioru danych przy każdym zapytaniu.

    A do tego w jednym zapytaniu można łączyć wyszukiwanie pełnotekstowe z dowolną konfiguracją filtrów – i dostać wyniki posortowane według trafności dopasowania (tak jak, na przykład w Google), a nie tylko według kolejności w bazie.

  2. Elastyczność modelu danych

    W relacyjnej bazie danych każda zmiana struktury tabeli, zwłaszcza jeśli mówimy o milionach rekordów, potrafi zająć godziny. Natomiast w Elasticsearch można dodawać nowe pola do dokumentów bez modyfikowania istniejącego już mapowania – nowe pola są wykrywane i indeksowane automatycznie. Bardzo upraszcza to pracę z danymi z różnych źródeł, które mają niejednorodną strukturę, np. z logami z kilku aplikacji lub danymi z zewnętrznych API.

    Dla bardziej złożonych przypadków da się zdefiniować explicit mapping, czyli z góry określić strukturę danych, relacje między nimi i docelowy sposób ich analizy – pod tym względem silnik jest bardzo elastyczny.

  3. Agregacje i analiza

    Elasticsearch pozwala swobodnie agregować dane bezpośrednio z ich źródeł, bez potrzeby eksportowania ich do osobnego narzędzia analitycznego. W jednym zapytaniu można np. policzyć liczbę zamówień per kategoria, wyliczyć średnią wartość koszyka w zadanym przedziale czasowym i pogrupować wyniki według regionu.

  4. Integracje z innymi narzędziami

    Silnik, co bardzo ważne, jest zintegrowany z całym ekosystemem narzędzi Elastic Stack:

    • Kibaną – do wizualizacji i eksploracji danych;
    • Logstash – do zbierania i przekształcania danych z różnych źródeł;
    • Beats – do zarządzania przesyłem danych, np. logów z serwerów, do klastrów Elasticsearch.

    Poza ekosystemem Elastic dostępne są też gotowe konektory do Apache Kafka, Hadoopa, popularnych baz danych oraz platform chmurowych typu AWS, Google Cloud czy Azure, ale również i do narzędzi BI, na przykład Tableau.

Bezpieczeństwo i kontrola dostępu w Elasticsearch – co warto wiedzieć?

Bezpieczeństwo informacji jest priorytetem dla każdej organizacji. Elasticsearch oferuje w tym obszarze zaawansowane funkcje, takie jak uwierzytelnianie, autoryzacja oraz restrykcyjna kontrola uprawnień na poziomie konkretnych dokumentów, a nawet pojedynczych pól. Dzięki temu tylko uprawnione osoby mają dostęp do wrażliwych danych, co minimalizuje ryzyko naruszeń bezpieczeństwa. Dodatkowo Elasticsearch wspiera szyfrowanie w tranzycie i w spoczynku (czyli zarówno podczas przesyłania, jak i przechowywania plików), zapewniając silną warstwę ochrony przed nieautoryzowanym dostępem.

Mechanizmy te można elastycznie dopasować do struktury przedsiębiorstwa, zarządzając uprawnieniami na poziomie użytkowników, grup czy ról. Pomaga to w zachowaniu pełnej zgodności z regulacjami prawnymi. Z kolei monitorowanie i audytowanie działań użytkowników w Elasticsearch umożliwia wykrywanie potencjalnych zagrożeń.

Bezpieczeństwo w Elasticsearch jest wspierane przez wiele narzędzi i funkcji, które pomagają chronić dane przed zagrożeniami wewnętrznymi i zewnętrznymi. Należą do nich:

  • zapory sieciowe,
  • filtrowanie adresów IP,
  • integracje z zewnętrznymi systemami zarządzania tożsamością i dostępem (IAM).

Dzięki temu firmy mogą z łatwością wdrażać polityki bezpieczeństwa i monitorować ich przestrzeganie.

Różnorodność zastosowań Elasticsearch w różnych branżach – przykłady

Trudno się zatem dziwić, że Elasticsearch znajduje zastosowanie w bardzo różnych kontekstach, od e-commerce po zbiory dokumentów w administracji publicznej.

Elasticsearch – możliwe zastosowania
  1. E-commerce – najbardziej oczywistym zastosowaniem są wyszukiwarki produktów w sklepach internetowych. Silnik bez problemu radzi sobie z obsługą literówek (tzw. fuzzy search), autouzupełnianiem zapytań i synonimami (żeby „laptop” i „notebook” dawały te same wyniki). Oprócz tego pomaga też zbudować naprawdę złożone systemy filtrów fasetowych.
  2. Logi i monitoring IT – Elasticsearch wraz z Kibaną oraz Logstash tworzy chyba najpopularniejszy zestaw narzędzi do centralizacji logów. Historia zdarzeń z całej infrastruktury (serwerów, kontenerów, mikroserwisów i aplikacji) trafia do jednego miejsca, gdzie można je potem przeszukiwać czy filtrować.
  3. Analityka biznesowa – tak jak wspominaliśmy, dzięki możliwości agregowania danych Elasticsearch mocno upraszcza budowanie dashboardów z odświeżaniem w czasie rzeczywistym, co z kolei pozwala np. śledzić trendy w firmowych danych.
  4. Sektor publiczny – silnik dobrze sprawdza się w administracji publicznej, wszelkiego rodzaju archiwach, bibliotekach oraz instytucjach naukowych do przeszukiwania ogromnych zbiorów dokumentów.
  5. Logistyka – Elasticsearch świetnie odnajduje się w narzędziach firm logistycznych, bo pozwala przechowywać współrzędne GPS i odpytywać je zapytaniami przestrzennymi w stylu „znajdź wszystkie przesyłki w promieniu 50 km od Warszawy” albo „pokaż pojazdy, które w ciągu ostatniej godziny wjechały w ten obszar”.
  6. Media – na podobnej zasadzie jak w e-sklepach, Elasticsearch może posłużyć jako silnik napędzający wewnętrzną wyszukiwarkę tekstów na portalu newsowym lub treści w aplikacji streamingowej; możliwości jest wiele.

Denis Peszka

Architekt Drupal CMS

Komentarz eksperta

Elasticsearch warto wdrażać wtedy, gdy relacyjna baza danych przestaje wystarczać do szybkiego wyszukiwania i analizy danych. W dużych projektach otwiera szerokie możliwości konfiguracji, ale wymaga dobrej architektury oraz stałego monitoringu. Dlatego najpierw trzeba ocenić, czy skala danych uzasadnia koszty wdrożenia i późniejszej obsługi.

Podsumowanie

Elasticsearch stale się rozwija – dodawane są aktualizacje i nowe funkcje, które odpowiadają na zmieniające się potrzeby rynku. Dzięki silnemu wsparciu społeczności i ciągłym innowacjom Elasticsearch pozostaje na czele technologii wyszukiwania oraz analizy danych, oferując firmom niezrównane możliwości w zarządzaniu ich zasobami informacyjnymi.

Podsumowując, Elasticsearch to potężne narzędzie, które za sprawą swojej wszechstronności i zaawansowanych funkcji znacząco poprawia efektywność oraz zwiększa bezpieczeństwo zarządzania danymi. Niezależnie od branży oferuje rozwiązania, które mogą sprostać nawet najbardziej wymagającym wyzwaniom biznesowym.

Czy Elasticsearch jest trudny we wdrożeniu i utrzymaniu?

W porównaniu do innych silników, tak. Na start trzeba dobrze zaplanować architekturę klastra, dobrać liczbę shardów i replik, skonfigurować monitoring, a potem na bieżąco zarządzać zawartością indeksu.

Sporym ułatwieniem jest natomiast Elastic Cloud, czyli usługa SaaS oferowana przez twórców silnika – pozwala hostować go w chmurze, co zdejmuje konieczność zarządzania całą infrastrukturą.

Czy Elasticsearch zastępuje bazę danych SQL?

Nie i nie powinien być traktowany jako zamiennik, a jedynie jako warstwa wyszukiwania i analizy danych z baz SQL. Zazwyczaj wygląda to tak, że dane z bazy synchronizuje się do Elasticsearch przez Logstash. W ten sposób użytkownicy mogą korzystać z silnika do zapytań wymagających wyszukiwania pełnotekstowego lub agregacji. Oryginalnym źródłem danych cały czas pozostaje baza SQL.

Czy Elasticsearch nadaje się do małych projektów?

Rzadko jest to dobry wybór. Jeśli mówimy o zbiorze liczącym kilka-kilkanaście tysięcy rekordów i wymagającym jedynie prostych zapytań, trudno będzie uzasadnić wydatki związane z wdrożeniem oraz utrzymaniem klastra Elasticsearch. Przy takiej skali w większości projektów w zupełności wystarczy PostgreSQL z rozszerzeniem pg_trgm lub wbudowanym FULLTEXT w MySQL.

Elasticsearch vs OpenSearch – czym się różnią w praktyce?

OpenSearch powstał w 2021 roku jako fork Elasticsearch, po tym, jak Elastic zmieniło licencję swojego flagowego produktu z Apache 2.0 na podwójną: SSPL oraz Elastic License. Warto jednak dodać, że w 2024 roku Elastic ponownie wprowadził opcję licencji Open Source (AGPL).

Oba silniki bazują na Apache Lucene i do dziś dzielą dużą część kodu – w 90% zastosowań różnicy między nimi nie da się odczuć, choć przy naprawdę złożonych zapytaniach benchmarki publikowane przez Elastic wskazują na pewne różnice w wydajności (na korzyść Elasticsearch).

Oceń wpis
4.7
Ocena: 4.7 Liczba głosów: 12

Dziękujemy za ocenę postu!

Mamy więcej darmowych treści. Nie rezygnuj z nich!
Technologie, SEO, marketing - newsletter z poradami, które od razu możesz wdrożyć! Prosto na Twoją skrzynkę. Za darmo i bez spam
CAPTCHA