Uvodni tutorijal u Elasticsearch, motor za pretragu celog teksta
Uvodni tutorijal u Elasticsearch, motor za pretragu celog teksta
Učenje je zaista nešto što raduje. Kada sam prošli put podelio članak o Redis uvodu, dobio sam mnogo ohrabrenja od čitalaca, na primer: "Opa, nije loše, Erge, razumljivo i jednostavno, zaista sam ušao u temu za deset minuta". Vidite, vidite, odlučio sam da nastavim u istom ritmu i uđem u Elasticsearch, jer je sistem prodavnice naše firme nadograđen i za pretragu proizvoda treba da koristi Elasticsearch.
Međutim, prvo moram da napomenem: nisam duboko proučavao Elasticsearch, učim ga samo zato što mi treba. Ali, kao odgovoran tehnički bloger, pristupio sam tome savesno, pa sam čak i specijalno u jedno vreme kupio video kurs čiji se autor zove Ruan Yiming. Iskreno, njegova ćelava glava probudila je moj snažan interes za taj kurs.
Nakon tri dana i tri noći učenja, konačno sam ušao u Elasticsearch, pa sam odlučio da podelim ove utiske i saznanja — zainteresovani čitaoci mogu ih koristiti kao referencu. Ako u tekstu naiđete na greške, nemojte biti blagi; dođite da me isprebijate, samo mi ne udarajte lice.

01,Šta je Elasticsearch
Elasticsearch je distribuirani, RESTful pretraživački motor i motor za analizu podataka, sposoban da reši razne slučajeve upotrebe koji se neprestano pojavljuju. Kao jezgro Elastic Stack-a, on centralno skladišti vaše podatke i pomaže vam da otkrijete i očekivano i neočekivano.
Gornji citat je zvaničan; moram priznati da je objašnjenje prilično poetski. "Očekivano i neočekivano" — te dve reči podsećaju me na temu jednog prijemnog ispita za fakultet (očekivano u skladu sa razumom i izvan očekivanja).
A šta je Elastic Stack? Cela arhitektura je prikazena na sledećoj slici (preuzeto sa interneta; ako postoji povreda prava, biće uklonjeno).

Puno informacija, zar ne? Onda zapamtite jednu rečenicu: Elasticsearch je jezgro Elastic Stack-a.
Mnoge poznate domaće i strane kompanije koriste Elasticsearch, na primer DiDi, Toutiao, Google, Microsoft itd. Elasticsearch ima mnogo moćnih funkcija, kao što su pretraga celog teksta, preporuke pri kupovini, preporuke na osnovu obližnje lokacije itd.
O teoriji neću previše govoriti, bojim se da bi čitaoce moglo da zamori. Uostalom, ovo je uvod, pa je praksa ono što je važno.
02,Instalacija Elasticsearch-a
Elasticsearch je razvijen u Javi, pa su ranije verzije zahtevale da se prvo na računaru instalira JDK. Novije verzije imaju ugrađeno Java okruženje, pa je dovoljno samo preuzeti ih. Elasticsearch ima različite instalacione pakete za različite operativne sisteme; u ovom uvodnom članku uzećemo Windows kao primer.
Adresa za preuzimanje je sledeća:
https://www.elastic.co/cn/downloads/elasticsearch
Najnovija verzija je 7.6.2, oko 280 MB. Ali mi je trebalo čitavih 10 minuta da je preuzmem; ne znam da li je problem u 200M vezi koja nije "vukla", ili zvanični sajt sam po sebi spor za preuzimanje — u svakom slučaju, otišao sam da operem 6 zrna grožđa i pojedem ih, a preuzimanje još uvek nije bilo gotovo.
Elasticsearch ne zahteva instalaciju — dovoljno je raspakovati zip paket.

U direktorijumu bin nalaze se skriptni fajlovi, uključujući izvršni fajl za pokretanje Elasticsearch-a.
U direktorijumu config nalaze se konfiguracioni fajlovi.
U direktorijumu jdk nalazi se ugrađeno Java izvršno okruženje.
U direktorijumu lib nalaze se Java biblioteke klasa.
U direktorijumu logs generisaće se log fajlovi.
U direktorijumu modules nalaze se moduli Elasticsearch-a.
U direktorijum plugins mogu se smestiti dodaci (plugin-ovi) za Elasticsearch.
Dovoljno je dvoklikom pokrenuti fajl elasticsearch.bat u direktorijumu bin da se podigne Elasticsearch servis.

Izlaznih log poruka je prilično mnogo, ne treba ih detaljno čitati; dovoljno je primetiti natpis "started" koji ukazuje na to da je pokretanje uspelo. Da biste se dodatno uverili da li je Elasticsearch uspešno podignut, u adresnu traku pregledača možete uneti http://localhost:9200 (9200 je podrazumevani port Elasticsearch-a).

