Dotnet 5.0’de Postgresql Full Text Search ile Arama Motoru yapmak.

Bu yazımda, postgresql full text search’ü dotnet 5’de nasıl kullanılabileceğini bir api yazarak test edeceğiz.

Geliştirme Yaptığım Ortam

  • Windows 10
  • Postgresql 12
  • Dotnet 5.0
  • EntityFramework Core 5

Postgresql Full Text Search hakkında detaylı bilgi için şu makalemi inceleyebilirsiniz.

Bir api projesi yapacağız bu api postgresql fts ile aradaki köprü olacak. Postgresqli .net platformunda kullanabilmek için npsql kütüphanesinden faydalanacağız.

Dotnet 5.0 web api seçenekleriyle projemi açıyorum

MovieController adında bir api controller açalım

appsetting.json ve startup‘da veritabanı bağlantı ayarlarını tanımlayalım

Startup.cs:

Basit bir api yapacağımız için monolit(tek katmanlı) bir mimariyle yapacağız. Models adında klasör içinde entitylerimiz ve Dbcontext sınıfımızı oluşturacağız

Daha önce veritabanında oluşturduğumuz tabloya göre hareket edeceğiz ilgili makale şu linkte. Movie entitysinde arama yapacağımız bir SearchKeywords columnu var ve burada önümüze iki seçenek çıkıyor

  1. Npsql librarysinden faydanalarak tsvector sütununu direkt olarak NpgsqlTsVector tipinde ayarlayabiliriz. Böylece npsql’in Full text search için özel oluşturduğu extensionlardan faydalanabiliriz
  2. Diğer Seçenek ise tsvector columnumuzu direkt string olarak tanımlamak bu durumda ise extensionlarla değil saf sql yazarak faydalanabiliriz

İki yöntemi de nasıl yazacağımızdan ve artı eksi yönlerinden bahsedeceğim ilk yöntemle başlayalım.

Movie.cs

MovieController

Swagger üzerinde apimizi test edelim

Şimdi 2.yöntemimizi test edelim. Önce SearchKeywords propertyimizi string olarak değiştirelim. Değiştirdikten sonra Find actionuna ham sql sorgumuzu yazalım

Test ettiğimizde aşağıdaki sonuçlar gelecek

Sonuç

Her iki yöntemde de sonuçları elde ettik ama Ham sql zorunlu olmadıkça yazılmamalı eğer ki orm framework’ü bazı sql desteklerini vermiyorsa mecbur kullanılabilir örnek olarak npsql entity framework kütüphanesinde tsvector desteği yok mecburen ham sql yazılmak zorunda. Diğer türlü sql sorgularıyla yapılacak işlemler ile hızlı sonuç alabilirsiniz ama temiz kod yazılamaz ileride problemlere sebep olur.

Elasticsearch’e ihtiyaç olmayan durumlarda yani az datamızın olması bunun yanında, syntax’ının çabuk öğrenilmemesi gibi nedenlerle postgresql bu konuda gayet güzel bir alternatif olmakta.

BUNLARI DA BEĞENEBİLİRSİNİZ...

Yorum Bırakın

E-mail adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmiştir.