Elasticsearch #3: C# ile Derinlemesine Entegrasyon
Merhaba! Elasticsearch, ölçeklenebilirlik ve gerçek zamanlı arama yetenekleriyle bilinen harika bir arama ve analiz motorudur. Bu yazımızda, Elasticsearch ile C# entegrasyonuna odaklanıyoruz.
Başlangıç: Elasticsearch.Net ve NEST
Elasticsearch ile C# arasında çalışmak için iki ana kütüphane bulunmaktadır: Elasticsearch.Net
(düşük seviyeli kütüphane) ve NEST
(yüksek seviyeli kütüphane). Başlamadan önce, projenize bu iki paketi NuGet üzerinden eklemeniz gerekmektedir.
Basit bir C# Uygulaması
İlk olarak, bir Product
sınıfı oluşturalım:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
public string Description { get; set; }
}
Bağlantı Ayarları
Özellikle çok sayıda yapılandırma ve bağlantı dizesi kullanıyorsanız, bu bilgileri doğrudan kodda saklamak yerine appsettings.json
gibi bir yapılandırma dosyasında saklamak daha mantıklıdır.
appsettings.json
:
{
"ElasticsearchSettings": {
"Uri": "http://localhost:9200"
}
}
Bağlantıyı kurarken bu yapılandırmayı kullanabilirsiniz:
var elasticUri = Configuration["ElasticsearchSettings:Uri"];
var settings = new ConnectionSettings(new Uri(elasticUri))
.DefaultIndex("products");
var client = new ElasticClient(settings);
İndeks Oluşturma
Öncelikle, ürünlerimizi saklamak için bir indeks oluşturmamız gerekiyor:
if (!client.Indices.Exists("products").Exists)
{
client.Indices.Create("products", index => index
.Map<Product>(x => x.AutoMap())
);
}
Ekleme İşlemi
Bir Product
nesnesi oluşturup Elasticsearch'a ekleyelim:
var newProduct = new Product
{
Id = 1,
Name = "Elasticsearch Guide",
Price = 49.99,
Description = "Complete guide for Elasticsearch with C#"
};
var response = client.IndexDocument(newProduct);
Güncelleme İşlemi
Mevcut bir ürünü güncelleyelim:
newProduct.Price = 39.99;
var response = client.Update<Product>(newProduct.Id, u => u
.Doc(newProduct)
);
Silme İşlemi
Bir ürünü indeksten silmek de oldukça basittir:
var response = client.Delete<Product>(newProduct.Id);
Arama İşlemi
Ürünler arasında basit bir arama yapalım:
var searchResponse = client.Search<Product>(s => s
.From(0)
.Size(10)
.Query(q => q
.Match(m => m
.Field(f => f.Name)
.Query("Elasticsearch")
)
)
);
var products = searchResponse.Documents.ToList();
Sonuç
Elasticsearch ile C# entegrasyonu, geniş veri setleri üzerinde hızlı sorgulama ve analiz yeteneklerini C# projelerinize entegre edebilmenizi sağlar. Bu makalede temel CRUD işlemleri üzerinde durduk, ancak Elasticsearch’ın sunduğu özellikler çok daha geniş kapsamlıdır. Gelecekteki yazılarımızda bu özellikleri daha detaylı inceleyeceğiz.