{"id":1488,"date":"2023-05-12T14:29:12","date_gmt":"2023-05-12T14:29:12","guid":{"rendered":"https:\/\/www.delimuhendis.org\/?p=1488"},"modified":"2023-05-12T14:29:13","modified_gmt":"2023-05-12T14:29:13","slug":"net-core-ve-web-api-elasticsearch","status":"publish","type":"post","link":"https:\/\/www.delimuhendis.org\/?p=1488","title":{"rendered":"Net Core ve Web API: Elasticsearch"},"content":{"rendered":"\n<p>Merhabalar,<\/p>\n\n\n\n<p>Bug\u00fcn sizinle elasticsearch konusuna de\u011finece\u011fiz. Elasticsearch kurumsal ve b\u00fcy\u00fck \u00f6l\u00e7ekli yaz\u0131l\u0131mlar\u0131n olmazsa olmaz\u0131, dinamik aramalar i\u00e7in b\u00fcy\u00fck avantajlar\u0131 olan, json tabanl\u0131 veri tutan bir veritaban\u0131d\u0131r.<\/p>\n\n\n\n<p>\u00d6ncelikle her zaman oldu\u011fu gibi, kendi i\u015fleminize uygun olarak elasticsearch&#8217;\u00fc kurman\u0131z gerekmektedir. Kurulum i\u015flemleri i\u00e7in windows kuruyorsan\u0131z windows&#8217;a uygun exe dosyas\u0131n\u0131 indirebilir, macOS ve linux i\u00e7in homebrew paket y\u00f6neticisini kullanabilirsiniz.<\/p>\n\n\n\n<p>Elasticsearch&#8217;\u00fc aya\u011fa kald\u0131rd\u0131\u011f\u0131n\u0131z\u0131 varsayarak ba\u015fl\u0131yoruz. \u00d6ncelikle a\u015fa\u011f\u0131daki paketi projenize nuget Manager yada paket terminalini kullanarak eklemeniz gerekmektedir.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>NEST<\/code><\/pre>\n\n\n\n<p>Bundan sonra geli\u015ftirme i\u015flemlerine ge\u00e7ebiliriz. Elasticsearch veritaban\u0131n\u0131 kullanmak i\u00e7in di\u011fer b\u00fct\u00fcn veritabanlar\u0131 gibi bir client nesnesine ihtiya\u00e7 duyulmaktad\u0131r. A\u015fa\u011f\u0131daki gibi bu client olu\u015fturulabilir.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static readonly ConnectionSettings settings =\n     new ConnectionSettings(new Uri(\"http:\/\/localhost:9200\/\"))\n         .DefaultIndex(\"users\")\n         .DefaultMappingFor&lt;Dictionary&lt;string,object>>(m => m);\nprivate static readonly ElasticClient client = new ElasticClient(settings);<\/code><\/pre>\n\n\n\n<p>Kodu biraz a\u00e7\u0131klamak gerekirse, elasticsearch&#8217;\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131 9200 portu ile ba\u011flant\u0131 kuruyor, users indeki ve ona maplenmi\u015f user datas\u0131yla kurulan ba\u011flant\u0131 sayesinde sonraki i\u015flemlerimizi yapaca\u011f\u0131z.<\/p>\n\n\n\n<p>Bu noktadan sonra veritaban\u0131m\u0131za biraz data eklememiz gerekmektedir. A\u015fa\u011f\u0131daki endpointe post methodu kullanarak, a\u015fa\u011f\u0131daki json iste\u011fini de body&#8217;de yollayarak veri ekleyebiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP Post\nhttp:&#47;&#47;localhost:9200\/users\/data\n\n{\r\n\t\"Id\":1,\r\n\t\"Username\":\"Burak\"\r\n}\r\n\n<\/code><\/pre>\n\n\n\n<p>Siz bu ve\/veya bununla beraber ba\u015fka veriler de ekleyebilirsiniz.<\/p>\n\n\n\n<p>Bu noktadan sonra sorgulama i\u015flemlerine ge\u00e7ebiliriz. Yukar\u0131 b\u00f6l\u00fcmde ilk a\u015famada olu\u015fturdu\u011fumuz Elasticsearch istemcisi ile ID&#8217;si 1 olan kullan\u0131c\u0131y\u0131 getirtiyoruz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var response = client.Search&lt;Dictionary&lt;string,object>>(x=>x.Query(y=>y.Term(\"Id\",2))); \/\/ ID'si 1 olan\u0131 getir\nvar doc = response.Documents.FirstOrDefault();\nvar user = new Models.User(doc&#91;\"Username\"].ToString(), Convert.ToInt32(doc&#91;\"Id\"]))<\/code><\/pre>\n\n\n\n<p>Burada g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi DB&#8217;den kayd\u0131 al\u0131p parse ettik. Biz burada ID&#8217;si 1 olan kayd\u0131 getirttik ancak siz ihtiyac\u0131n\u0131za g\u00f6re farkl\u0131 sorgular da yapabilirsiniz. \u00d6rnek olarak Username&#8217;i \u015fu olan, adresi bu olanlar vs&#8230;<\/p>\n\n\n\n<p>Bir sonraki yaz\u0131m\u0131zda g\u00f6r\u00fc\u015fmek \u00fczere.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhabalar, Bug\u00fcn sizinle elasticsearch konusuna de\u011finece\u011fiz. Elasticsearch kurumsal ve b\u00fcy\u00fck \u00f6l\u00e7ekli yaz\u0131l\u0131mlar\u0131n olmazsa olmaz\u0131, dinamik aramalar i\u00e7in b\u00fcy\u00fck avantajlar\u0131 olan,&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1368,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[46,660,663,662,414,664,608],"class_list":["post-1488","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programlama","tag-api","tag-database","tag-elastic","tag-elasticsearch","tag-net-core","tag-search","tag-web"],"_links":{"self":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1488","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1488"}],"version-history":[{"count":1,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1488\/revisions"}],"predecessor-version":[{"id":1489,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1488\/revisions\/1489"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/media\/1368"}],"wp:attachment":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1488"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1488"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}