Net Core ve Web API: Elasticsearch

Merhabalar,

Bugün sizinle elasticsearch konusuna değineceğiz. Elasticsearch kurumsal ve büyük ölçekli yazılımların olmazsa olmazı, dinamik aramalar için büyük avantajları olan, json tabanlı veri tutan bir veritabanıdır.

Öncelikle her zaman olduğu gibi, kendi işleminize uygun olarak elasticsearch’ü kurmanız gerekmektedir. Kurulum işlemleri için windows kuruyorsanız windows’a uygun exe dosyasını indirebilir, macOS ve linux için homebrew paket yöneticisini kullanabilirsiniz.

Elasticsearch’ü ayağa kaldırdığınızı varsayarak başlıyoruz. Öncelikle aşağıdaki paketi projenize nuget Manager yada paket terminalini kullanarak eklemeniz gerekmektedir.

NEST

Bundan sonra geliştirme işlemlerine geçebiliriz. Elasticsearch veritabanını kullanmak için diğer bütün veritabanları gibi bir client nesnesine ihtiyaç duyulmaktadır. Aşağıdaki gibi bu client oluşturulabilir.

private static readonly ConnectionSettings settings =
     new ConnectionSettings(new Uri("http://localhost:9200/"))
         .DefaultIndex("users")
         .DefaultMappingFor<Dictionary<string,object>>(m => m);
private static readonly ElasticClient client = new ElasticClient(settings);

Kodu biraz açıklamak gerekirse, elasticsearch’ün çalıştığı 9200 portu ile bağlantı kuruyor, users indeki ve ona maplenmiş user datasıyla kurulan bağlantı sayesinde sonraki işlemlerimizi yapacağız.

Bu noktadan sonra veritabanımıza biraz data eklememiz gerekmektedir. Aşağıdaki endpointe post methodu kullanarak, aşağıdaki json isteğini de body’de yollayarak veri ekleyebiliriz.

HTTP Post
http://localhost:9200/users/data

{
	"Id":1,
	"Username":"Burak"
}

Siz bu ve/veya bununla beraber başka veriler de ekleyebilirsiniz.

Bu noktadan sonra sorgulama işlemlerine geçebiliriz. Yukarı bölümde ilk aşamada oluşturduğumuz Elasticsearch istemcisi ile ID’si 1 olan kullanıcıyı getirtiyoruz.

var response = client.Search<Dictionary<string,object>>(x=>x.Query(y=>y.Term("Id",2))); // ID'si 1 olanı getir
var doc = response.Documents.FirstOrDefault();
var user = new Models.User(doc["Username"].ToString(), Convert.ToInt32(doc["Id"]))

Burada gördüğümüz gibi DB’den kaydı alıp parse ettik. Biz burada ID’si 1 olan kaydı getirttik ancak siz ihtiyacınıza göre farklı sorgular da yapabilirsiniz. Örnek olarak Username’i şu olan, adresi bu olanlar vs…

Bir sonraki yazımızda görüşmek üzere.

Leave a Reply

Your email address will not be published. Required fields are marked *