furkannzmnn / Elasticsearch-Adapter

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Elasticsearch-Adapter

Icerik

Sunum Kaydi:

ElasticSearch'ün Derinliklerine Doğru

https://www.youtube.com/live/cWDXQbjYRgg?si=OW0zTRod9lgAFKyE

Elasticsearch Nedir?

Elasticsearch, veri arama, analiz ve gorsellestirme islemlerini hizli ve etkili bir sekilde gerceklestirmenizi saglayan bir acik kaynakli veri arama ve analiz platformudur. Elasticsearch, buyuk miktardaki verileri duzenli bir sekilde saklayabilen, hizli ve olceklenebilir bir veritabani ve arama motoru(full-text search) olarak dusunulebilir.

Full Text Search Nedir?

full-text-search

full-text-search

Elasticsearch'un Avantajlari

benefits-elastic

  • High Performance(Yuksek Performans):

    Elasticsearch, guclu tam metin arama yetenekleriyle bilinir. Apache Lucene altyapisi kullanarak ters indeksleme ve gelismis arama algoritmalari kullanarak hizli ve dogru arama sonuclari saglar. Tipik bir SQL veritabanindan daha hizlidir.

  • Near Real-Time Operations(Neredeyse Gercek Zamanli Islemler):

    Veri okuma veya yazma gibi Elasticsearch islemleri genellikle bir saniyeden daha kisa surede tamamlanir. Bu nedenle Elasticsearch'ten uygulama izleme ve anormallik algilama gibi neredeyse gercek zamanli kullanim amaclari dogrultusunda faydalanabilirsiniz.

  • Lots of Search Options(Cok Sayida Arama Secenegi):

    Elasticsearch, arama konusunda bircok ozellik sunar. Full-text search(tam metin arama),auto-complete(otomatik tamamlama), instant search(anlik arama) ve daha fazlasini alabilirsiniz.

    Autocompletion(Otomatik tamamlama) ve instant search(anlik arama), yazarken oneriler sunar. Oneriler, arama gecmisi veya ilgilige dayali olarak tahmin edilir. Ayrica yazim hatasi varsa bile kullanicilar ilgili aramalar alir.

  • Distributed Approach(Dagitik mimari):

    Elasticsearch, dagitik bir mimaride calisir. Sonuc olarak, buyuk miktarda veriyi hizli bir sekilde isleyebilir. Diziler parcalara ayrilir. Parcalar tam islevli bir dizin gibi calisir. Her parcada cok sayida kopya olabilir. Bu parcalari Elasticsearch kumesinin herhangi bir yerine barindirabilirsiniz.

  • Cluster and Backup Support (Cluster ve Yedekleme Destegi):

    Elasticsearch, coklu dugumlerden (nodes) olusan bir kume (cluster) icinde calisabilir. Bu, yuksek kullanilabilirlik saglamak ve veri kaybini onlemek icin onemlidir. Ayrica, verilerin yedeklenmesi icin kapsamli bir sistem sunar.

  • Plugins and Integrations(Eklentiler ve Entegrasyonlar):

    Elasticsearch, eklentiler ve entegrasyonlarla yuksek uyumludur. Eklentiler, islevselligi artirmak ve aramalari ozellestirmek icin kullanilir. Ozel eslemeler, analizciler ve kesifler eklemeye yardimci olur.

  • RESTful API:

    Elasticsearch, sundugu basit REST tabanli API'ler sayesinde hizmeti hizla kullanmaya baslamanizi ve farkli kullanim orneklerine uygun uygulamalar tasarlamanizi saglar.

  • Security(Guvenlik):

    Elasticsearch, kullanici kimlik dogrulama, erisim kontrolu ve veri sifreleme gibi guvenlik onlemlerini destekler.

  • Easy Application Development:

    Kolay uygulama gelistirme Java, Python, PHP, JavaScript, Node.js, Ruby ve daha bircok dil icin destek sunar.