Vidite — za Search.
A kako zaustaviti servis? Možete direktno pritisnuti kombinaciju tastera Ctrl+C — grubo, ali delotvorno.
03,Instalacija Kibana-e
Pomoću Kibana-e možemo vizuelno upravljati Elasticsearch servisom, slično kao kada se na Linux operativni sistem instalira grafičko okruženje.
Adresa za preuzimanje je sledeća:
https://www.elastic.co/cn/downloads/kibana
Najnovija verzija je 7.6.2, oko 284 MB, iste veličine kao i Elasticsearch. Izaberite Windows verziju u zip formatu, a nakon preuzimanja je samo raspakujte. Tokom preuzimanja ponovo sam otišao da operem 6 zrna grožđa i pojedem, hej (smeško).

Sadržaj direktorijuma paketa neću pojedinačno objašnjavati; uđite u direktorijum bin, dvoklikom pokrenite fajl kibana.bat i podignite Kibana servis. Ceo proces je nešto sporiji nego kod Elasticsearch-a; kada se pojavi poruka [Kibana][http] http server running, to znači da je servis uspešno pokrenut.

U adresnu traku pregledača unesite http://localhost:5601 da vidite grafičko okruženje Kibana-e.

Pošto Elasticsearch server trenutno još uvek nema nikakve podatke, možemo izabrati "Try Our Sample Data" i uvesti probne podatke koje pruža Kibana, kako bismo se upoznali sa njom. Sledeća slika je kontrolna tabla nakon uvoza baze podataka o e-trgovini — zar nije bogata?

Otvorite panel Dev Tools; tu se može videti jednostavna DSL naredba za upit (jezik specifičan za domen, potpuno zasnovan na JSON-u), a klikom na dugme "Pokreni" (Run) videćete podatke u JSON formatu.

04,Ključni koncepti Elasticsearch-a
Pre sledećeg koraka, treba razumeti nekoliko ključnih koncepata u Elasticsearch-u, na primer šta je indeks, šta je tip, šta je dokument itd. Pošto je Elasticsearch motor za podatke, neki koncepti u njemu imaju određenu vezu sa MySQL-om.

Nakon što pogledate gornju sliku (preuzetu sa interneta; ako postoji povreda prava, biće uklonjeno), sve postaje jasno u trenu. Skladištenje podataka u Elasticsearch zapravo znači skladištenje JSON podataka u tip (type) koji se nalazi pod indeksom (index) u Elasticsearch-u.
05,Korišćenje Elasticsearch-a u Javi
Neki čitaoci možda pitaju: "Erge, ja sam Java programer, kako da koristim Elasticsearch u Javi?" To je dobro pitanje, evo odmah.
Pošto Elasticsearch ima ugrađeno Java izvršno okruženje, prirodno pruža niz API-ja preko kojih možemo raditi s njim.
Prvi korak: dodajte zavisnost Elasticsearch klijenta u projekat:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>Drugi korak: napravite test klasu ElasticsearchTest:
public class ElasticsearchTest {
public static void main(String[] args) throws IOException {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
IndexRequest indexRequest = new IndexRequest("writer")
.id("1")
.source("name", "Chenmo Wang Er",
"age", 18,
"memo", "zanimljiv programer");
IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
GetRequest getRequest = new GetRequest("writer", "1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
String sourceAsString = getResponse.getSourceAsString();
System.out.println(sourceAsString);
client.close();
}
}- RestHighLevelClient je REST klijent koji pruža Elasticsearch; preko HTTP-a se povezuje na Elasticsearch server, a parametri su ime hosta i broj porta.
Sa RestHighLevelClient klijentom možemo slati zahteve Elasticsearch serveru i dobijati odgovore.
- IndexRequest služi za dodavanje indeksa Elasticsearch serveru; parametar je ključna reč indeksa, na primer "writer", a može se zadati i id. Preko source-a trenutnom indeksu se može dodati izvor podataka dokumenta (u obliku parova ključ-vrednost).
Kada imamo IndexRequest objekat, možemo pozvati metod index() klijenta i dodati indeks Elasticsearch serveru.
- GetRequest služi za slanje get zahteva Elasticsearch serveru; parametri su ključna reč indeksa i id.
Kada imamo GetRequest objekat, možemo pozvati metod get() klijenta i sa Elasticsearch servera preuzeti indeks. getSourceAsString() služi da iz odgovora izdvoji izvor podataka dokumenta (u obliku JSON stringa).
Dakle, pogledajmo izlaz programa:
{"name":"Chenmo Wang Er","age":18,"memo":"zanimljiv programer"}Potpuno u skladu sa očekivanjem, savršeno!
Indeks "writer" možete pogledati i preko panela Dev Tools u Kibana-i; rezultat je prikazan na sledećoj slici.

06,Zahvalnost
Dakle, dragi čitaoci, to je ceo sadržaj ovog članka; zar vam nakon čitanja ne pada na pamet da stavite Elasticsearch na praktičnu probu — navali! Ako u toku učenja naiđete na probleme, slobodno mi se obratite; iako sam i ja početnik, imam zanosa.
Inače, ako želite da pišete uvodne članke, ovaj tekst je najbolji primer.
