Sunteți pe pagina 1din 9

Elasticsearch

Integrarea sistemelor informatice

Ginel Guiu
Ce este Elasticsearch?
Elasticsearch este un motor de căutare de tip text, scalabil și open-source. Permite
stocarea, căutarea și analiza volumelor mari de date în timp real. Este folosit în general ca
tehnologia de bază a aplicațiilor ce implementază funcționalități de căutare complexe.
Elasticsearch oferă un sistem distribuit bazat pe Lucene StandardAnalyzer pentru indexare și
predicție automată, folosind un REST API bazat pe JSON pentru transpune funcționalitățile
Lucene. Este ușor de setat, întrucât vine cu funcționalități de bază intuitive și ascunde
complexitatea pentru începători.
Elasticsearch nu folosește schema, recurgând la valori default pentru a indexa datele,
mai puțin în cazurile în care utilizatorul creează mapări în funcție de nevoile personale.
Funcționalitățile Elasticsearch sunt expuse, după cum spuneam, ca API-uri REST în felul
următor:

 Index API: folosit pentru a documenta indecșii


 Get API: folosit pentru a regăsi documente
 Search API: folosit pentru a interoga și pentru a primi rezultate
 Put Mapping API: folosit pentru a suprascrie valori default și pentru a defini
mapări

Concepte de bază Elasticsearch


1.Nod – un nod este un singur server ce face parte dintr-un cluster, stochează datele
aplicației și participă în sarcinile clusterului de indexare și căutare. Asemeni
clusterului, un nod este identificat printr-un nume ce este un UUID(Universally
Unique Identifier) generat aleator și atribuit nodului la startup.
2.Cluster – un cluster este o colecție de unul sau mai multe noduri care, adunate,
conțin toate datele aplicației și oferă capacități de indexare și căutare.
Elasticsearch operează într-un mediu distribuit: prin replicare cross-cluster, un
cluster secundar poate fi folosit ca backup.
3.Index – indexul este o colecție de documente ce au caractersitici similare. De
exemplu, putem avea un index pentru un client specific, altul pentru informații
legate de un produs și un altul pentru rapoarte matematice. Într-un cluster
putem defini câți indecși dorim. Un index este similar unei baze de date într-o
RDBMS(Relational Database Management System)
4.Document – un document este o unitate de informație de bază ce poate fi
indexată. De exemplu, poți avea un index despre produsul aplicației și un
document pentru un singur client. Documentul este exprimat în formatul
JSON(JavasScript Object Notation), asemănător cu o singura informație de tip
raw dintr-o bază de date. Într-un index pot fi stocate oricât de multe documente
își dorește utilizatorul, astfel încât în același index putem avea un document
pentru un singur produs și un altul pentru o singură tranzacție
5.Shards – Elasticsearch oferă posibilitatea de a împărți un index în mai multe părți
denumite shards. Fiecare shard este un „index” de sine stătător care poate fi
hostat pe orice nod din cluster. Acestea sunt vitale pentru că oferă posibilitatea
paralelizării operațiilor aplicației prin împărțirea datelor pe mai multe noduri,
crescând astfel performanța. Un shard poate fi folosit, de asemenea, pentru a
realiza copii după indecși.

Avantaje
 Diversitatea opțiunilor de căutare – Elasticsearch implementează o mulțime de
funcționalități când vine vorba de căutare, cum ar fi împărțirea personalizată a
textului în cuvinte, fațete pentru căutare, căutare full-text, autocompletare și
căutare instantă. De asemenea, propune și fuzzy search pentru a incorpora și
greșelille de scriere.
 Orientarea de tip document – stocarea documentelor JSON și indexarea tuturor
câmpurilor oferă ca rezultat o performanță crescută.
 Viteză – Elasticsearch este capabil să execute interogări complexe într-un timp
incredibil de scurt. De asemenea, stochează în cache aproape toate interogările
structurate (structured queries) folosite des ca un filtru pentru setul de rezultate
și le execută o singură dată. Pentru orice altă cerere ce conține un filtru din
cache, verifică rezultatul din cache.
 Scalabilitate – dezvoltatorii apreciază Elasticsearch pentru că este un sistem
distribuit, oferind abilitatea de a extinde resurse și echilibra încărcarea dintre
noduri într-un cluster.
 Înregistrarea datelor – Elasticsearch loghează orice schimbări efectuate în log-uri