Elasticsearch Kullanim Alanlari

1. Web Arama ve Indeksleme

2. Metin Analizi ve Madencilik

3. Log Yonetimi

4. Muzik ve Medya Isleme

5. E-ticaret ve Pazarlama

6. Urun ve Icerik Onerileri

7. Finansal Veri Analizi

Elasticsearch Temel Kavramlari Neler?

index = database
field = column
document = row
type = table

Index Elasticsearch'te verilerin duzenli bir sekilde depolandigi birimdir ve genellikle bir kutuphane koleksiyonunu temsil eder. Ornegin, bir kutuphane sistemi, kitaplarin depolandigi bir "kitaplar" endeksi olusturabilir.
Document Elasticsearch endekslerinde saklanan verilerin temel yapi tasidir. Genellikle JSON formatinda bilgileri icerir ve bir kitabin tum ayrintilarini icerebilir, bu da kitap adi, yazar, yayin tarihi gibi bilgileri icerir.
Field Elasticsearch dokumanlari icindeki verileri temsil eden bilesendir. Ornegin, bir kitap dokumaninda "kitap adi" veya "yazar" gibi alanlar birer field'dir.
Type (Tur, Artik Onerilmemektedir) Elasticsearch 6.0 ve sonraki surumlerde kullanimdan kaldirilmis olsa da, Elasticsearch 5.0 ve onceki surumlerde bulunan bir kavramdir. Type, bir dizindeki belgelerin altinda bulunan turdur.
Indexing Elasticsearch'te yeni dokumanlarin endekslendigi veya mevcut dokumanlarin guncellendigi islemdir. Veri eklemek veya degistirmek icin kullanilir.
Query Elasticsearch'te veri sorgulamak icin kullanilan bir terimdir. Belirli kriterlere uyan dokumanlari aramak veya filtrelemek icin kullanilir.
Mapping Elasticsearch'te veri yapisini tanimlayan bir yapidir. Hangi alanlarin hangi veri turlerini icerdigini ve hangi analizleri uyguladiginizi belirtir. Ornegin, bir alanin metin veya sayi veri turunde oldugunu ve dil analizi uygulandigini belirtmek icin kullanilir.
Analysis Elasticsearch'te metin verilerinin islenme surecidir. Metinleri dil analizi ve belirli kriterlere gore ayristirma islemi icerir. Bu, metin tabanli aramalari daha etkili hale getirir.
Cluster Elasticsearch sunucularinin bir araya gelerek olusturdugu bir yapidir. Verilerin guvenli bir sekilde depolanmasi ve sorgulanmasi icin kullanilir.
Node Elasticsearch kumesinin bir parcasi olan bir sunucu veya dugumdur. Verileri depolar ve sorgulari isler. Birden cok node, bir cluster olusturur.
Shard Elasticsearch endekslerinin bolundugu fiziksel veya mantiksal birimlerdir. Veri dagitimini ve performansi optimize etmeye yardimci olur.
Replica Bir endeksin yedek kopyasidir ve veri yedeklemesi saglar. Arizali bir nodenin yerine gecebilir ve veri kaybini onler.

Elasticsearch vs SQL

companies

Summary Query Nedir?

Summary Query: Genel bir bakis sunar. Genellikle veri toplamalarini ve sonuclari daha yuksek duzeyde ozetlemeyi amaclar.

Ornegin, bir musterinin toplam siparis tutarini gosterir:

SELECT musteri_id,
       ad,
       soyad,
       SUM(siparis_tutari) AS toplam_siparis_tutari
FROM Musteriler
GROUP BY musteri_id, ad, soyad

Bu sorgu, her musterinin adini, soyadini ve toplam siparis tutarini ozetler.

Detail Query Nedir?

Detail Query: daha spesifik veya ayrintili verileri cekmeyi amaclar. Bu tur sorgular, genellikle belirli bir kosulu karsilayan veya belirli bir veri kesimini getiren sorgulardir.

