Elasticsearch

Elasticsearch Rehberi: Noves digital Kapsamlı Teknik Dokümantasyon

Noves TeamNoves Team
19 dk okuma
Elasticsearch Rehberi: Noves digital Kapsamlı Teknik Dokümantasyon

1. Elasticsearch Nedir? — Noves.digital İçin Kısa Tanım ve Özet

Elasticsearch, Apache Lucene tabanlı, dağıtık yapıda çalışan ve RESTful API üzerinden erişilen açık kaynaklı bir arama ve analitik motorudur. JSON formatında veri depolayan bu platform, yapılandırılmış ve yapılandırılmamış veriler üzerinde milisaniyeler içinde tam metin arama, coğrafi sorgular ve karmaşık analitik işlemler gerçekleştirir. Noves.digital ekibi olarak React, Next.js ve Node.js tabanlı projelerimizde Elasticsearch'i e-ticaret arama motorları, log analizi ve öneri sistemleri için aktif olarak kullanıyoruz. Özellikle büyük ölçekli web uygulamalarında PostgreSQL veya MongoDB'nin yetersiz kaldığı full-text arama senaryolarında Elasticsearch devreye girerek kullanıcı deneyimini üst seviyeye taşır. Elastic Stack (ELK) ekosistemiyle entegre çalışarak observability, APM ve güvenlik analitiği gibi alanlarda da kritik rol oynar. Docker ve Kubernetes üzerinde kolayca ölçeklenebilir yapısı, modern yazılım geliştirme süreçlerimizde vazgeçilmez bir altyapı bileşeni haline getirir.


2. Temel Kavramlar ve Terimler

2.1. Index, Document, Field Tanımları

Index, Elasticsearch'te benzer özellikteki belgelerin (document) mantıksal olarak gruplandığı en büyük veri birimidir; ilişkisel veritabanlarındaki veritabanı kavramına denk düşer. Document, index içinde depolanan ve JSON formatında ifade edilen temel bilgi birimidir; satır (row) olarak düşünülebilir. Her document, bir veya daha fazla Field içerir; field'lar verinin özelliklerini (name, price, description) temsil eder ve kendi veri tiplerine (text, keyword, date, geo_point) sahiptir. Noves.digital projelerinde, örneğin bir e-ticaret uygulamasında products index'i oluşturur, her ürün bir document, ürün adı title (text), stok kodu sku (keyword) ve fiyat price (float) field'ları olarak tanımlanır. Doğru field tipi seçimi, arama performansı ve disk kullanımı üzerinde doğrudan etkilidir.

PUT /products
{
  "mappings": {
    "properties": {
      "title": { "type": "text", "analyzer": "turkish" },
      "sku": { "type": "keyword" },
      "price": { "type": "float" },
      "created_at": { "type": "date" }
    }
  }
}

2.2. Shard ve Replica Kavramı

Shard, index'in fiziksel olarak bölündüğü alt birimdir; primary shard veriyi depolar ve indeksleme işlemlerini yönetir. Replica ise primary shard'ın yedek kopyasıdır ve yüksek erişilebilirlik ile okuma performansını artırır. Varsayılan olarak Elasticsearch her index'i 1 primary shard ve 1 replica ile oluşturur, ancak büyük ölçekli sistemlerde shard sayısı veri hacmine göre artırılır. Noves.digital ekibi olarak, Node.js backend'lerimizde yoğun indeksleme yapan sistemlerde replica sayısını 2'ye çıkararak okuma throughput'unu %40 artırdığımız senaryolar mevcuttur. Shard'lar cluster içindeki node'lar arasında otomatik dağıtılır; bir node düştüğünde replica'lar devreye girerek servis kesintisini önler. Ancak fazla shard sayısı JVM heap baskısı ve yönetim karmaşası yaratacağından, ortalama 20-50 GB veri hacmi başına bir shard önerilir.

2.3. Cluster ve Node Mimarisi

Cluster, bir veya daha fazla Node'un (sunucu instance'ı) bir araya gelerek oluşturduğu Elasticsearch topluluğudur. Her cluster benzersiz bir isme sahiptir ve tüm node'lar bu isim altında keşfedilir. Node'lar farklı roller üstlenebilir: master (cluster yönetimi), data (veri depolama ve sorgu), ingest (veri ön işleme) ve coordinating (sorgu dağıtımı). Noves.digital'in microservices mimarisinde, Docker Swarm veya Kubernetes üzerinde çalışan Elasticsearch cluster'larımızda data node'ları stateful set olarak, master node'ları ise ayrı bir deployment olarak yönetiriz. Production ortamlarında minimum 3 master-eligible node önerilir; bu, split-brain (beyin bölünmesi) sorununu önler. Node'lar arası iletişim 9300 portu üzerinden TCP protokolüyle gerçekleşirken, client'lar 9200 portundan REST API ile erişir.


