Elasticsearch jako narzędzie do przeszukiwania danych
Użytkownicy aplikacji internetowych oczekują lepszych i szybko działających systemów. Zatem jeśli chcemy zatrzymać potencjalnego klienta na naszej stronie, trzeba w szybki sposób przedstawiać mu kolejne dane. Jest to idealny czas na rozważenie integracji z Elasticsearch, a ja w serii kilku artykułów postaram się przedstawić, czym jest ten twór oraz zaprezentuję kilka przykładowych zastosowań.
Czym jest?
Elasticsearch jest silnikiem wyszukiwania i analizy danych pozwalającym również na składowanie danych. Cechuje się dużą szybkością oraz skalowalnością. Komunikacja z silnikiem odbywa się przy użyciu zapytań REST, dzięki czemu jest bardzo prosta w zaimplementowaniu do naszego systemu. Powstało także wiele bibliotek, które usprawniają pracę między innymi w języku Python.
Elasticsearch może być wykorzystany do:
- stworzenia wyszukiwarki typu autocomplete,
- wyszukiwania punktów geolokalizacyjnych w okolicy innego punktu,
- wyszukiwanie zdarzeń, które wydarzyły się w okolicy określonego punktu w czasie,
- stworzenia rankingu elementów (np. książek, sportowców, obiektów sportowych),
- i wiele, wiele innych…
Kiedy używać?
Może wydawać się, że jeśli Elasticsearch jest tak świetny, to trzeba go brać i się za długo nie zastanawiać. Osobiście uważam, że o wiele przyjemniej pracuje się z relacyjnymi bazami danych i zaprzęganie Elasticsearch jako głównej bazy danych w systemie nie ma większego sensu. Baza ta bowiem jest świetna, jeśli potrzebujemy rozwiązania, które pozwoli nam na wyświetlanie końcowemu klientowi danych w czasie niemalże rzeczywistym. Wykorzystaliśmy to między innymi podczas prac nad algorytmem rekomendacji w jednym z tworzonych systemów, gdzie dzięki Elasticsearch czas działania algorytmu skrócił się pięciokrotnie i uzyskaliśmy wyniki na poziomie 0,5 sekundy. Oczywiście różnice w czasie będą odczuwalne dopiero wtedy, gdy będziemy posiadać dużo danych do przetworzenia.
Podstawowe pojęcia
Aby lepiej zrozumieć działanie i zastosowania zapoznajmy się z podstawowymi pojęciami.
Index
Pojęcie to można rozumieć jako bazę danych w podejściu relacyjnym. Jest to zatem „worek” na nasze dane, czyli documenty. Jeżeli chcielibyśmy znaleźć analogię do świata rzeczywistego, to myślę, że takim indexem jest półka na listy. Index powinien skupiać documenty, które opisują ten sam element rzeczywistości.
Document
Jest to konkretny wpis w naszym indexie. Document zapisany jest w formacie JSON, a co za tym idzie, oprócz samych danych zawiera także definicję struktury. Przykładowy document wygląda następująco:
{ "first_name": "John", "last_name": "Doe", "location": { "lat": 41.12, "lon": -71.34 } }
Elasticsearch pozwala na stworzenie wielu indexów, a każdy z nich może posiadać wiele documentów. Index może być przeznaczony do konkretnego typu wyszukiwania, ale możemy go skonfigurować również tak, aby przeszukiwał dokumenty na różne sposoby (zarówno pełnotekstowo, jak i dzieląc zawarte teksty na fragmenty).
Reasumując
Elasticsearch jest (silnikiem wyszukiwania przede wszystkim!) bazą danych pozwalającą na wyszukiwanie i analizę danych w czasie niemalże rzeczywistym. Komunikacja z nią opiera się na zapytaniach REST i obiektach zapisanych w JSON. W kolejnym wpisie zaprezentuję przykładowe zastosowanie tego narzędzia wraz z kodem źródłowym.