{"id":35786,"date":"2025-12-03T21:40:46","date_gmt":"2025-12-03T18:40:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35786"},"modified":"2025-12-03T21:40:46","modified_gmt":"2025-12-03T18:40:46","slug":"elasticsearch-ile-veri-etkilesimi-crud-operasyonlari","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/","title":{"rendered":"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla b\u00fcy\u00fcyen veri d\u00fcnyas\u0131nda, b\u00fcy\u00fck hacimli verileri depolamak, aramak ve analiz etmek kritik bir ihtiya\u00e7 haline gelmi\u015ftir. Geleneksel ili\u015fkisel veritabanlar\u0131 belirli senaryolarda yetersiz kal\u0131rken, NoSQL \u00e7\u00f6z\u00fcmleri bu alanda \u00f6nemli avantajlar sunmaktad\u0131r. Elasticsearch, da\u011f\u0131t\u0131k, RESTful ve g\u00fc\u00e7l\u00fc bir arama ve analiz motoru olarak bu \u00e7\u00f6z\u00fcmlerin ba\u015f\u0131nda gelir. Ger\u00e7ek zamanl\u0131 arama, log analizi, metrik toplama ve daha bir\u00e7ok kullan\u0131m durumu i\u00e7in tercih edilen Elasticsearch, esnekli\u011fi ve performans\u0131 ile \u00f6ne \u00e7\u0131kar. Bu makalede, Elasticsearch ile veri etkile\u015fiminin temelini olu\u015fturan CRUD (Create, Read, Update, Delete) operasyonlar\u0131n\u0131 derinlemesine inceleyece\u011fiz. Elasticsearch&#8217;\u00fcn veri depolama mant\u0131\u011f\u0131ndan ba\u015flayarak, her bir CRUD operasyonunu detayland\u0131racak, pratik <code>curl<\/code> \u00f6rnekleri ile peki\u015ftirecek ve en iyi uygulamalara de\u011finece\u011fiz.<\/p>\n<h2>Elasticsearch Temelleri<\/h2>\n<p>Elasticsearch, verileri JSON format\u0131ndaki dok\u00fcmanlar olarak saklar. Bu dok\u00fcmanlar, indeks ad\u0131 verilen mant\u0131ksal gruplar i\u00e7inde d\u00fczenlenir. Bir dok\u00fcman, bir veritaban\u0131ndaki bir sat\u0131ra, bir indeks ise bir tabloya benzetilebilir. Ancak bu benzetme, Elasticsearch&#8217;\u00fcn da\u011f\u0131t\u0131k yap\u0131s\u0131 ve \u015femas\u0131z (schemaless) yakla\u015f\u0131m\u0131 nedeniyle s\u0131n\u0131rl\u0131d\u0131r.<\/p>\n<h3>Dok\u00fcman Kavram\u0131<\/h3>\n<p>Elasticsearch&#8217;teki en k\u00fc\u00e7\u00fck veri birimi bir &#8220;dok\u00fcman&#8221;d\u0131r. Her dok\u00fcman, JSON format\u0131nda yap\u0131land\u0131r\u0131lm\u0131\u015f verilerden olu\u015fur. \u00d6rne\u011fin, bir \u00fcr\u00fcn bilgisi, bir kullan\u0131c\u0131 profili veya bir log kayd\u0131 birer dok\u00fcman olabilir. Her dok\u00fcman\u0131n, indeks i\u00e7inde benzersiz bir <code>_id<\/code>&#8216;si bulunur. Bu <code>_id<\/code>, dok\u00fcmana eri\u015fim i\u00e7in birincil anahtar g\u00f6revi g\u00f6r\u00fcr. Elasticsearch, dok\u00fcmanlar\u0131 varsay\u0131lan olarak dinamik bir \u015fema (mapping) ile indeksler, yani verinin yap\u0131s\u0131n\u0131 kendili\u011finden alg\u0131lar ve uygun alan tiplerini atar.<\/p>\n<pre><code class=\"language-json\">{\n  \"urun_adi\": \"Ak\u0131ll\u0131 Telefon X\",\n  \"marka\": \"TechCo\",\n  \"fiyat\": 999.99,\n  \"stok\": 150,\n  \"ozellikler\": [\"6.1 in\u00e7 ekran\", \"128 GB depolama\", \"\u00c7ift kamera\"],\n  \"eklenme_tarihi\": \"2023-10-26T10:00:00Z\"\n}<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnek, bir \u00fcr\u00fcn dok\u00fcman\u0131n\u0131n JSON yap\u0131s\u0131n\u0131 g\u00f6stermektedir.<\/p>\n<h3>Index Kavram\u0131<\/h3>\n<p>Bir indeks, benzer \u00f6zelliklere sahip dok\u00fcmanlar\u0131n topland\u0131\u011f\u0131 bir koleksiyondur. \u0130li\u015fkisel veritabanlar\u0131ndaki tablolar gibi d\u00fc\u015f\u00fcn\u00fclebilir, ancak daha esnektir. Bir indeks, kendi i\u00e7inde shard&#8217;lara (par\u00e7alara) ayr\u0131labilir ve bu shard&#8217;lar birden fazla sunucuya da\u011f\u0131t\u0131larak yatay \u00f6l\u00e7eklenebilirlik sa\u011flan\u0131r. Her indeks, kendi mapping&#8217;ine ve ayarlar\u0131na sahiptir. Elasticsearch 7.x ve sonraki s\u00fcr\u00fcmlerde, <code>_type<\/code> kavram\u0131 tamamen kald\u0131r\u0131lm\u0131\u015f olup, t\u00fcm dok\u00fcmanlar do\u011frudan bir indeks alt\u0131nda depolan\u0131r.<\/p>\n<h3>Mapping Kavram\u0131<\/h3>\n<p>Mapping, bir indeks i\u00e7indeki dok\u00fcmanlar\u0131n alanlar\u0131n\u0131n nas\u0131l depolanaca\u011f\u0131n\u0131 ve indekslenece\u011fini tan\u0131mlayan \u015femad\u0131r. Elasticsearch, bir dok\u00fcman\u0131 ilk kez indeksledi\u011finde, alanlar\u0131n veri tiplerini otomatik olarak tahmin ederek dinamik bir mapping olu\u015fturur. Ancak, arama ve analiz performans\u0131n\u0131 optimize etmek i\u00e7in \u00f6zel mapping tan\u0131mlamak genellikle daha iyidir. \u00d6rne\u011fin, bir metin alan\u0131n\u0131n tam metin aramas\u0131 i\u00e7in mi, yoksa sadece filtrelenebilir bir anahtar kelime olarak m\u0131 kullan\u0131laca\u011f\u0131n\u0131 mapping ile belirtebiliriz.<\/p>\n<pre><code class=\"language-json\">PUT \/urunler\n{\n  \"mappings\": {\n    \"properties\": {\n      \"urun_adi\": { \"type\": \"text\" },\n      \"marka\": { \"type\": \"keyword\" },\n      \"fiyat\": { \"type\": \"float\" },\n      \"stok\": { \"type\": \"integer\" },\n      \"eklenme_tarihi\": { \"type\": \"date\", \"format\": \"strict_date_optional_time||epoch_millis\" }\n    }\n  }\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>urunler<\/code> indeksine \u00f6zel bir mapping tan\u0131mlanm\u0131\u015ft\u0131r. <code>urun_adi<\/code> <code>text<\/code> olarak, <code>marka<\/code> <code>keyword<\/code> olarak, <code>fiyat<\/code> <code>float<\/code> olarak vb. belirtilmi\u015ftir. <code>text<\/code> alanlar analiz edilirken (kelimelere ayr\u0131l\u0131r), <code>keyword<\/code> alanlar tam de\u011fer olarak indekslenir ve genellikle filtreleme ve s\u0131ralama i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h2>Veri Olu\u015fturma (Create) Operasyonlar\u0131<\/h2>\n<p>Elasticsearch&#8217;e yeni dok\u00fcman ekleme i\u015flemine &#8220;indeksleme&#8221; denir. \u0130ki ana y\u00f6ntemle dok\u00fcman olu\u015fturulabilir: otomatik ID ile veya kullan\u0131c\u0131 tan\u0131ml\u0131 ID ile.<\/p>\n<h3>Yeni Dok\u00fcman Ekleme (Indexleme)<\/h3>\n<h4>Otomatik ID ile Ekleme<\/h4>\n<p>Elasticsearch&#8217;\u00fcn otomatik olarak benzersiz bir <code>_id<\/code> olu\u015fturmas\u0131n\u0131 istiyorsan\u0131z, <code>POST<\/code> metodunu kullan\u0131rs\u0131n\u0131z. Bu y\u00f6ntem, \u00f6zellikle log verileri veya sens\u00f6r verileri gibi her zaman yeni ve benzersiz dok\u00fcmanlar olu\u015fturuldu\u011funda kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">POST \/urunler\/_doc\n{\n  \"urun_adi\": \"Ak\u0131ll\u0131 Telefon Y\",\n  \"marka\": \"GlobalTech\",\n  \"fiyat\": 799.00,\n  \"stok\": 200,\n  \"ozellikler\": [\"6.5 in\u00e7 ekran\", \"256 GB depolama\", \"\u00dc\u00e7l\u00fc kamera\"],\n  \"eklenme_tarihi\": \"2023-10-26T11:30:00Z\"\n}<\/code><\/pre>\n<p>Yan\u0131t olarak, Elasticsearch olu\u015fturulan dok\u00fcman\u0131n <code>_index<\/code>, <code>_id<\/code>, <code>_version<\/code> ve <code>result<\/code> (olu\u015fturuldu\u011funu belirten <code>created<\/code>) bilgilerini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-json\">{\n  \"_index\": \"urunler\",\n  \"_id\": \"abcXYZ123...\",\n  \"_version\": 1,\n  \"result\": \"created\",\n  \"_shards\": {\n    \"total\": 2,\n    \"successful\": 1,\n    \"failed\": 0\n  },\n  \"_seq_no\": 0,\n  \"_primary_term\": 1\n}<\/code><\/pre>\n<h4>Kullan\u0131c\u0131 Tan\u0131ml\u0131 ID ile Ekleme<\/h4>\n<p>E\u011fer dok\u00fcman\u0131n <code>_id<\/code>&#8216;sini kendiniz belirlemek istiyorsan\u0131z, <code>PUT<\/code> metodunu kullan\u0131rs\u0131n\u0131z. Bu y\u00f6ntem, veritaban\u0131n\u0131zda zaten birincil anahtarlar\u0131 olan verileri Elasticsearch&#8217;e aktar\u0131rken veya belirli bir ID ile dok\u00fcmanlara do\u011frudan eri\u015fmek istedi\u011finizde tercih edilir.<\/p>\n<pre><code class=\"language-bash\">PUT \/urunler\/_doc\/urun_001\n{\n  \"urun_adi\": \"Ak\u0131ll\u0131 Saat Z\",\n  \"marka\": \"WearableCo\",\n  \"fiyat\": 299.50,\n  \"stok\": 50,\n  \"ozellikler\": [\"1.5 in\u00e7 AMOLED ekran\", \"Kalp at\u0131\u015f h\u0131z\u0131 sens\u00f6r\u00fc\"],\n  \"eklenme_tarihi\": \"2023-10-26T12:00:00Z\"\n}<\/code><\/pre>\n<p>Bu istek, <code>urun_001<\/code> ID&#8217;sine sahip bir dok\u00fcman\u0131 olu\u015fturur. E\u011fer bu ID&#8217;ye sahip bir dok\u00fcman zaten varsa, bu istek mevcut dok\u00fcman\u0131 tamamen yeni veri ile de\u011fi\u015ftirir (g\u00fcnceller). Bu, <code>PUT<\/code> operasyonunun idempotent (tekrarlanabilir) oldu\u011fu anlam\u0131na gelir. Yan\u0131t, otomatik ID ile eklemedeki gibi <code>_index<\/code>, <code>_id<\/code>, <code>_version<\/code> ve <code>result<\/code> (olu\u015fturulduysa <code>created<\/code>, g\u00fcncellendiyse <code>updated<\/code>) bilgilerini i\u00e7erir.<\/p>\n<h3>Toplu Ekleme (Bulk API)<\/h3>\n<p>Tek tek dok\u00fcman eklemek, b\u00fcy\u00fck veri k\u00fcmeleri i\u00e7in verimsiz olabilir. Elasticsearch, birden fazla indeksleme, g\u00fcncelleme veya silme i\u015flemini tek bir istekte ger\u00e7ekle\u015ftirmek i\u00e7in <code>_bulk<\/code> API&#8217;sini sunar. Bu, a\u011f gecikmesini azaltarak performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<p><code>_bulk<\/code> API&#8217;si, her sat\u0131r\u0131n bir JSON nesnesi oldu\u011fu \u00f6zel bir format kullan\u0131r. Her i\u015flem iki sat\u0131rdan olu\u015fur: ilk sat\u0131r i\u015flemi (index, create, update, delete) ve meta verileri (<code>_index<\/code>, <code>_id<\/code> gibi) tan\u0131mlar, ikinci sat\u0131r ise dok\u00fcman\u0131n kendisidir (delete i\u015flemi hari\u00e7).<\/p>\n<pre><code class=\"language-bash\">POST \/_bulk\n{\"index\": {\"_index\": \"urunler\", \"_id\": \"urun_002\"}}\n{\"urun_adi\": \"Kablosuz Kulakl\u0131k\", \"marka\": \"AudioPro\", \"fiyat\": 149.99, \"stok\": 300, \"eklenme_tarihi\": \"2023-10-26T13:00:00Z\"}\n{\"create\": {\"_index\": \"urunler\", \"_id\": \"urun_003\"}}\n{\"urun_adi\": \"Ta\u015f\u0131nabilir \u015earj Cihaz\u0131\", \"marka\": \"PowerUp\", \"fiyat\": 49.00, \"stok\": 500, \"eklenme_tarihi\": \"2023-10-26T13:15:00Z\"}\n{\"delete\": {\"_index\": \"urunler\", \"_id\": \"urun_001\"}}\n{\"update\": {\"_index\": \"urunler\", \"_id\": \"urun_002\"}}\n{\"doc\": {\"stok\": 280}}<\/code><\/pre>\n<p><code>_bulk<\/code> API&#8217;si, ba\u015far\u0131l\u0131 ve ba\u015far\u0131s\u0131z t\u00fcm i\u015flemlerin sonu\u00e7lar\u0131n\u0131 i\u00e7eren tek bir yan\u0131t d\u00f6nd\u00fcr\u00fcr. Bu yan\u0131t\u0131 dikkatlice inceleyerek her bir i\u015flemin durumunu kontrol etmek \u00f6nemlidir.<\/p>\n<h2>Veri Okuma (Read) Operasyonlar\u0131<\/h2>\n<p>Elasticsearch&#8217;ten veri okuma, tek bir dok\u00fcman\u0131 ID ile getirmekten, karma\u015f\u0131k sorgularla milyonlarca dok\u00fcman\u0131 filtrelemeye kadar geni\u015f bir yelpazeyi kapsar.<\/p>\n<h3>Tek Dok\u00fcman Okuma (Get API)<\/h3>\n<p>Belirli bir ID&#8217;ye sahip tek bir dok\u00fcman\u0131 almak i\u00e7in <code>GET<\/code> metodunu kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_doc\/urun_002<\/code><\/pre>\n<p>Yan\u0131t, dok\u00fcman\u0131n <code>_index<\/code>, <code>_id<\/code>, <code>_version<\/code>, <code>_seq_no<\/code>, <code>_primary_term<\/code> ve <code>_source<\/code> alanlar\u0131n\u0131 i\u00e7erir. <code>_source<\/code> alan\u0131, dok\u00fcman\u0131n orijinal JSON i\u00e7eri\u011fidir. Ayr\u0131ca, dok\u00fcman\u0131n bulunup bulunmad\u0131\u011f\u0131n\u0131 belirten <code>found<\/code> alan\u0131 da yer al\u0131r.<\/p>\n<pre><code class=\"language-json\">{\n  \"_index\": \"urunler\",\n  \"_id\": \"urun_002\",\n  \"_version\": 2,\n  \"_seq_no\": 1,\n  \"_primary_term\": 1,\n  \"found\": true,\n  \"_source\": {\n    \"urun_adi\": \"Kablosuz Kulakl\u0131k\",\n    \"marka\": \"AudioPro\",\n    \"fiyat\": 149.99,\n    \"stok\": 280,\n    \"eklenme_tarihi\": \"2023-10-26T13:00:00Z\"\n  }\n}<\/code><\/pre>\n<h4>_source Filtreleme<\/h4>\n<p>Baz\u0131 durumlarda, dok\u00fcman\u0131n t\u00fcm <code>_source<\/code>&#8216;una de\u011fil, sadece belirli alanlar\u0131na ihtiyac\u0131m\u0131z olabilir. Bu, a\u011f trafi\u011fini azaltmak ve performans\u0131 art\u0131rmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_doc\/urun_002?_source_include=urun_adi,fiyat<\/code><\/pre>\n<p>Bu istek sadece <code>urun_adi<\/code> ve <code>fiyat<\/code> alanlar\u0131n\u0131 d\u00f6nd\u00fcrecektir. Benzer \u015fekilde, <code>_source_exclude<\/code> ile belirli alanlar\u0131 hari\u00e7 tutabilirsiniz.<\/p>\n<h3>T\u00fcm Dok\u00fcmanlar\u0131 Okuma (Search API)<\/h3>\n<p>Elasticsearch&#8217;\u00fcn g\u00fcc\u00fcn\u00fcn b\u00fcy\u00fck bir k\u0131sm\u0131, <code>_search<\/code> API&#8217;sinde yatar. Bu API, karma\u015f\u0131k sorgularla indekslenmi\u015f dok\u00fcmanlar\u0131 araman\u0131za olanak tan\u0131r.<\/p>\n<h4>Basit Arama<\/h4>\n<p>Bir indeksteki t\u00fcm dok\u00fcmanlar\u0131 almak i\u00e7in bo\u015f bir sorgu kullanabilirsiniz. Ancak bu, b\u00fcy\u00fck indeksler i\u00e7in \u00f6nerilmez.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_search<\/code><\/pre>\n<p>Yan\u0131t, <code>hits<\/code> objesi i\u00e7inde arama sonu\u00e7lar\u0131n\u0131 (dok\u00fcmanlar\u0131) i\u00e7erir. Her bir <code>hit<\/code>, dok\u00fcman\u0131n <code>_index<\/code>, <code>_id<\/code>, <code>_score<\/code> (alakal\u0131 puan\u0131) ve <code>_source<\/code>&#8216;unu i\u00e7erir.<\/p>\n<h4>Sorgu DSL (Query Domain Specific Language)<\/h4>\n<p>Elasticsearch, JSON tabanl\u0131 g\u00fc\u00e7l\u00fc bir sorgu dili olan Query DSL&#8217;i kullan\u0131r. Bu dil, \u00e7e\u015fitli sorgu tipleri ve filtreleme se\u00e7enekleri sunar.<\/p>\n<p>*   <strong><code>match_all<\/code> Query:<\/strong> T\u00fcm dok\u00fcmanlar\u0131 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_search\n    {\n      \"query\": {\n        \"match_all\": {}\n      }\n    }<\/code><\/pre>\n<p>*   <strong><code>match<\/code> Query:<\/strong> Belirli bir alanda tam metin aramas\u0131 yapar. Metin alanlar\u0131 i\u00e7in analiz\u00f6rler kullan\u0131larak kelime e\u015fle\u015fmeleri bulunur.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_search\n    {\n      \"query\": {\n        \"match\": {\n          \"urun_adi\": \"ak\u0131ll\u0131 telefon\"\n        }\n      }\n    }<\/code><\/pre>\n<p>*   <strong><code>term<\/code> Query:<\/strong> Belirli bir alanda tam, e\u015fle\u015fen bir terimi arar. <code>keyword<\/code> alanlar\u0131 i\u00e7in idealdir ve analiz\u00f6r kullanmaz.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_search\n    {\n      \"query\": {\n        \"term\": {\n          \"marka\": \"AudioPro\"\n        }\n      }\n    }<\/code><\/pre>\n<p>    <code>term<\/code> sorgusu, <code>text<\/code> alanlar\u0131nda beklenmedik sonu\u00e7lar verebilir \u00e7\u00fcnk\u00fc <code>text<\/code> alanlar\u0131 indekslenirken kelimelere ayr\u0131l\u0131r (tokenize edilir). Bu nedenle, <code>term<\/code> sorgular\u0131n\u0131 genellikle <code>keyword<\/code> veya di\u011fer yap\u0131land\u0131r\u0131lm\u0131\u015f alanlarda kullanmak daha do\u011frudur.<\/p>\n<p>*   <strong><code>bool<\/code> Query:<\/strong> Birden fazla sorguyu mant\u0131ksal operat\u00f6rlerle (AND, OR, NOT) birle\u015ftirmenizi sa\u011flar.<br \/>\n    *   <code>must<\/code>: T\u00fcm sorgular\u0131n e\u015fle\u015fmesi gerekir (AND).<br \/>\n    *   <code>should<\/code>: En az bir sorgunun e\u015fle\u015fmesi gerekir (OR).<br \/>\n    *   <code>must_not<\/code>: Sorgular\u0131n e\u015fle\u015fmemesi gerekir (NOT).<br \/>\n    *   <code>filter<\/code>: Sorgular\u0131n e\u015fle\u015fmesi gerekir, ancak puanlama (scoring) yapmaz, bu da performans\u0131 art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_search\n    {\n      \"query\": {\n        \"bool\": {\n          \"must\": [\n            { \"match\": { \"urun_adi\": \"kulakl\u0131k\" } }\n          ],\n          \"filter\": [\n            { \"range\": { \"fiyat\": { \"lte\": 150 } } }\n          ],\n          \"must_not\": [\n            { \"term\": { \"marka\": \"TechCo\" } }\n          ]\n        }\n      }\n    }<\/code><\/pre>\n<p>    Bu sorgu, <code>urun_adi<\/code>&#8216;nda &#8220;kulakl\u0131k&#8221; ge\u00e7en, fiyat\u0131 150&#8217;den k\u00fc\u00e7\u00fck veya e\u015fit olan ve markas\u0131 &#8220;TechCo&#8221; olmayan \u00fcr\u00fcnleri bulur.<\/p>\n<h4>Pagination (Sayfalama)<\/h4>\n<p>Arama sonu\u00e7lar\u0131n\u0131 belirli bir boyutta ve ba\u015flang\u0131\u00e7 noktas\u0131ndan itibaren almak i\u00e7in <code>from<\/code> ve <code>size<\/code> parametrelerini kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_search\n{\n  \"query\": { \"match_all\": {} },\n  \"from\": 0,\n  \"size\": 10\n}<\/code><\/pre>\n<p>Bu, ilk 10 sonucu getirir. <code>from<\/code> de\u011ferini art\u0131rarak sonraki sayfalar\u0131 alabilirsiniz.<\/p>\n<h4>Sorting (S\u0131ralama)<\/h4>\n<p>Sonu\u00e7lar\u0131 belirli alanlara g\u00f6re s\u0131ralamak i\u00e7in <code>sort<\/code> parametresi kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_search\n{\n  \"query\": { \"match_all\": {} },\n  \"sort\": [\n    { \"fiyat\": { \"order\": \"desc\" } },\n    { \"urun_adi.keyword\": { \"order\": \"asc\" } }\n  ]\n}<\/code><\/pre>\n<p>Bu sorgu, \u00f6nce fiyata g\u00f6re azalan, sonra \u00fcr\u00fcn ad\u0131na g\u00f6re artan \u015fekilde s\u0131ralar. Metin alanlar\u0131n\u0131 s\u0131ralarken genellikle <code>keyword<\/code> versiyonunu kullanmak gerekir, \u00e7\u00fcnk\u00fc <code>text<\/code> alanlar\u0131 analiz edildi\u011fi i\u00e7in s\u0131ralama beklenen sonu\u00e7lar\u0131 vermeyebilir.<\/p>\n<h4>Aggregations (K\u00fcmelemeler)<\/h4>\n<p>Elasticsearch&#8217;\u00fcn en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri de k\u00fcmelemelerdir. K\u00fcmelemeler, arama sonu\u00e7lar\u0131 \u00fczerinde grupland\u0131rma, sayma, ortalama alma gibi istatistiksel analizler yapmaya olanak tan\u0131r.<\/p>\n<pre><code class=\"language-bash\">GET \/urunler\/_search\n{\n  \"size\": 0,\n  \"aggs\": {\n    \"markalara_gore_urun_sayisi\": {\n      \"terms\": {\n        \"field\": \"marka.keyword\",\n        \"size\": 10\n      }\n    },\n    \"ortalama_fiyat\": {\n      \"avg\": {\n        \"field\": \"fiyat\"\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>Bu sorgu, markalara g\u00f6re \u00fcr\u00fcn say\u0131lar\u0131n\u0131 ve t\u00fcm \u00fcr\u00fcnlerin ortalama fiyat\u0131n\u0131 hesaplar. <code>size: 0<\/code> ile dok\u00fcmanlar\u0131n kendisini getirmeyip sadece k\u00fcmeleme sonu\u00e7lar\u0131n\u0131 alabiliriz.<\/p>\n<h3>Multi Get API<\/h3>\n<p>Birden fazla dok\u00fcman\u0131 ID&#8217;lerine g\u00f6re tek bir istekte almak i\u00e7in <code>_mget<\/code> API&#8217;si kullan\u0131l\u0131r. Bu, <code>_bulk<\/code> API&#8217;sine benzer \u015fekilde a\u011f gecikmesini azaltarak verimlilik sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">GET \/_mget\n{\n  \"docs\": [\n    {\n      \"_index\": \"urunler\",\n      \"_id\": \"urun_002\"\n    },\n    {\n      \"_index\": \"urunler\",\n      \"_id\": \"abcXYZ123...\"\n    }\n  ]\n}<\/code><\/pre>\n<h2>Veri G\u00fcncelleme (Update) Operasyonlar\u0131<\/h2>\n<p>Elasticsearch&#8217;te dok\u00fcman g\u00fcncelleme, k\u0131smi g\u00fcncelleme veya tamamen de\u011fi\u015ftirme \u015feklinde yap\u0131labilir.<\/p>\n<h3>K\u0131smi G\u00fcncelleme (Update API)<\/h3>\n<p><code>_update<\/code> API&#8217;si, mevcut bir dok\u00fcman\u0131n sadece belirli alanlar\u0131n\u0131 de\u011fi\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Bu, dok\u00fcman\u0131n tamam\u0131n\u0131 yeniden indekslemekten daha verimlidir.<\/p>\n<pre><code class=\"language-bash\">POST \/urunler\/_update\/urun_002\n{\n  \"doc\": {\n    \"stok\": 250,\n    \"son_guncelleme\": \"2023-10-26T14:00:00Z\"\n  }\n}<\/code><\/pre>\n<p>Bu istek, <code>urun_002<\/code> ID&#8217;sine sahip dok\u00fcman\u0131n <code>stok<\/code> ve <code>son_guncelleme<\/code> alanlar\u0131n\u0131 g\u00fcnceller. Di\u011fer alanlar de\u011fi\u015fmeden kal\u0131r.<\/p>\n<h4>Script ile G\u00fcncelleme<\/h4>\n<p>Daha karma\u015f\u0131k g\u00fcncelleme senaryolar\u0131 i\u00e7in, <code>script<\/code> kullanarak dok\u00fcmanlar\u0131 g\u00fcncelleyebilirsiniz. \u00d6rne\u011fin, bir sayac\u0131 art\u0131rmak veya ko\u015fullu g\u00fcncellemeler yapmak i\u00e7in.<\/p>\n<pre><code class=\"language-bash\">POST \/urunler\/_update\/urun_002\n{\n  \"script\": {\n    \"source\": \"ctx._source.stok += params.miktar\",\n    \"lang\": \"painless\",\n    \"params\": {\n      \"miktar\": -10\n    }\n  }\n}<\/code><\/pre>\n<p>Bu script, <code>urun_002<\/code> dok\u00fcman\u0131n\u0131n <code>stok<\/code> alan\u0131n\u0131 10 azalt\u0131r. <code>ctx._source<\/code> mevcut dok\u00fcman\u0131 temsil eder.<\/p>\n<h4>Upsert (Ekle veya G\u00fcncelle)<\/h4>\n<p>E\u011fer g\u00fcncellemek istedi\u011finiz dok\u00fcman mevcut de\u011filse, yeni bir dok\u00fcman olu\u015fturmak i\u00e7in <code>upsert<\/code> se\u00e7ene\u011fini kullanabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">POST \/urunler\/_update\/yeni_urun_id\n{\n  \"script\": {\n    \"source\": \"ctx._source.stok += params.miktar\",\n    \"lang\": \"painless\",\n    \"params\": {\n      \"miktar\": 50\n    }\n  },\n  \"upsert\": {\n    \"urun_adi\": \"Yeni \u00dcr\u00fcn\",\n    \"marka\": \"NewBrand\",\n    \"fiyat\": 100.00,\n    \"stok\": 50,\n    \"eklenme_tarihi\": \"2023-10-26T15:00:00Z\"\n  }\n}<\/code><\/pre>\n<p>E\u011fer <code>yeni_urun_id<\/code> mevcut de\u011filse, <code>upsert<\/code> i\u00e7indeki dok\u00fcman olu\u015fturulur. E\u011fer mevcutsa, <code>script<\/code> \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r.<\/p>\n<h3>Tam Dok\u00fcman\u0131 De\u011fi\u015ftirme (Re-indexing)<\/h3>\n<p>Bir dok\u00fcman\u0131n tamam\u0131n\u0131 yeni bir dok\u00fcmanla de\u011fi\u015ftirmek isterseniz, <code>PUT<\/code> metodunu kullanabilirsiniz. Bu, asl\u0131nda bir &#8220;create&#8221; operasyonu gibi \u00e7al\u0131\u015f\u0131r ancak ayn\u0131 ID&#8217;ye sahip bir dok\u00fcman varsa, eskisini silip yerine yenisini koyar.<\/p>\n<pre><code class=\"language-bash\">PUT \/urunler\/_doc\/urun_002\n{\n  \"urun_adi\": \"Kablosuz Kulakl\u0131k Pro\",\n  \"marka\": \"AudioPro\",\n  \"fiyat\": 199.99,\n  \"stok\": 240,\n  \"ozellikler\": [\"G\u00fcr\u00fclt\u00fc Engelleme\", \"Uzun Pil \u00d6mr\u00fc\"],\n  \"eklenme_tarihi\": \"2023-10-26T13:00:00Z\",\n  \"son_guncelleme\": \"2023-10-26T16:00:00Z\"\n}<\/code><\/pre>\n<p>Bu i\u015flem, <code>urun_002<\/code> ID&#8217;li mevcut dok\u00fcman\u0131n t\u00fcm i\u00e7eri\u011fini yukar\u0131daki JSON ile de\u011fi\u015ftirir. <code>_version<\/code> numaras\u0131 art\u0131r\u0131l\u0131r.<\/p>\n<h3>Query ile Toplu G\u00fcncelleme (Update By Query API)<\/h3>\n<p>Belirli bir sorguyla e\u015fle\u015fen birden fazla dok\u00fcman\u0131 ayn\u0131 anda g\u00fcncellemek i\u00e7in <code>_update_by_query<\/code> API&#8217;si kullan\u0131l\u0131r. Bu, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde toplu de\u011fi\u015fiklikler yapmak i\u00e7in \u00e7ok g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<pre><code class=\"language-bash\">POST \/urunler\/_update_by_query\n{\n  \"query\": {\n    \"match\": {\n      \"marka\": \"AudioPro\"\n    }\n  },\n  \"script\": {\n    \"source\": \"ctx._source.fiyat *= 1.10\",\n    \"lang\": \"painless\"\n  }\n}<\/code><\/pre>\n<p>Bu istek, markas\u0131 &#8220;AudioPro&#8221; olan t\u00fcm \u00fcr\u00fcnlerin fiyat\u0131n\u0131 %10 art\u0131r\u0131r. <code>_update_by_query<\/code> asenkron bir i\u015flem olabilir ve b\u00fcy\u00fck veri k\u00fcmelerinde uzun s\u00fcrebilir. \u0130\u015flemin durumunu takip etmek i\u00e7in <code>_tasks<\/code> API&#8217;si kullan\u0131labilir.<\/p>\n<h2>Veri Silme (Delete) Operasyonlar\u0131<\/h2>\n<p>Elasticsearch&#8217;ten dok\u00fcman silme, tekil dok\u00fcmanlar\u0131 veya sorguyla e\u015fle\u015fen dok\u00fcmanlar\u0131 silme \u015feklinde ger\u00e7ekle\u015ftirilebilir.<\/p>\n<h3>Tek Dok\u00fcman Silme (Delete API)<\/h3>\n<p>Belirli bir ID&#8217;ye sahip tek bir dok\u00fcman\u0131 silmek i\u00e7in <code>DELETE<\/code> metodunu kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-bash\">DELETE \/urunler\/_doc\/abcXYZ123...<\/code><\/pre>\n<p>Yan\u0131t, silme i\u015fleminin ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 (<code>result: deleted<\/code>), <code>_index<\/code>, <code>_id<\/code> ve <code>_version<\/code> bilgilerini i\u00e7erir. E\u011fer dok\u00fcman bulunamazsa, <code>result: not_found<\/code> d\u00f6ner.<\/p>\n<h3>T\u00fcm Index&#8217;i Silme<\/h3>\n<p>Bir indeksi ve i\u00e7indeki t\u00fcm dok\u00fcmanlar\u0131 tamamen silmek i\u00e7in, indeksin ad\u0131na <code>DELETE<\/code> iste\u011fi g\u00f6nderilir. Bu i\u015flem geri al\u0131namaz ve dikkatli kullan\u0131lmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">DELETE \/urunler<\/code><\/pre>\n<p>Bu istek, <code>urunler<\/code> indeksini ve i\u00e7indeki t\u00fcm dok\u00fcmanlar\u0131 siler.<\/p>\n<h3>Query ile Toplu Silme (Delete By Query API)<\/h3>\n<p>Belirli bir sorguyla e\u015fle\u015fen birden fazla dok\u00fcman\u0131 ayn\u0131 anda silmek i\u00e7in <code>_delete_by_query<\/code> API&#8217;si kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-bash\">POST \/urunler\/_delete_by_query\n{\n  \"query\": {\n    \"range\": {\n      \"stok\": {\n        \"lte\": 0\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>Bu istek, sto\u011fu 0 veya daha az olan t\u00fcm \u00fcr\u00fcn dok\u00fcmanlar\u0131n\u0131 siler. <code>_delete_by_query<\/code> de <code>_update_by_query<\/code> gibi asenkron \u00e7al\u0131\u015fabilir.<\/p>\n<h2>Geli\u015fmi\u015f Konular ve En \u0130yi Uygulamalar<\/h2>\n<p>CRUD operasyonlar\u0131n\u0131 etkili bir \u015fekilde kullanmak i\u00e7in baz\u0131 geli\u015fmi\u015f konular\u0131 ve en iyi uygulamalar\u0131 bilmek faydal\u0131d\u0131r.<\/p>\n<h3>Versiyonlama (Optimistic Concurrency)<\/h3>\n<p>Elasticsearch, her dok\u00fcman\u0131n bir <code>_version<\/code> numaras\u0131 tutar. Her g\u00fcncelleme veya silme i\u015fleminde bu numara art\u0131r\u0131l\u0131r. Bu mekanizma, iyimser e\u015fzamanl\u0131l\u0131k kontrol\u00fc (optimistic concurrency control) sa\u011flar. Yani, iki istemcinin ayn\u0131 anda ayn\u0131 dok\u00fcman\u0131 g\u00fcncellemeye \u00e7al\u0131\u015fmas\u0131n\u0131 engeller. E\u011fer bir istemci eski bir <code>_version<\/code> numaras\u0131yla g\u00fcncelleme yapmaya \u00e7al\u0131\u015f\u0131rsa, Elasticsearch bir \u00e7ak\u0131\u015fma hatas\u0131 (<code>Conflict (409)<\/code>) d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>Daha geli\u015fmi\u015f e\u015fzamanl\u0131l\u0131k kontrol\u00fc i\u00e7in <code>if_seq_no<\/code> ve <code>if_primary_term<\/code> parametreleri kullan\u0131labilir. Bu parametreler, dok\u00fcman\u0131n <code>_seq_no<\/code> ve <code>_primary_term<\/code> de\u011ferlerinin belirli bir de\u011ferle e\u015fle\u015fmesi durumunda i\u015flemin ger\u00e7ekle\u015fmesini sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">PUT \/urunler\/_doc\/urun_002?if_seq_no=2&if_primary_term=1\n{\n  \"urun_adi\": \"Kablosuz Kulakl\u0131k Pro Max\",\n  \"marka\": \"AudioPro\",\n  \"fiyat\": 249.99,\n  \"stok\": 230\n}<\/code><\/pre>\n<p>Bu istek, sadece <code>urun_002<\/code> dok\u00fcman\u0131n\u0131n <code>_seq_no<\/code>&#8216;su 2 ve <code>_primary_term<\/code>&#8216;i 1 ise ba\u015far\u0131l\u0131 olur.<\/p>\n<h3>Yenileme (Refresh) Mekanizmas\u0131<\/h3>\n<p>Elasticsearch &#8220;near real-time&#8221; (neredeyse ger\u00e7ek zamanl\u0131) bir sistemdir. Bir dok\u00fcman\u0131 indeksledi\u011finizde veya g\u00fcncelledi\u011finizde, hemen arama sonu\u00e7lar\u0131nda g\u00f6r\u00fcnmeyebilir. Bu durum, dok\u00fcmanlar\u0131n arama i\u00e7in kullan\u0131labilir hale gelmeden \u00f6nce bir &#8220;refresh&#8221; (yenileme) i\u015flemi gerektirmesinden kaynaklan\u0131r. Varsay\u0131lan olarak, indeksler her saniyede bir yenilenir.<\/p>\n<p>Anl\u0131k g\u00f6r\u00fcn\u00fcrl\u00fck gerektiren senaryolarda, indeksleme veya g\u00fcncelleme iste\u011fine <code>?refresh=true<\/code> parametresini ekleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">POST \/urunler\/_doc?refresh=true\n{\n  \"urun_adi\": \"H\u0131zl\u0131 \u00dcr\u00fcn\",\n  \"marka\": \"FastCo\",\n  \"fiyat\": 10.00\n}<\/code><\/pre>\n<p>Ancak, <code>refresh=true<\/code> her istekte kullan\u0131ld\u0131\u011f\u0131nda performans d\u00fc\u015f\u00fc\u015f\u00fcne neden olabilir, \u00e7\u00fcnk\u00fc her yenileme i\u015flemi kaynak t\u00fcketir. Bu nedenle, sadece ger\u00e7ekten ihtiya\u00e7 duyuldu\u011funda kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h3>Hata Y\u00f6netimi<\/h3>\n<p>Elasticsearch API&#8217;si, HTTP durum kodlar\u0131n\u0131 (\u00f6rne\u011fin, 200 OK, 201 Created, 404 Not Found, 409 Conflict, 500 Internal Server Error) ve detayl\u0131 JSON hata mesajlar\u0131n\u0131 kullanarak hata durumlar\u0131n\u0131 bildirir. Uygulamalar\u0131n\u0131zda bu hata kodlar\u0131n\u0131 ve mesajlar\u0131n\u0131 do\u011fru bir \u015fekilde i\u015flemek, sa\u011flam bir sistem i\u00e7in kritiktir.<\/p>\n<h3>G\u00fcvenlik<\/h3>\n<p>Elastic Stack&#8217;in g\u00fcvenlik \u00f6zellikleri (X-Pack Security), kimlik do\u011frulama, yetkilendirme, \u015fifreleme ve denetim gibi yetenekler sunar. \u00dcretim ortamlar\u0131nda Elasticsearch&#8217;\u00fc kullan\u0131rken bu g\u00fcvenlik \u00f6zelliklerini etkinle\u015ftirmek ve yap\u0131land\u0131rmak zorunludur. API anahtarlar\u0131, rol tabanl\u0131 eri\u015fim kontrol\u00fc gibi mekanizmalarla verilere eri\u015fimi k\u0131s\u0131tlamak \u00f6nemlidir.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>*   <strong>Bulk API Kullan\u0131m\u0131:<\/strong> B\u00fcy\u00fck veri k\u00fcmelerini indekslerken, g\u00fcncellerken veya silerken her zaman <code>_bulk<\/code> API&#8217;sini kullan\u0131n. Tekil isteklerden kat kat daha h\u0131zl\u0131d\u0131r.<br \/>\n*   <strong>Do\u011fru Mapping:<\/strong> Veri tiplerini ve analiz\u00f6rleri do\u011fru bir \u015fekilde tan\u0131mlamak, arama ve indeksleme performans\u0131n\u0131 do\u011frudan etkiler. <code>keyword<\/code> ve <code>text<\/code> alanlar\u0131 aras\u0131ndaki fark\u0131 iyi anlamak ve do\u011fru yerde kullanmak \u00f6nemlidir.<br \/>\n*   <strong>Filtreleri Etkili Kullanma:<\/strong> <code>bool<\/code> sorgular\u0131nda <code>filter<\/code> ba\u011flam\u0131n\u0131 kullanmak, puanlama maliyetinden ka\u00e7\u0131narak sorgu performans\u0131n\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>Yenileme Aral\u0131klar\u0131:<\/strong> <code>refresh_interval<\/code> ayar\u0131n\u0131 uygulaman\u0131z\u0131n gereksinimlerine g\u00f6re ayarlay\u0131n. Anl\u0131k g\u00f6r\u00fcn\u00fcrl\u00fck gerekmeyen durumlarda bu aral\u0131\u011f\u0131 art\u0131rmak, indeksleme performans\u0131n\u0131 iyile\u015ftirir.<br \/>\n*   <strong>Shard ve Replica Say\u0131s\u0131:<\/strong> \u0130ndekslerinizin shard ve replica say\u0131lar\u0131n\u0131 do\u011fru yap\u0131land\u0131rmak, hem performans hem de veri g\u00fcvenli\u011fi i\u00e7in hayati \u00f6neme sahiptir.<br \/>\n*   <strong>Cache Mekanizmalar\u0131:<\/strong> Elasticsearch&#8217;\u00fcn sorgu \u00f6nbelle\u011fi gibi dahili \u00f6nbellekleme mekanizmalar\u0131n\u0131 anlamak ve kullanmak, tekrar eden sorgular\u0131n performans\u0131n\u0131 art\u0131rabilir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Elasticsearch, modern veri odakl\u0131 uygulamalar i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir platform sunar. Bu makalede ele ald\u0131\u011f\u0131m\u0131z CRUD operasyonlar\u0131 (Create, Read, Update, Delete), Elasticsearch ile veri etkile\u015fiminin temel ta\u015flar\u0131d\u0131r. Dok\u00fcmanlar\u0131n nas\u0131l indekslendi\u011fini, \u00e7e\u015fitli sorgu t\u00fcrleriyle nas\u0131l arand\u0131\u011f\u0131n\u0131, k\u0131smi veya toplu g\u00fcncellemelerin nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 ve verilerin nas\u0131l silindi\u011fini anlamak, bu g\u00fc\u00e7l\u00fc arama motorundan en iyi \u015fekilde yararlanman\u0131n anahtar\u0131d\u0131r. <code>curl<\/code> \u00f6rnekleriyle pratik uygulamalar\u0131 g\u00f6sterdik ve performans, g\u00fcvenlik ve e\u015fzamanl\u0131l\u0131k gibi \u00f6nemli konulara de\u011findik. Elasticsearch&#8217;\u00fcn sundu\u011fu Query DSL ve Aggregations gibi geli\u015fmi\u015f \u00f6zellikler, verilerinizden anlaml\u0131 i\u00e7g\u00f6r\u00fcler elde etmenizi sa\u011flayarak uygulaman\u0131z\u0131n de\u011ferini art\u0131racakt\u0131r. Bu temel bilgileri kullanarak, karma\u015f\u0131k veri y\u00f6netimi ve arama senaryolar\u0131n\u0131 kolayca hayata ge\u00e7irebilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla b\u00fcy\u00fcyen veri d\u00fcnyas\u0131nda, b\u00fcy\u00fck hacimli verileri depolamak,","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-35786","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131\" \/>\n<meta property=\"og:description\" content=\"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131 Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla b\u00fcy\u00fcyen veri d\u00fcnyas\u0131nda, b\u00fcy\u00fck hacimli verileri depolamak,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-03T18:40:46+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131\",\"datePublished\":\"2025-12-03T18:40:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/\"},\"wordCount\":2681,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/\",\"name\":\"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-03T18:40:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/","og_locale":"tr_TR","og_type":"article","og_title":"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131","og_description":"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131 Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla b\u00fcy\u00fcyen veri d\u00fcnyas\u0131nda, b\u00fcy\u00fck hacimli verileri depolamak,","og_url":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-03T18:40:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131","datePublished":"2025-12-03T18:40:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/"},"wordCount":2681,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/","url":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/","name":"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-03T18:40:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/elasticsearch-ile-veri-etkilesimi-crud-operasyonlari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Elasticsearch ile Veri Etkile\u015fimi: CRUD Operasyonlar\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35786","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35786"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35786\/revisions"}],"predecessor-version":[{"id":35787,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35786\/revisions\/35787"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}