Ornegin, belirli bir musterinin siparislerini listeleyecektir.

SELECT musteri_id,
       siparis_id,
       siparis_tarihi,
       urun_adi,
       miktar,
       siparis_tutari
FROM Siparisler
WHERE musteri_id = 'belirli_musteri_id'

Bu sorgu, belirli bir musterinin (musteri kimlik numarasina gore filtrelenmis) her bir siparisini ve siparislerin ayrintilarini listeleyecektir.

Elasticsearch Sorgu Tipleri

Match Query Belirli bir metin terimini veya sorgu ifadesini arar ve eslesen belgeleri dondurur.
Term Query Belirli bir alanin degerinin tam eslesme icin kullanilir.
Bool Query Mantiksal operatorleri (AND, OR, NOT) kullanarak birden cok sorguyu birlestirmek icin kullanilir.
Range Query Bir alanin belirli bir araliga dusup dusmedigini kontrol eder.
Fuzzy Query Benzer ancak kesin olmayan terimleri aramak icin kullanilir.
Wildcard Query Jokert karakterler (* veya ?) kullanarak eslesen terimleri bulmak icin kullanilir.
Prefix Query Belirli bir on ek ile baslayan terimleri aramak icin kullanilir.
Autocomplete Suggester Otomatik tamamlama islevselligi icin kullanilir ve kullanicinin yazmaya basladigi terimleri tamamlamak icin kullanilir.
Highlighting Eslesen terimleri veya metni vurgulamak icin kullanilir.
Aggregations Verileri toplamak, gruplamak ve analiz etmek icin kullanilir.
Ranking Functions Elasticsearch'in belgeleri siralamak icin kullanabileceginiz cesitli siralama islevleri vardir.
Match Phrase Query Metin teriminin tamamini iceren belgeleri dondurmek icin kullanilir.

Keyword ve Text Type Turleri Arasindaki Farklar

Keyword (Anahtar Kelime) Veri Turu:

"keyword" veri turu, veriyi orijinal haliyle saklar ve analiz uygulamaz. Bu, verinin tam olarak ayni sekilde saklanmasini ve tam eslesmeye dayali sorgular(term query) icin kullanilmasini saglar. Ozellikle yapilandirilmis veya anahtar degerler icin uygundur. Ornegin, e-posta adresleri, SKU numaralari, ulke kodlari gibi verileri "keyword" olarak saklayabilirsiniz.

Text (Metin) Veri Turu:

"text" veri turu, metin analizi uygulanarak veriyi indeksler. Bu, metindeki kelimeleri veya terimleri ayirir, kucuk harf donusumu yapar ve ozel karakterleri temizler. Metin icerigi uzerinde kelime tabanli aramalar, tam eslesme olmadan da sonuclar getirebilir. Bu nedenle metin icerigini daha iyi aranabilir hale getirir. Ozellikle metin icerigi aramalari yapmaniz gereken metin alanlari icin uygundur. Ornek olarak, bir makale metni veya bir kullanicinin aciklama alani "text" olarak saklanabilir.

Elasticsearch'u Kimler Kullaniyor?

companies

Endpoints ve Aciklamalari