3. Elasticsearch Nasıl Çalışır? (Çekirdek Prensipler)

3.1. Apache Lucene ile İlişkisi

Elasticsearch, arama motorunun çekirdeğini oluşturan Apache Lucene kütüphanesi üzerine inşa edilmiştir. Lucene, Java tabanlı düşük seviyeli bir full-text arama kütüphanesidir; inverted index yapısını, tokenization sürecini ve Boolean sorgu mekanizmasını sağlar. Elasticsearch, Lucene'in bu yeteneklerini dağıtık bir yapıda soyutlayarak RESTful API, cluster yönetimi ve otomatik failover gibi üst seviye özellikler ekler. Her Elasticsearch shard aslında bağımsız bir Lucene index'idir. Noves.digital ekibi olarak, custom analyzer geliştirme gerektiğinde Lucene'in analiz zincirini anlamak zorundayız; örneğin Türkçe karakter normalizasyonu (ıi) veya özel synonym handling için Lucene token filter'larını doğrudan kullanırız. Bu soyutlama sayesinde geliştiriciler, distributed systems karmaşasına girmeden yüksek performanslı arama motorları inşa edebilir.

3.2. Inverted Index ve Analyzer Süreci

Inverted Index, Elasticsearch'in metin aramalarını hızlı yapmasını sağlayan temel veri yapısıdır. Her terimin (token) hangi belgelerde geçtiğini ve konum bilgilerini haritalayan bu yapı, "kitap" kelimesini ararken tüm document'leri taramak yerine doğrudan ilgili belgelere atlar. Analyzer, metin bu indekse yazılmadan önce uygulanan işlem zinciridir: karakter filtreleri, tokenizer ve token filtrelerinden oluşur. Örneğin "Noves Digital İzmir'de yazılım geliştiriyor" cümlesi analyzer'dan geçtikten sonra noves, digital, izmir, yazilim, gelistiriyor token'larına ayrılır. Doğru analyzer seçimi, arama sonuçlarının kalitesini doğrudan belirler; Türkçe içerikler için turkish analyzer veya custom analyzer kullanımı şarttır.

3.2.1. Tokenization ve Normalization

Tokenization, ham metni anlamlı birimlere (token) ayırma işlemidir. Standard tokenizer boşluk ve noktalama işaretlerine göre bölerken, keyword tokenizer metni olduğu gibi bırakır (tam eşleşme için). Normalization, token'ların tutarlı hale getirilmesidir: küçük harfe çevirme, accent removal (ü → u), karakter folding ve Unicode normalizasyonu bu aşamada gerçekleşir. Noves.digital projelerinde e-ticaret ürün aramalarında, kullanıcı "iphone" veya "İPhone" yazsa da aynı sonuçları döndürmek için lowercase filter ve asciifolding filter kullanırız. Custom analyzer tanımında tokenization ve normalization zincirini explicit olarak belirtmek, tutarlı arama davranışı sağlar.

PUT /products
{
  "settings": {
    "analysis": {
      "analyzer": {
        "noves_turkish": {
          "tokenizer": "standard",
          "filter": ["lowercase", "asciifolding", "turkish_stop"]
        }
      }
    }
  }
}

3.2.2. Stopwords ve Stemming Uygulamaları

Stopwords, arama anlamı taşımayan yaygın kelimelerdir (ve, ile, bu, için). Bu kelimeler indeksten çıkarılarak index boyutu küçültülür ve gereksiz eşleşmeler engellenir. Stemming, kelimeleri kök hallerine indirgeme işlemidir; "geliyor", "geldi", "gelecek" → "gel". Türkçe için Elasticsearch turkish stemmer'ı sunar, ancak agresif stemming bazen yanlış sonuçlar verebilir. Noves.digital ekibi olarak, e-ticaret arama motorlarında stemming'i dikkatli kullanırız; çünkü "ayakkabı" ve "ayak" farklı ürün kategorileridir. Bu nedenle stemmer_override filter'ı ile istisnalar tanımlarız. Stopwords listesini de domain'e özel genişletmek (örneğin "adet", "paket" gibi e-ticaret terimleri) arama kalitesini artırır.


