Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
13 yazı bulundu #elasticsearch
Elasticsearch 8'den 9.x'e ve OpenSearch 3: Yenilikler, Kaldırılanlar ve Hangisini Seçmeli?
Veritabanı SERİ 13

Elasticsearch 8'den 9.x'e ve OpenSearch 3: Yenilikler, Kaldırılanlar ve Hangisini Seçmeli?

Elasticsearch 8'den 9.x'e önce son 8.19'a geçip deprecation uyarılarını temizleyerek ve snapshot alarak yükseltilir; OpenSearch 3 ise çekirdeği ortak ama ayrı yolda giden bir motor ve ayrı bir .NET client istiyor. Gerçek çıktılarla: 8.19'da uyarı veren parametrelerin 9.5'te 400 dönmesi, deprecation API, 8.19 verisini 9.5'te açmak ve geri dönememek, LOOKUP JOIN, Elastic client'ın OpenSearch'ten 406 alması, OpenSearch.Client ile aynı arama ve bir karar tablosu.

14 Kas 2026 13 dk 17
Elasticsearch'ü Production'da İşletmek: Güvenlik, Kapasite, İzleme ve Sık Görülen Sorunlar
Veritabanı SERİ 12

Elasticsearch'ü Production'da İşletmek: Güvenlik, Kapasite, İzleme ve Sık Görülen Sorunlar

Elasticsearch'ü production'da işletmek; ağı kapatmak, TLS, uygulama başına alias'a verilmiş API key, en az üç master-eligible node, heap ve disk eşiklerini izlemek ve ölçülmüş bir yedekten dönme planı demek. Gerçek çıktılarla: self-signed CA'ya .NET client'tan parmak iziyle bağlanmak, DLS/FLS'in basic lisansta 403 vermesi, flood-stage watermark'ın yazmaları durdurması, circuit breaker hatası, slow log'daki arama metni, SLM ve restore ile SQL Server'dan yeniden index'lemenin süresi.

14 Kas 2026 13 dk 13
Index Yaşam Döngüsü: Alias ile Kesintisiz Reindex, Index Template, Shard Boyutu ve ILM
Veritabanı SERİ 11

Index Yaşam Döngüsü: Alias ile Kesintisiz Reindex, Index Template, Shard Boyutu ve ILM

Uygulamayı gerçek index adına değil bir alias'a bağlarsan mapping değişikliği bir kesinti değil, template'ten yeni bir index, _reindex ve tek bir atomik _aliases isteği olur. Gerçek çıktılarla: ilk geçişte remove_index, yarım uygulanan alias isteği ve must_exist, version_type external, reindex sürerken gelen değişikliklerin checkpoint'ten tekrar oynatılması, require_alias, shard sayısı kararı, ILM ile data stream ve snapshot/restore.

14 Kas 2026 16 dk 16
.NET'te Elastic.Clients.Elasticsearch 9: Typed API, Fluent ve Object Initializer, Serialization, Hata Yönetimi ve Test
Veritabanı SERİ 10

.NET'te Elastic.Clients.Elasticsearch 9: Typed API, Fluent ve Object Initializer, Serialization, Hata Yönetimi ve Test

Elastic.Clients.Elasticsearch 9'da client'ı DI'da singleton ve doğrulanmış options ile kaydeder, sorguları test edilebilir bir builder'da toplar ve davranışı Testcontainers ile gerçek bir Elasticsearch'e karşı test edersin. Gerçek çıktılarla descriptor'lı aramanın index'i atlayıp /_search'e gitmesi, source serializer'da Add yerine Insert, server, transport ve 429 hataları, ES|QL'i metin ve LINQ ile çağırmak ve 9. yazıdaki hatayı yakalayan regresyon testi.

14 Kas 2026 13 dk 15
Aggregation'lar ve Facet'li Arama: terms, range, date_histogram, nested ve post_filter
Veritabanı SERİ 09

Aggregation'lar ve Facet'li Arama: terms, range, date_histogram, nested ve post_filter

Facet'li aramada arama metni sorguya, seçili filtreler post_filter'a gider ve her facet kendi filtresi hariç diğer seçili filtrelerle sarılır; yoksa seçilen filtre kendi facet'ini boşaltır. Gerçek çıktılarla terms, range, date_histogram, avg ve cardinality, nested ile reverse_nested, Bookstore'un facet'li /books/search endpoint'i, 5 shard'da terms sayılarının yanılması ve doc_count_error_upper_bound, aynı raporun ES|QL karşılığı.

14 Kas 2026 12 dk 13
Autocomplete ve Search-as-You-Type: edge_ngram, search_as_you_type ve Completion Suggester
Veritabanı SERİ 08

Autocomplete ve Search-as-You-Type: edge_ngram, search_as_you_type ve Completion Suggester

Elasticsearch'te yazdıkça öneri için kelime başlarını index'e koyan bir alan gerekir: edge_ngram, search_as_you_type ya da completion suggester; Bookstore için ortadaki kelimeden de öneren ve filtrelenebilen edge_ngram'ı seçtik. Gerçek çıktılarla "kür" ile Kürk Mantolu Madonna, analyzer sırası, bool_prefix'in or tuzağı, completion context'lerinin zorunlu olması, _disk_usage ile alan boyutları ve _source filtreli, collapse'lı, Output Cache'li bir /books/suggest endpoint'i.