Method Method Name Url Description Request Body
POST createIndex /api/v1/items Elasticsearch veritabanina veri eklemeyi saglar. Item
{ "id": "99", "name": "test", "price": 1, "brand": "test", "category": "test" }
POST addItemsFromJson /api/v1/items/init-index JSON'daki verileri alip Elasticsearch veritabanina kayit eder.
GET findAll /api/v1/items/findAll Elasticsearch veritabanina kaydedilmis tum verileri getirir.
GET getAllItemsFromAllIndexes /api/v1/items/allIndexes Elasticsearch veritabani icindeki tum indekslerdeki verileri getirir.
GET getAllDataFromIndex /api/v1/items/getAllDataFromIndex/{indexName} Elasticsearch veritabani icindeki istenilen indekslerdeki verileri getirir.
GET searchItemsByFieldAndValue /api/v1/items/search Elasticsearch veritabaninda istenilen alanda istenilen veriyi arar. SearchRequestDto
{ "fieldName": [ "name" ], "searchValue": [ "Ultimate" ] }
GET searchItemsByNameAndBrandWithQuery /api/v1/items/search/{name}/{brand} Elasticsearch veritabaninda isme ve markaya gore arama yapar.
GET boolQuery /api/v1/items/boolQuery Elasticsearch veritabaninda istenilen alanda istenilen veriyi bool query olarak arar. SearchRequestDto
{ "fieldName": [ "name", "brand" ], "searchValue": [ "mega", "xyz" ] }
GET autoSuggestItemsByName /api/v1/items/autoSuggest/{name} Bir urun adi alir ve Elasticsearch veritabaninda bu ada benzer urun adlarini bulup dondurur.
GET autoSuggestItemsByNameWithQuery /api/v1/items/suggestionsQuery/{name} Bir urun adi alir ve Elasticsearch veritabaninda bu ada benzer urun adlarini bulup dondurur.

searchItemsByNameAndBrandWithQuery'nin custom query'sinin aciklamasi:

@Query("{\"bool\": {\"must\": [{\"match\": {\"name\": \"?0\"}}, {\"match\": {\"brand\": \"?1\"}}]}}")
List<Item> searchItemsByNameAndBrandWithQuery(String name, String brand);
  • bool: Bu, Elasticsearch sorgusunun bir "bool" (boolean) sorgusu oldugunu belirtir. Bool sorgusu, baska sorgulari bir araya getirme ve mantiksal islemler yapma yetenegi saglar.

  • must: Bool sorgusunun icinde yer alan "must" bolumu, bu sorgunun icermesi gereken kosullari belirtir. Yani, bu sorgu, hem adi hem de markayi icermesi gereken belgeleri arar.

  • match: Bu, bir alanin (field) icerigini belirtilen bir degerle eslestirmek icin kullanilan sorgu turunu belirtir.

  • name ve brand: Bu, her bir "match" sorgusunun eslesecegi alanlarin adini belirtir. Yani, "name" alani belirtilen name degeri ile eslesmeli ve "brand" alani belirtilen brand degeri ile eslesmelidir.

  • "?0" ve "?1": Bu, "match" sorgularinin eslesecegi degerleri temsil eder. ?0 ve ?1 ifadeleri, bu sorgunun metodun parametrelerine sirasiyla name ve brand degerlerini alacagini gosterir. Yani, bu parametreler ile belirtilen degerlerle eslesmeyi arar.

Elasticsearch'u Docker Uzerinde Calistirma

Elasticsearh'u docker uzerinden calistirmak icin docker-compose.yml dosyasini kullanabilirsiniz. Bu dosyayi kullanarak Elasticsearch 8.8.0 surumunu calistirabilirsiniz.

version: '3'
services:
  elasticsearch:
    image: elasticsearch:8.8.0
    environment:
      - discovery.type=single-node
      - validate_after_inactivity=0
      - max_open_files=65536
      - max_content_length_in_bytes=100000000
      - transport.host=elasticsearch
      - xpack.security.enabled=false
    volumes:
      - $HOME/app:/var/app
    networks:
      - my-network
    ports:
      - "9200:9200"
      - "9300:9300"

networks:
  my-network:

Tech Stack

  • Java 17
  • Spring Boot 3.0
  • Spring Elasticsearch Data
  • Docker
  • Lombok

Requirements

For building and running the application you need:

Build & Run

  docker-compose -f docker-compose.yml up -d
  mvn clean install && mvn --projects backend spring-boot:run

Kaynakca:

About


Languages

Language:Java 100.0%