Full Text Search Uygulaması: Arama Motorunu Veritabanında Kodla
Veritabanında binlerce kayıt arasında saniyede sonuç bulmak için Full Text Search (FTS) kullan. PostgreSQL'in yerleşik FTS özelliği, karmaşık arama motorlarını basit hale getiriyor.
Problemi kısaca: Normal LIKE sorguları yavaş ve sınırlı. FTS, kelimeleri analiz eder, eşanlamlıları bulur ve çok daha hızlı arar.
Önce PostgreSQL'de tabloyu hazırla:
1CREATE TABLE makaleler (2id SERIAL PRIMARY KEY,3baslik VARCHAR(255),4icerik TEXT,5search_vector tsvector6);78CREATE INDEX idx_search ON makaleler USING GIN(search_vector);Veri eklerken arama vektörünü otomatik güncelle:
Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1CREATE TRIGGER update_search_vector2BEFORE INSERT OR UPDATE ON makaleler3FOR EACH ROW4EXECUTE FUNCTION tsvector_update_trigger(5search_vector, 'pg_catalog.turkish', baslik, icerik6);Python ile verileri ekle ve ara:
1import psycopg22from psycopg2.extras import execute_values34conn = psycopg2.connect("dbname=arama user=postgres password=1234")5cur = conn.cursor()67# Veri ekle8veri = [9('Yapay Zeka Nedir', 'Yapay zeka bilgisayarların insan gibi düşünmesidir...'),10('Veritabanı Optimizasyonu', 'Hızlı sorgular için indeksleme önemlidir...'),11]1213execute_values(cur,14"INSERT INTO makaleler (baslik, icerik) VALUES %s",15veri16)17conn.commit()1819# Tam metin araması yap20arama_terimi = "yapay zeka"21cur.execute("""22SELECT baslik, icerik,23ts_rank(search_vector, plainto_tsquery('turkish', %s)) as skor24FROM makaleler25WHERE search_vector @@ plainto_tsquery('turkish', %s)26ORDER BY skor DESC27LIMIT 1028""", (arama_terimi, arama_terimi))2930sonuclar = cur.fetchall()31for baslik, icerik, skor in sonuclar:32print(f"{baslik} (Skor: {skor:.2f})")33print(f"{icerik[:100]}...\n")3435cur.close()36conn.close()Beklenen çıktı:
1Yapay Zeka Nedir (Skor: 0.30)2Yapay zeka bilgisayarların insan gibi düşünmesidir...Sık yapılan hata: `plainto_tsquery` yerine basit `to_tsquery` kullanmak. Bu, operatör hatası verir. Türkçe dil desteği için `'turkish'` parametresini unutma. Büyük verilerde GIN indeksi performansı 100 kez arttırır.
0 yorum