de tranzacții, pe noduri multiple în cluster, pentru a minimiza șansa pierderii
datelor.
 Optimizarea interogărilor – Elasticsearch are un DSL(Domain Specific Language)
bazat pe JSON eficient, care le permite dezvoltatorilor să realizeze interogări
complexe și să le optimizeze pentru a primi cele mai precise rezultate în urma
căutărilor
Cum poate fi integrat Elasticsearch

Integrarea Elasticsearch se poate face în 3 pași rapizi:


1. Descărcarea și rularea Elasticsearch – Elasticsearch vine sub forma unei arhive în
interiorul căreia se află un batch ce, odată rulat, va porni Elasticsearch pe computerul
curent. Fără a fi modificat, Elaticsearch folosește port-ul 9200. Folosind un REST API, se
pot executa cereri de tip:

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d


'<BODY>'

2. Indexarea documentelor – odată ce a fost rulat și, astfel, primul cluster este disponibil,
utilizatorul poate își poate indexa datele. Acest lucru poate fi realizat simplu printr-o
operație de tip PUT, căreia i se specifica indexul ce dorește a fi adăugat unui document
de tip JSON, id unic și una sau mai multe perechi de tip “field”: “value”. De exemplu:

PUT /student/_doc/1
{
"nume": "Guiu Ginel"
}
Mult mai utilă este, însă, indexarea de tip bulk, care îi permite utilizatorului să indexeze
un număr cât se poate de ridicat de documente. Aceasta poate fi realizată printr-o
comandă asemănătoare:
curl -H "Content-Type: application/json" -XPOST
"localhost:9200/bank/_bulk?pretty&refresh" --data-binary
"@accounts.json”
curl "localhost:9200/_cat/indices?v"
3. Începerea căutărilor – odată ce documentele au fost indexate, pot fi începute căutările
pe aceste date, fiind folosite operații de tip GET al căror body este compus din termenii
căutării.

Performanța Elasticsearch în comparație cu alte


tehnologii
Fiind folosit același set de fișiere, a fost testată diferența dintre durata încărcării datelor
în MySQL și în Elasticsearch.
După cum putem vedea, indexarea datelor în Elasticsearch a durat mult mai puțin în
Elasticsearch decât importarea datelor în MySQL. Folosind aceleași date, a fost testarea viteza
căutării și returnarea rezultatelor în comparație cu Laravels Eloquent. Folosindu-se un singur
nume, s-a ajuns la următoarele rezultate:
Rezultate Elasticsearch
Rezultate Eloquent
Putem observa o diferență semnificativă între Elasticsearch și Eloquent, și asta având in
vedere că interogarea folosită a fost una simplă, căutarea realizându-se prin trei proprietăți.
Orice altă interogare adăugată crește exponențial timpul pe Eloquent, iar pe Elasticsearch
marginea de creștere este între 20-30%.

Concluzie
Consider că acest referat subliniază perfect avantajele folosirii Elasticsearch pentru
funcționalitățile de căutare ale unei aplicații. Performanța, scalabilitatea, facilitatea
implementării și logarea extensivă reprezintă argumente care ar trebui să elimine orice dubiu
din mintea celor care consideră implementarea Elasticsearch-ului.
Personal, pot spune că am avut o experiență de tip hands-on cu Elasticsearch-ul,
întrucât, toamna trecută, ni s-a cerut la locul de muncă să implementăm Elasticsearch-ul în
aplicația de care ne ocupam. Aceasta lucra cu milioane de companii, iar tool-ul pe care îl folosea
până atunci nu mai făcea față într-un mod adecvat. Odată ce am finalizat implementarea,
diferența s-a simțit notabil, iar căutarea a devenit considerabil mai rapidă. Iar acesta ar trebui
să fie primul criteriu în judecarea unui motor de căutare.
Bibliografie
https://towardsdatascience.com/an-overview-on-elasticsearch-and-its-usage-e26df1d1d24a

https://dzone.com/articles/what-is-elasticsearch-and-how-it-can-be-useful

https://marutitech.com/elasticsearch-can-helpful-business/

https://medium.com/@factoryhr/elasticsearch-introduction-implementation-and-example-
17dd66c35c35

https://dzone.com/articles/elastic-search-advantages-case-studies-amp-books

https://www.elastic.co/guide/index.html

https://www.elastic.co/guide/en/elastic-stack-get-started/current/index.html

S-ar putea să vă placă și