← Back

Postgres ile Full-Text Search

July 30, 2024 (4mo ago)

Merhaba, yeniliklerin peşinde koşanlar! Bugün, veritabanı dünyasında gizli bir hazine olan Postgres ile Full-Text Search (FTS) hakkında konuşacağız. Eğer arama özelliklerinizi geliştirmek istiyorsanız, doğru yerdesiniz! 🎯

Neden Full-Text Search? 🤔

Haydi, direkt gerçek dünya sorunu ile girelim buna en iyi yaptığımız işi yapalım! Çözüm üretelim. Diyelim ki büyük bir kitap mağazası işletiyorsunuz ve kullanıcılarınız kitapları hızlı ve etkili bir şekilde bulmak istiyor. "Harry Potter ve Felsefe Taşı" araması yapıldığında, doğru kitabı bulabilmek büyük önem taşıyor. İşte burada Full-Text Search devreye giriyor. Bu sihirli özellik sayesinde veritabanınızdaki metinlerde daha hızlı ve doğru aramalar yapabilirsiniz.

Full-Text Search Nedir? 📚

Full-Text Search, metin tabanlı veritabanlarında arama yapmayı sağlayan bir özelliktir. Temel olarak, belirli kelimeleri veya ifadeleri büyük metin bloklarında arayarak, sonuçları hızla getirebilir. Postgres, bu özelliği oldukça güçlü ve kullanımı kolay bir şekilde sunar.

Postgres'te Full-Text Search Nasıl Çalışır? ⚙️

Postgres'te Full-Text Search, iki ana bileşenle çalışır:

  1. Tsvector: Metinleri indekslemek için kullanılır. Bir metin parçasını, arama yaparken kullanılacak bir formatta saklar.
  2. Tsquery: Arama sorgularını ifade etmek için kullanılır.

Bu ikili, hızlı ve verimli arama sonuçları üretmek için birlikte çalışır. Şimdi, bu bileşenleri daha yakından inceleyelim.

İlk Adımlar: Tsvector ve Tsquery Oluşturma 🔧

Adım 1: Tsvector Oluşturma

Tsvector, metinleri küçük parçalar halinde böler ve her bir kelimenin kök halini saklar. Bu sayede, "kitap", "kitaplar" veya "kitaplık" gibi farklı formlardaki kelimeler, aynı kök kelime olarak indekslenir.

SELECT to_tsvector('turkish', 'Harry Potter ve Felsefe Taşı') AS document;

Bu sorgu, Harry Potter ve Felsefe Taşı ifadesini bir tsvector olarak döndürür. Sonuç şu şekilde olacaktır:

'Felsefe':4 'Harry':1 'Potter':2 'Taşı':5 've':3

Adım 2: Tsquery Oluşturma

Tsquery, arama yapmak istediğimiz ifadeyi temsil eder. Aynı şekilde, kelimelerin kök hallerini kullanarak sorgu yaparız.

SELECT to_tsquery('turkish', 'Harry & Potter') AS query;

Bu sorgu, Harry ve Potter kelimelerini içeren bir tsquery döndürür. Sonuç şu şekilde olacaktır:

'harry' & 'potter'

Full-Text Search ile Arama Yapma 🔍

Şimdi, tsvector ve tsquery'yi bir araya getirerek arama yapalım. Bu aşamada, metinlerimizi tsvector olarak indeksleyecek ve tsquery kullanarak arama yapacağız.

SELECT * FROM kitaplar
WHERE to_tsvector('turkish', kitap_adi) @@ to_tsquery('turkish', 'Harry & Potter');

Bu sorgu, kitaplar tablosunda Harry ve Potter kelimelerini içeren tüm kitapları getirecektir.

Gerçek Hayattan Bir Örnek: Kitap Mağazası 📖

Diyelim ki bir kitap mağazası işletiyorsunuz ve veritabanınızda binlerce kitap var. Kullanıcılarınız, belirli bir kitabı veya yazarın eserlerini hızlıca bulmak istiyor. İşte burada Postgres Full-Text Search devreye giriyor!

  1. Kitap İndeksleme: Kitap adlarını ve açıklamalarını tsvector olarak indeksleyin.
  2. Arama Sorgusu: Kullanıcıların arama terimlerini tsquery'ye dönüştürün.
  3. Sonuçları Getirme: Tsvector ve tsquery'yi kullanarak, arama sonuçlarını hızla getirin.

Bu sayede, kullanıcılarınız "J.K. Rowling" veya "Felsefe Taşı" araması yaptığında, en alakalı sonuçları hızla görebilir.

İleri Seviye Özellikler 🛠️

Full-Text Search ile yapabileceğiniz çok daha fazlası var. Örneğin:

CREATE INDEX idx_kitap_adi ON kitaplar USING GIN(to_tsvector('turkish', kitap_adi));

Bu indeksleme, arama sorgularınızı önemli ölçüde hızlandıracaktır.

Bu yazıda öğrendiklerimizi burada noktalıyoruz. Bir sonraki keşifte buluşmak üzere! 🖥️👨‍💻👩‍💻

PostgreSQL
SQL Full-Text Search