Wybierz region
pl
  • PL
  • EN
Wydrukuj

Elastic Search dla .NET Developerów w przykładach dla .NET Core – część 4

W poprzednim odcinku pokazaliśmy jeden z przykładów użycia Elastic Search, a było to zbieranie logów oraz metryk. W ostatniej części naszej serii pokażemy, w jaki sposób napisać proste aplikacje, wyszukujące dane za pomocą Elastic Search.

Konfiguracja stosu Elastic Search

Zacznijmy jednak od przypomnienia, z jakich elementów składa się nasze środowisko Elastic Search, a są to:

  • Elastic Search,
  • Kibana,
  • APM.

 

Omówienie aplikacji

Wyszukiwarkę danych pokażemy na przykładzie prostej aplikacji ASP .NET Core Mvc Razor Pages, którą wygenerowano ze standardowego szablonu aplikacji dla .NET Core. Cały kod omawianej aplikacji możemy odszukać na serwerze GitHub w następującym repozytorium:

https://github.com/mrozim78/DotnetForElasticSearch.

(w katalogu Elastic.Kibana.Examples podkatalog Elastic.Kibana.Examples.Search)

Aplikacja posiada cztery strony: Index, Populate, Search, Error. Strona Index zwraca stronę główną naszej aplikacji, a Error zawiera obsługę błędów. Najbardziej interesujące nas strony to Populate oraz Search. Strona Populate zawiera logikę zakładania indexu na Elastic Search oraz zasilenie go przykładowymi danymi. Za pomocą strony Search mamy możliwość wyszukania tych danych oraz ich prezentację na stronie.

Analizę naszej aplikacji rozpocznijmy od pliku Startup.

W metodzie ConfigureServices następuje zestawienie połączenia do Elastic Search i dodanie go jako singleton do serwisów aplikacji.

Zauważmy, że konfiguracja połączenia zawarta jest w pliku konfiguracyjnym json w polu ElasticSearchUrl.

Ponadto dla połączenia do Elastic Search włączono tryb Debug do monitorowania zapytań. Wykorzystujemy tę funkcje do pokazywania informacji Debug w naszej aplikacji.

Główna logika naszej aplikacji zawarta jest w pliku Search Logic.

 

Omówmy po kolei metody z tej klasy. Zacznijmy od CreateIndexElasticSearch. W tej metodzie, na podstawie przygotowanej klasy Post, która zawiera nasze dane, w szczególności jeden dokument, tworzymy indeks w Elastic Search. Klient Elastic Search analizuje tę klasę i przygotowuje jej odpowiednie odzwierciedlenie w postaci indeksu w Elastic Search. Następna metoda PopulateElasticSearch przygotowuje przykładowe dane i wysyła je do zapisania do Elastic Search. Ostatnią metodą, którą omówimy jest SearchPosts. W metodzie tej na podstawie przekazanej klasy z parametrem wyszukiwania następuje odpytanie Elastic Search o dane z naszego indeksu. Zauważmy, że jest to zapytanie typu „match_phrase”.

Wywołanie strony Populate  w metodzie OnGet woła dwie pierwsze metody, czyli zakłada nasz index „posts” oraz wpisuje do niej przykładowe dane.

Logika strony Search zawiera wyszukiwarkę naszych wpisów, czyli zawołanie trzeciej z omawianych metod, tj. SearchPosts. Pobiera ona dane z tej metody i prezentuje je w postaci tabelarycznej oraz wyświetla informacje Debug dla klienta Elastic Search.

Wszystko odbywa się w metodzie OnPost.

W całej aplikacji użyty jest specjalny wysokopoziomowy klient Elastic Search o nazwie NEST. Szczegóły, co do jego wersji oraz nazwy paczki nuget, możemy odszukać w odpowiednim pliku csproj naszego projektu.

Podsumowując, możemy zauważyć, że napisanie prostej aplikacji która wykorzystuje silnik Elastic Serch w celu wyszukiwania danych nie jest skomplikowana. Cały proces sprowadza się do instalacji odpowiedniego klienta wysokopoziomowego NEST i użycia jego odpowiednich metod. Samo API klienta NEST, które jest przykładem FluentApi stanowi odpowiednie odzwierciedlenie zapytań zadawanych do Elastic Search.

Tym sposobem doszliśmy do końca naszej podróży z Elastic Search. Mam nadzieje, że dość skutecznie pokazałem Wam, jaki potencjał niesie to rozwiązanie i użyjecie go w swoich przyszłych lub obecnych projektach.


Remigiusz Mrozek

Architekt w Pionie Energetyki i Gazownictwa. Na co dzień koduje w C#, prywatnie pasjonat nowych technologii ze szczególnym ukłonem w odmęty Big Data i Machine Learningu. Mistrz Gry, zawsze z najbardziej psychodeliczną fabułą. Można go spotkać na Coperniconie i Pyrkonie!


Wydrukuj