Anasayfa » .NET’de ElasticSearch ile Çalışma

Makaleyi Paylaş

.NET / ASP.NET / Yazılım

.NET’de ElasticSearch ile Çalışma

Merhabalar;
Bu yazımda .Net’de ElasticSearch nasıl kullanılır buna bakacağız.

ElasticSearch Lucene library’si üzerine inşaa edilmiş çok yetenekli açık kaynak bir metin arama motorudur.

ElasticSearch, verileri JSON biçiminde saklayan bir Veritabanıdır. Verileri yapılandırılmamış biçimde saklar. Elasticsearch, indeksleme, otomatik tahmin vb. işlemler için Lucene StandardAnalyzer kullanıyor. Elasticsearch’ün bütün özellikleri bir REST API olarak bulunmaktadır. API’nin yardımıyla, Arama, Verileri Alma, Gönderme, Silme işlemlerini yapabiliyoruz.

ElasticSearch Java ile geliştirilmiştir, öncelikle kurulum ve yapılandırması için JRE’yi kurmalıyız.

Sponsor

JRE yüklendikten sonra aşağıdaki bağlantıdan ElasticSearch indirerek kurmamız gerekmektedir;
https://www.elastic.co/downloads/elasticsearch

Elasticsearch yüklendikten sonra, herhangi bir browser yardımıyla aşağıdaki linke girerek ElasticSearch çalışıyormu kontrol ediyoruz.

http://localhost:9200

Bir sorun yoksa Web veya WebApi projesi oluşturarak devam edebilirsiniz.

Biz ElasticSearch işlemleri için NEST nuget paketini kullanacağız, bu paketi Nuget yöneticisi ile projemize kuruyoruz.;

Paketi yükledikten sonra projemizde kullanmak için

using Nest;

eklemeyi unutmuyoruz.

Şimdi kodlamamıza geçebiliriz; Bağlanmak, dize oluşturmak, veri yazmak ve eklemek için bir API oluşturuyoruz;

[System.Web.Http.Route("ConnectAndInsertData")]  
[System.Web.Http.HttpPost]  
public HttpResponseMessage ConnectAndInsertData(RawData model)  
{  
    HttpResponseMessage response = new HttpResponseMessage();  
  
    var jsonResult = "";  
    try  
    {  
        if (model != null)  
        {  
            Uri EsInstance = new Uri("http://localhost:9200");  
            ConnectionSettings EsConfiguration = new ConnectionSettings(EsInstance );  
            ElasticClient EsClient = new ElasticClient(EsConfiguration);  
  
            var settings = new IndexSettings { NumberOfReplicas = 1, NumberOfShards = 2 };  
            var indexConfig = new IndexState  
            {  
                Settings = settings  
            };  
  
            if (!EsClient.IndexExists("sample").Exists) // I am creating database named "sample". check if exist before creating the new  
            {  
                EsClient.CreateIndex("sample", c => c  
                .InitializeUsing(indexConfig)  
                .Mappings(m => m.Map<RawData>(mp => mp.AutoMap())));  
            }  
  
            var getTableData = EsClient.Count<RawData>(s => s.Index("sample").Type("rawdata"));
  
            if (EsClient.IndexExists("sample").Exists)  
            {  
                var result = EsClient.Index(model, i => i  
                    .Index("sample")  
                    .Type("rawdata")  
                    .Id(getTableData.Count + 1)  
                    .Refresh(Elasticsearch.Net.Refresh.True)  
                    );  
                if (Convert.ToString(result.Result) == "Created")  
                {  
                    jsonResult = JsonConvert.SerializeObject("{\"result\":true\"}");  
                    response = Request.CreateResponse(HttpStatusCode.OK);  
                    response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");  
                }  
            }  
        }  
  
    }  
    catch (Exception ex)  
    {  
        jsonResult = JsonConvert.SerializeObject("{\"result\":false\"}");  
        response = Request.CreateResponse(HttpStatusCode.InternalServerError);  
        response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");  
    }  
    if (string.IsNullOrEmpty(jsonResult))  
    {  
        jsonResult = JsonConvert.SerializeObject("{\"result\":false\"}");  
        response = Request.CreateResponse(HttpStatusCode.ExpectationFailed);  
        response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");  
    }  
    return response;  
}  

Şimdi verilerin çekilip çekilmediğini kontrol etmeliyiz, bunun için tablodan verileri alabilmek adına bir API daha oluşturuyoruz;

[System.Web.Http.Route("GetData")]  
        [System.Web.Http.HttpGet]  
        public HttpResponseMessage GetData()  
        {  
            HttpResponseMessage response;  
           Uri EsInstance = new Uri("http://localhost:9200");  
           ConnectionSettings EsConfiguration = new ConnectionSettings(EsInstance );  
           ElasticClient EsClient = new ElasticClient(EsConfiguration);  
  
            var getTableData = EsClient.Search<RawData>(s => s.Index("sample").Type("rawdata").Size(300000).Take(10000)); // you can get maximum 10000 records at a time  
  
            var jsonResult = JsonConvert.SerializeObject("{\"result\":true\"}");  
            List<RawData> lstData = new List<RawData>();  
  
            foreach (var hit in getTableData.Hits)  
            {                 
                lstData.Add(hit.Source);  
            }  
            if (lstData != null)  
            {  
                jsonResult = JsonConvert.SerializeObject(getTableData);  
            }  
            response = Request.CreateResponse(HttpStatusCode.OK);  
            response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");  
            return response;  
        }  

Böylece, .NET ile ElasticSearch’e veri ekleme ve verilerde arama yapmış olduk. Diğer makalelerimde silme, tam arama yapma gibi konulara değineceğim.

Makaleyi Paylaş

IT alanında 16 sene önce donanım ile başlayan tecrübem, network ve sonrasında iş analizi, yazılım geliştirme ve proje yöneticiliği alanlarında devam etmiştir. Endüstriyel yazılımlar, sahadan veri toplama ve analizleri, otomatik etiketleme ve barkod sistemleri, otomatik tartım ve robotik konularında tecrübe sahibiyim. Sanayi 4.0 kapsamında imalat sanayinin dijital dönüşümünde çok fazla projenin hayata geçmesini sağladım. Open Source projelerle uzun süre ilgilendim, analiz ve implementasyonu konularında tecrübe edindim. Bunlar dışında hobi amacıyla başlasam da sonradan ürüne dönüşen, geliştirme kartları ile farklı çalışmalarım olmuştur. Raspberry Pi üzerinde yaptığım donanımsal ve yazılımsal işler ile çok farklı ürünler ortaya çıkartarak tecrübe edindim.

Cevap bırakın