How to Make Search Engine with Postgresql Full Text Search In Asp.Net Core (5.0)

In this post, We will test postgresql full text search with api in Asp.net core (5.0)

Development Environment

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

For detail info about Postgresql Full Text Search, this article you can examine

We will make an api project, this api will be the bridge between with postgresql fts

We open as Asp.Net Core (5.0) web api

We create api controller named MovieController

We make connection settings in appsetting.json and startup.cs

Startup.cs:

We do single layer architecture as it is a simple api

We will act according to the table we created in the link. There is a SearchKeywords column where we will search in the Movie entity, and there are two options here.

  1. We can create tsvector column in NpgsqlTsVector type, So we can use extensions which special prepare for fts
  2. if the other option, tsvector column create in string type, in this case we can just write pure sql

Let's start with the first method, where I will talk about how to write both methods and their pros and cons.

Movie.cs

MovieController

We test api on swagger

Ş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.

You may also like...

Leave a Reply

Your email address will not be published.

English