4. Kurulum ve Entegrasyon (Noves.digital İçin Öneriler)

4.1. Docker ile Hızlı Kurulum Adımları

Noves.digital ekibi olarak geliştirme ortamlarında Docker Compose kullanarak Elasticsearch'i saniyeler içinde ayağa kaldırıyoruz. Tek node'lu geliştirme ortamı için docker-compose.yml dosyası aşağıdaki gibidir:

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
    container_name: es-noves
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - "9200:9200"
    volumes:
      - es-data:/usr/share/elasticsearch/data
  kibana:
    image: docker.elastic.co/kibana/kibana:8.11.0
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

volumes:
  es-data:

Production ortamında xpack.security.enabled=true ile TLS ve authentication aktif edilmelidir. Memory mapping (vm.max_map_count=262144) ayarı Linux host'lar için gereklidir. Noves.digital projelerinde Node.js uygulamalarından @elastic/elasticsearch npm paketi ile bağlantı kurarız.

4.2. Kibana, Logstash ve Beats ile ELK Stack Entegrasyonu

ELK Stack, Elasticsearch, Logstash ve Kibana'nın oluşturduğu log yönetimi ve analitik ekosistemidir. Logstash, veri toplama ve dönüştürme pipeline'ıdır; Beats (Filebeat, Metricbeat) hafif agent'lar olarak log ve metrik gönderir. Kibana ise veri görselleştirme ve dashboard arayüzüdür. Noves.digital'in React/Next.js projelerinde, Docker container log'larını Filebeat ile toplayıp Logstash üzerinden Elasticsearch'e aktarır, Kibana'da hata analizi ve performans izleme dashboard'ları oluştururuz. Özellikle microservices mimarisinde distributed tracing için bu entegrasyon kritiktir. APM (Application Performance Monitoring) agent'larını Node.js uygulamalarına entegre ederek API response time'larını ve veritabanı sorgu performansını gerçek zamanlı izleriz.

# filebeat.yml örneği
filebeat.inputs:
- type: log
  paths:
    - /var/log/noves-app/*.log
output.elasticsearch:
  hosts: ["https://es.noves.digital:9200"]
  username: "filebeat_writer"
  password: "${ES_PWD}"

4.3. OpenSearch Alternatifi ve Lisans Notları

2021'de Elastic NV'nin SSPL (Server Side Public License) lisans değişikliği sonrası, AWS önderliğinde OpenSearch projesi fork edildi. OpenSearch, Elasticsearch 7.10.2 kod tabanından türemiş, Apache 2.0 lisanslı açık kaynak alternatiftir. OpenSearch Dashboards (Kibana'nın karşılığı) ve aynı REST API'yi sunar. Noves.digital olarak, müşterilerimizin bulut altyapı tercihlerine göre her iki platformu da değerlendiriyoruz. AWS managed service olarak Amazon OpenSearch Service kullanımı, operasyonel yükü azaltır. Ancak en güncel Elasticsearch özellikleri (örneğin vector search, semantic search) için Elastic Cloud veya self-hosted Elasticsearch tercih edilebilir. Lisans değişikliği nedeniyle, ticari kullanımda Elastic'in ücretli subscription'ları veya OpenSearch'ün açık kaynak lisansı arasında seçim yapılması gerekir.


5. Indexing ve Mapping Stratejileri

5.1. Mapping Önceden Tanımlama vs Dinamik Mapping

Mapping, index'teki field'ların veri tiplerini ve analiz özelliklerini tanımlayan şemadır. Dinamik mapping, Elasticsearch'in ilk document'e göre otomatik tip çıkarımı yapmasıdır; hızlı prototyping için uygundur ancak production'da risklidir. Yanlış tip çıkarımı (örneğin 2023-01-01 string olarak değil date olarak algılanması) sorgu hatalarına yol açar. Explicit mapping, index oluşturulmadan önce tüm field tiplerinin tanımlanmasıdır; Noves.digital projelerinde production index'lerinde zorunlu olarak kullanılır. dynamic: strict ayarı ile mapping'e uymayan field'ların document'in reddedilmesini sağlarız; bu, veri kalitesini garanti altına alır. E-ticaret ürün index'lerinde price field'ının float olarak tanımlanması, range query'lerin doğru çalışması için kritiktir.

PUT /orders
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "order_id": { "type": "keyword" },
      "total": { "type": "float" },
      "items": {
        "type": "nested",
        "properties": {
          "product_id": { "type": "keyword" },
          "quantity": { "type": "integer" }
        }
      }
    }
  }
}

5.2. Field Tipleri ve Performans Etkileri

Elasticsearch zengin bir field tipi yelpazesi sunar: text (full-text arama, analyzed), keyword (tam eşleşme, sorting, aggregation), date (zaman aralığı sorguları), geo_point (coğrafi arama), nested (ilişkili object'ler) ve dense_vector (AI/ML embedding'leri). Text vs Keyword ayrımı en kritik karardır; text field'lar inverted index'e yazılırken keyword field'lar doc_values ile disk üzerinde sıralanabilir ve aggregatable olur. Noves.digital ekibi olarak, e-ticaret ürün başlıklarını hem text (arama için) hem keyword (tam eşleşme ve sorting için) olarak multi-field olarak tanımlarız. integer vs byte gibi sayısal tip optimizasyonları disk alanından tasarruf sağlar. flattened tipi, bilinmeyen sayıda sub-field içeren JSON object'ler için index boyutunu optimize eder; özellikle event log'larında kullanışlıdır.


6. Arama Sorguları ve Query DSL

6.1. Temel CRUD ve Search Örnekleri

Elasticsearch'te tüm işlemler HTTP REST API üzerinden JSON payload'larıyla gerçekleşir. Create (Index), Read (Get), Update ve Delete operasyonları belirli endpoint'lere POST/PUT/GET/DELETE istekleriyle yapılır. Noves.digital Node.js backend'lerinde @elastic/elasticsearch client kütüphanesi ile bu işlemler asenkron olarak yönetilir.

const { Client } = require('@elastic/elasticsearch');
const client = new Client({ node: 'http://localhost:9200' });

// Document ekleme (Create/Index)
await client.index({
  index: 'products',
  id: 'sku-12345',
  document: {
    title: 'iPhone 15 Pro',
    category: 'electronics',
    price: 54999.99,
    stock: 42
  }
});

// ID ile okuma (Read/Get)
const product = await client.get({
  index: 'products',
  id: 'sku-12345'
});

// Arama (Search)
const result = await client.search({
  index: 'products',
  query: {
    match: { title: 'iphone' }
  }
});

6.2. Bool Query, Match, Term ve Range Kullanımları

Query DSL, Elasticsearch'in zengin ve yapılandırılmış sorgu dilidir. Match query, analyzed text üzerinde full-text arama yapar; "iphone 15" araması iphone ve 15 token'larını içeren tüm ürünleri döndürür. Term query, keyword field'larında tam eşleşme arar; category: "electronics" sorgusu analyze edilmemiş değeri arar. Range query, sayısal ve tarih aralıklarında filtreleme yapar; price: { gte: 10000, lte: 50000 }. Bool query, bu sorguları must (AND), should (OR), must_not (NOT) ve filter (skorlama yapmadan filtreleme) context'lerinde birleştirir. Noves.digital e-ticaret arama motorlarında, kullanıcı sorgusu must içinde match, kategori filtresi filter context'inde term, fiyat aralığı ise range olarak uygulanır; bu yapı hem doğru sonuçlar hem de caching ile performans sağlar.

GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": { "query": "oyuncu bilgisayarı", "boost": 2.0 } } }
      ],
      "filter": [
        { "term": { "category": "electronics" } },
        { "range": { "price": { "gte": 15000, "lte": 50000 } } },
        { "term": { "in_stock": true } }
      ]
    }
  }
}

6.2.1. Relevance (Skorlama) ve Boost Teknikleri

Elasticsearch, BM25 algoritması ile document'leri relevance skoruna göre sıralar. Bu skor; terim frekansı (TF), ters document frekansı (IDF) ve field uzunluğu normalizasyonu (kısa field'lar daha yüksek skor alır) faktörlerine dayanır. Boost, belirli field'lara veya sorgu clause'larına ağırlık vererek sıralamayı manipüle etme tekniğidir. Noves.digital e-ticaret projelerinde, ürün başlığı (title) 2.0 boost ile, açıklama (description) 1.0 boost ile aranır; böylece başlıkta geçen eşleşmeler daha üst sıralarda çıkar. function_score query ile satış hacmi, stok durumu veya kullanıcı değerlendirmesi gibi iş metriklerini skora ekleyebiliriz. script_score ile custom JavaScript/Painless script'lerle dinamik skorlama yapılır; örneğin yakın lokasyondaki mağazalarda stok olan ürünler öne çıkarılır.

6.2.2. Aggregations ile Analitik Sorgular

Aggregations, Elasticsearch'in SQL GROUP BY ve aggregate fonksiyonlarına denk gelen güçlü analitik özelliğidir. Metric aggregations (avg, sum, min, max, cardinality) sayısal özetler çıkarırken, Bucket aggregations (terms, date_histogram, range) veriyi kategorilere ayırır. Pipeline aggregations ise bucket sonuçları üzerinde ikinci seviye hesaplamalar yapar. Noves.digital analitik dashboard'larında, e-ticaret sipariş verileri üzerinde date_histogram ile aylık satış trendleri, terms aggregation ile en çok satan kategoriler ve avg ile ortalama sepet tutarı hesaplanır. Sub-aggregation (aggregation içinde aggregation) ile kategori bazında marka dağılımı gibi detaylı raporlar oluşturulur. Bu sorgular, milyonlarca document üzerinde milisaniyeler içinde çalışır ve ayrı bir analitik veritabanı ihtiyacını ortadan kaldırır.

GET /orders/_search
{
  "size": 0,
  "aggs": {
    "monthly_sales": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "month"
      },
      "aggs": {
        "avg_basket": { "avg": { "field": "total_amount" } },
        "top_categories": {
          "terms": { "field": "category.keyword" }
        }
      }
    }
  }
}

7. Performans, Ölçeklenebilirlik ve İyileştirme

7.1. Shard Planlaması ve Rebalancing

Doğru shard stratejisi, Elasticsearch cluster performansının bel kemiğidir. Her index için primary shard sayısı, beklenen veri hacmi ve indeksleme throughput'una göre belirlenir. Çok fazla shard, master node üzerinde metadata yönetim yükü artırırken çok az shard paralel işleme imkanını kısıtlar. Noves.digital olarak, 50 GB'tan büyük index'lerde rollover ve ILM (Index Lifecycle Management) politikaları kullanırız; bu, eski verilerin otomatik olarak cold/warm node'lara taşınmasını ve sonunda silinmesini sağlar. Rebalancing, node'lar arasında shard dağılımını eşitleme işlemidir; cluster.routing.rebalance.enable ayarı ile kontrol edilir. Yeni node eklendiğinde veya node çıkarıldığında Elasticsearch otomatik rebalancing yapar, ancak yoğun saatlerde bu işlem throttle edilebilir. Force-merge API ile read-only index'lerde segment sayısı azaltılarak arama performansı artırılır.

7.2. JVM, Heap ve refresh_interval Ayarları

Elasticsearch Java tabanlı olduğundan JVM (Java Virtual Machine) ayarları kritiktir. Heap boyutu fiziksel RAM'in %50'sini ve 32 GB'ı geçmemelidir (compressed OOPs sınırı). Noves.digital production cluster'larında 64 GB RAM'li node'larda 30 GB heap ayarı kullanılır. Kalan RAM Lucene'in dosya sistemi cache'i (OS page cache) için ayrılır; bu, sık erişilen index segment'lerinin memory'de tutulmasını sağlar. refresh_interval, document'lerin aranabilir hale gelme süresidir; varsayılan 1 saniyedir. Yoğun indeksleme senaryolarında (log toplama, bulk import) bu değer 30s veya -1 (manuel refresh) yapılarak I/O yükü azaltılır. Ancak e-ticaret arama motorlarında güncel stok bilgisi için 1s veya daha düşük tutulmalıdır. index.translog.durability ayarı async yapılarak yazma performansı artırılabilir, ancak veri kaybı riski göz önünde bulundurulmalıdır.

PUT /products/_settings
{
  "index": {
    "refresh_interval": "5s",
    "number_of_replicas": 2,
    "translog.durability": "async"
  }
}

7.3. Bulk API ve İndeksleme Optimizasyonları

Tek tek document index'lemek yerine Bulk API kullanılarak binlerce document tek istekte işlenebilir; bu, network round-trip'lerini ve segment merge yükünü azaltır. Optimal bulk boyutu, document boyutuna ve cluster kaynaklarına göre 5-15 MB arasındadır. Noves.digital Node.js uygulamalarında, veri akışlarını buffer'layıp 5 saniyede bir veya 1000 document biriktiğinde bulk gönderen mekanizmalar kullanırız. Index Lifecycle Management (ILM) ile hot-warm-cold-frozen aşamaları tanımlanır; son 7 günün verisi SSD'li hot node'larda, 30 günlük veri HDD'li warm node'larda ve arşiv verisi frozen'da tutulur. Ingest pipeline ile document'ler index'lenmeden önce preprocessing yapılır; IP coğrafi konum çözümleme, date parsing veya PII maskeleme gibi işlemler burada gerçekleşir.

// Node.js bulk örneği
const body = products.flatMap(doc => [
  { index: { _index: 'products', _id: doc.sku } },
  doc
]);
await client.bulk({ refresh: true, body });

8. Güvenlik, Yedekleme ve Lisanslama

8.1. Authentication, Authorization ve TLS

Elasticsearch 8.x sürümünden itibaren security özellikleri varsayılan olarak aktiftir. Authentication, kullanıcı kimlik doğrulamasıdır; native realm (Elasticsearch içinde), LDAP/Active Directory veya SAML/OIDC entegrasyonlarıyla sağlanır. Authorization, rol tabanlı erişim kontrolü (RBAC) ile index ve field seviyesinde yetkilendirme yapılmasını sağlar. Noves.digital projelerinde, farklı mikroservisler için ayrı API key'ler oluştururuz; örneğin search-service sadece products index'ine read yetkisine sahiptir. TLS/SSL, node'lar arası iletişim (transport layer) ve client erişimi (HTTP layer) için şifreleme sağlar. Let's Encrypt veya özel CA sertifikaları kullanılarak man-in-the-middle saldırıları önlenir. xpack.security.audit.enabled ile kim hangi sorguyu ne zaman çalıştırdı audit log'ları tutulur; compliance gereksinimleri için zorunludur.

8.2. Snapshot/Restore ile Yedekleme Stratejileri

Snapshot, index'lerin ve cluster metadata'sının tam yedeğinin alınması işlemidir. Snapshot'lar shared filesystem (NFS), AWS S3, Azure Blob, Google Cloud Storage veya HDFS üzerinde depolanabilir. Noves.digital operasyonel süreçlerinde, production cluster'ından her gece otomatik snapshot alınır ve 30 gün boyunca S3 bucket'ında tutulur. Snapshot Lifecycle Management (SLM) ile bu süreç otomatikleştirilir; cron ifadeleriyle zamanlanır ve retention politikalarıyla eski yedekler silinir. Restore işlemi, felaket kurtarma (disaster recovery) veya test ortamı oluşturma için kullanılır; rename_pattern ile index isimleri değiştirilerek production verisi staging'e aktarılabilir. Cross-cluster replication (CCR) ile farklı coğrafi bölgelerdeki cluster'lar arasında otomatik replikasyon sağlanır; bu, yüksek erişilebilirlik ve düşük latency için kritiktir.

PUT /_snapshot/noves_backup
{
  "type": "s3",
  "settings": {
    "bucket": "noves-es-backups",
    "region": "eu-central-1",
    "compress": true
  }
}

8.3. Elastic Lisans Değişiklikleri ve OpenSearch Notu

2021 yılında Elastic, Elasticsearch ve Kibana için Apache 2.0 lisansından SSPL (Server Side Public License) ve Elastic License v2'ye geçiş yaptı. Bu değişiklik, managed service sağlayıcılarının Elastic ürünlerini kaynak kodunu açıklamadan sunmasını engellemek amacıyla yapıldı. Elastic License v2, ücretsiz kullanımı destekler ancak bazı advanced özellikler (machine learning, advanced security) ücretli subscription (Gold, Platinum, Enterprise) gerektirir. OpenSearch, AWS tarafından Elasticsearch 7.10.2'den fork edilen ve Apache 2.0 lisansıyla sunulan alternatiftir. Noves.digital olarak, müşterilerimizin ihtiyaçlarına göre her iki platformu da değerlendiriyoruz. OpenSearch, maliyet avantajı ve açık kaynak özgürlüğü sunarken, Elastic Stack en güncel özellikler (vector database, AI entegrasyonları) ve resmi destek avantajına sahiptir. Lisans seçimi, projenin büyüklüğüne, bütçesine ve özellik gereksinimlerine göre yapılmalıdır.


9. Kullanım Senaryoları (Noves.digital Odaklı Örnekler)

9.1. E-ticaret Arama ve Öneri Sistemleri

Noves.digital'in React ve Next.js ile geliştirdiği e-ticaret platformlarında Elasticsearch, ürün arama motorunun kalbidir. Faceted search (facet'li arama) ile kullanıcılar kategori, marka, fiyat aralığı ve özellik filtresiyle aynı anda daraltma yapar. Autocomplete ve search-as-you-type özellikleri, completion suggester ve edge_ngram analyzer kullanılarak milisaniyeler içinde çalışır. Öneri sistemleri için Elasticsearch'in more_like_this query'si ve collaborative filtering yaklaşımları kullanılır; "Bu ürünü alanlar bunları da aldı" mantığıyla cross-sell ve up-sell önerileri üretilir. A/B test entegrasyonu ile farklı skorlama algoritmalarının dönüşüm oranına etkisi ölçülür. Node.js backend'de elasticsearch client ile sorgular cache'lenir ve Redis ile birleştirilerek response time 50ms altında tutulur.

GET /products/_search
{
  "suggest": {
    "product-suggest": {
      "prefix": "iphone",
      "completion": {
        "field": "suggest",
        "fuzzy": true
      }
    }
  }
}

9.2. Log Analizi, Observability ve APM

Microservices mimarisinde onlarca servisin log'larını merkezi olarak yönetmek, hata ayıklama ve performans izleme için zorunludur. Noves.digital projelerinde, Docker container'larından Filebeat ile toplanan log'lar Logstash üzerinden parse edilir (Grok pattern'leri ile structured hale getirilir) ve Elasticsearch'e index'lenir. Kibana'da oluşturulan dashboard'larla 5xx hata oranları, API response time dağılımları ve throughput metrikleri gerçek zamanlı izlenir. Elastic APM, Node.js uygulamalarına entegre edilerek distributed tracing sağlar; bir API isteğinin veritabanı sorgusuna, Redis çağrısına ve harici API entegrasyonuna kadar olan yolculuğu görselleştirir. Bu, özellikle Noves.digital'in API Geliştirme & Backend hizmetlerinde sunduğu microservices çözümlerinde vazgeçilmezdir. Alerting ile belirlenen eşik değerleri aşıldığında Slack veya e-mail bildirimleri gönderilir.

9.3. Coğrafi Arama ve Filtreleme

Geo-point ve geo-shape field tipleri ile Elasticsearch, coğrafi koordinatlar üzerinde karmaşık sorgular yapabilir. geo_distance query belirli bir noktadan (örneğin kullanıcı konumu) belirli bir mesafe içindeki document'leri döndürür. geo_bounding_box dikdörtgen alan filtrelemesi, geo_polygon ise çokgen alan sorguları yapar. Noves.digital'in geliştirdiği servis sağlayıcı ve teslimat uygulamalarında, en yakın restoranları bulmak için geo_distance sort kullanılır; sonuçlar metre cinsinden mesafeye göre sıralanır. Geohash aggregation ile harita üzerinde yoğunluk ısı haritası (heat map) oluşturulur; bu, operasyonel analiz ve pazarlama stratejileri için değerli içgörüler sunar. geo_shape ile kompleks poligonlar (il sınırları, servis alanları) tanımlanır ve intersection sorguları yapılır.

GET /stores/_search
{
  "query": {
    "bool": {
      "filter": {
        "geo_distance": {
          "distance": "5km",
          "location": { "lat": 38.42, "lon": 27.14 }
        }
      }
    }
  },
  "sort": [
    {
      "_geo_distance": {
        "location": { "lat": 38.42, "lon": 27.14 },
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}

10. En İyi Uygulamalar ve SEO İçin İçerik Önerileri

10.1. Arama Performansını Ölçme ve İzleme

Elasticsearch cluster sağlığını ve sorgu performansını sürekli izlemek, proaktif optimizasyon için şarttır. Kibana Stack Monitoring ile CPU, memory, disk kullanımı ve JVM heap trendleri izlenir. Slow log'lar (index.search.slowlog.threshold.query.warn: 10s), 10 saniyeyi aşan sorguları tespit eder; bu sorgular optimize edilmelidir. Noves.digital ekibi olarak, Node.js uygulamalarında Elasticsearch client'a timeout ve retry politikaları ekleriz; circuit breaker pattern ile cluster overload durumunda graceful degradation sağlanır. Profile API, sorguların hangi aşamada zaman harcadığını detaylı gösterir; shard'lar arası iletişim, aggregation hesaplama veya scoring aşamalarındaki darboğazlar tespit edilir. APM entegrasyonu ile application seviyesindeki Elasticsearch latency'leri de izlenir; böylece client-side veya network kaynaklı yavaşlamalar ayrıştırılır.

10.2. Kullanıcı Odaklı Arama Relevansı İyileştirmeleri

Teknik olarak doğru sorgular, kullanıcı deneyimini garanti etmez. Relevance tuning, arama sonuçlarının kullanıcı beklentilerine uygunluğunu artırma sürecidir. Noves.digital e-ticaret projelerinde, kullanıcı click-through rate (CTR) ve conversion data'sını toplayarak Learning to Rank (LTR) modelleri eğitiyoruz. Synonyms, "laptop" ve "dizüstü bilgisayar" gibi eş anlamlı terimlerin aynı sonuçları döndürmesini sağlar; synonym_graph filter ile dynamic synonym yönetimi yapılır. Spell check ve did-you-mean özellikleri, phrase suggester ile implemente edilir; "ayakkabı" yerine "ayakabı" yazan kullanıcıya doğru öneri sunulur. Personalization, kullanıcı geçmişi ve segmentine göre skorlama ayarlaması yapar; örneğin premium müşterilere özel ürünler boost edilir. A/B test framework'ü ile farklı relevance stratejilerinin business metriklerine etkisi ölçülür ve data-driven kararlar alınır.


11. Sonuç ve Uygulamaya Geçiş Rehberi

11.1. Hızlı POC Adımları (Proof of Concept)

Elasticsearch entegrasyonuna başlamak için Noves.digital ekibi olarak önerdiğimiz adımlar: (1) Docker Compose ile tek node'lu cluster kurulumu (5 dk), (2) Mevcut veritabanından örnek veri seti çıkarımı (1000-10000 kayıt), (3) Mapping ve analyzer tanımlaması, (4) Temel CRUD ve search sorgularının test edilmesi, (5) Kibana'da veri görselleştirme ve performans izleme. POC sürecinde, mevcut uygulamanın read path'ine Elasticsearch'i paralel olarak entegre edip, sonuçları karşılaştırarak doğrulama yapılır. Feature flag kullanımı ile production'a güvenli geçiş sağlanır. 2 haftalık bir sprint içinde, temel arama fonksiyonelliği çalışır hale getirilebilir ve stakeholder'lara demo sunulabilir. POC başarı metrikleri: sorgu latency < 100ms, index'leme throughput > 1000 doc/s, ve kullanıcı arama başarı oranı (click-through rate) artışı.

11.2. Ölçeklendirme ve Operasyonel Hazırlık

POC sonrası production hazırlığı için: (1) Cluster topology tasarımı: 3 master, N data, 2 coordinating node, (2) Hardware sizing: data node'lar için SSD, yüksek RAM ve yeterli CPU, (3) Backup stratejisi: SLM ile otomatik snapshot ve DR cluster kurulumu, (4) Security hardening: TLS, RBAC, API key yönetimi ve audit logging, (5) Monitoring: Kibana Stack Monitoring, external alerting (PagerDuty/Opsgenie), (6) CI/CD entegrasyonu: Index template ve ILM policy'lerin infrastructure-as-code (Terraform/Ansible) ile yönetimi. Noves.digital olarak, Elasticsearch operasyonlarını managed service (Elastic Cloud, AWS OpenSearch Service) veya self-hosted Kubernetes (ECK - Elastic Cloud on Kubernetes) olarak sunarız. ECK, CRD'ler (Custom Resource Definitions) ile Elasticsearch, Kibana ve APM server'ların Kubernetes üzerinde declarative yönetimini sağlar; bu, modern GitOps süreçlerimizle mükemmel uyumludur. Operasyonel hazırlık tamamlandığında, Elasticsearch cluster'ı 7/24 monitoring ile proaktif bakım altında tutulur ve düzenli capacity planning review'ları yapılır.


Bu rehber, Noves.digital ekibinin Elasticsearch konusundaki teknik uzmanlığını ve modern yazılım geliştirme süreçlerindeki uygulama deneyimini yansıtmaktadır. Daha detaylı bilgi ve proje bazlı danışmanlık için üzerinden bizimle iletişime geçebilirsiniz.

Noves Team

Noves Team

Noves Digital: 2020'den beri İzmir merkezli, 3 kişilik tutkulu yazılım ekibi. Web & mobil uygulama, özel yazılım çözümleri. React, Node.js, Python uzmanlığı. Agile çalışma, şeffaf iletişim, %100 zamanında teslimat. Sizin teknoloji partneriniz.