14 Kas 2026 12 dk 14
Relevance Tuning: Field Boost, function_score, Fuzzy Arama, Highlight ve "Bunu mu Demek İstediniz?"
Veritabanı SERİ 07

Relevance Tuning: Field Boost, function_score, Fuzzy Arama, Highlight ve "Bunu mu Demek İstediniz?"

Arama sıralamasını tahminle değil, sorgu ve beklenen sonuçlardan oluşan bir setle _rank_eval API'sinde ölçerek ayarlarsın. Gerçek çıktılarla nDCG@5'i 0,905'ten 0,979'a çıkaran yazar boost'u, fuzziness ve phrase clause'u; ölçünce bozan tie_breaker ve sert bir function_score; rescore, html encoder'lı highlight ile XSS'e karşı güvenli render ve phrase suggester ile "bunu mu demek istediniz?".

14 Kas 2026 14 dk 15
Query DSL 1: match, multi_match, term, bool Query, Filter Context ve Pagination
Veritabanı SERİ 06

Query DSL 1: match, multi_match, term, bool Query, Filter Context ve Pagination

Kullanıcının yazdığı metni text alanlara match ile, kesin değerleri keyword alanlara term ile ve tıklanan her filtreyi bool query'nin filter bölümüne koyarsın; filtre must'a girince skor şişer ve cache kaybolur. Gerçek çıktılarla multi_match'in best_fields, most_fields ve cross_fields tipleri, nested yazar araması, Bookstore'un /books/search endpoint'i, from/size'ın 10.000 sınırı, PIT ile search_after ve query_string yerine simple_query_string.

14 Kas 2026 15 dk 10
Elasticsearch'e Veri Taşımak: Bulk API, Refresh, Versiyonlama ve SQL Server ile Senkronizasyon
Veritabanı SERİ 05

Elasticsearch'e Veri Taşımak: Bulk API, Refresh, Versiyonlama ve SQL Server ile Senkronizasyon

Elasticsearch'e veriyi tek tek değil Bulk API ile yazarsın; ama bulk atomik değildir, yazılan document refresh'e kadar aranamaz ve SQL Server ile senkronizasyonda dual write sessizce veri kaybettirir. Gerçek çıktılarla IndexAsync ile bulk farkı, BulkAll ve refresh_interval, satır satır bulk hataları, if_seq_no ve external version, rowversion ile polling yapan bir BackgroundService ve MIN_ACTIVE_ROWVERSION ile açık transaction'ları kaçırmamak.

14 Kas 2026 15 dk 12
Analyzer'lar ve Türkçe: Tokenizer, Token Filter, turkish Analyzer, ASCII Folding ve Eş Anlamlılar
Veritabanı SERİ 04

Analyzer'lar ve Türkçe: Tokenizer, Token Filter, turkish Analyzer, ASCII Folding ve Eş Anlamlılar

Elasticsearch'te Türkçe arama, yerleşik turkish analyzer'ı olduğu gibi kullanmakla düzelmez: apostrophe ve Türkçe lowercase filtreleri işe yarar ama Snowball stemmer "İnce"yi "i"ye, "kasaba"yı "kasap"a indirir; çözüm keyword_marker, Türkçe karaktersiz bir alt alan ve birden çok alanı birlikte sorgulamak. Gerçek çıktılarla analyzer zinciri, stemmer'ın sınırları, ICU ile Türkçe sıralama ve reindex gerektirmeyen Synonyms API.

14 Kas 2026 13 dk 11
Elasticsearch Mapping: text ve keyword, Multi-Field, Dynamic Mapping, nested ve Mapping Değiştirilemezliği
Veritabanı SERİ 03

Elasticsearch Mapping: text ve keyword, Multi-Field, Dynamic Mapping, nested ve Mapping Değiştirilemezliği

Elasticsearch'te mapping her alanın tipini ve nasıl index'leneceğini belirler; tahmine bırakırsan ISBN sayı, kesirli fiyat tam sayı olur ve hata görmeden yanlış sonuç alırsın, bu yüzden production index'i dynamic: strict ve elle yazılmış bir mapping ister. Gerçek çıktılarla dynamic mapping tuzakları, text ile keyword, title.keyword ve title.folded multi-field'ları, scaled_float fiyat, object ile nested farkı ve .NET'te nested sorgu, flattened, mapping'in neden değiştirilemediği ve alan sınırı.

14 Kas 2026 15 dk 17
Elasticsearch Lab'ı: start-local, Kibana Dev Tools, Cluster Sağlığı ve .NET'ten İlk Bağlantı
Veritabanı SERİ 02

Elasticsearch Lab'ı: start-local, Kibana Dev Tools, Cluster Sağlığı ve .NET'ten İlk Bağlantı

Yerel bir Elasticsearch lab'ı için Elastic'in start-local script'i ya da security açık, sürümü sabit küçük bir Docker Compose dosyası yeterli; uygulama elastic kullanıcısıyla değil, yalnız kendi index'lerine yetkili bir API key ve singleton bir ElasticsearchClient ile bağlanır. Gerçek çıktılarla start-local, Kibana için service account token, yellow health ve allocation explain, scoped API key'in 403'leri, Elastic.Clients.Elasticsearch 9.5 ile ilk IndexAsync/GetAsync ve hata durumları.

14 Kas 2026 14 dk 13
Blog Haritası