Tam Metin Arama
- İngilizcesi
- Full-Text Search
- Okunuşu
- ful tekst sörç
Günlük kullanımda iki ad da yaygın.
Kısaca
Tam metin arama, verilen sözcükleri ya da ifadeleri içeren dokümanları bir metin indeksinde arayarak bulan ve sonuçları alaka düzeyine göre sıralayan tekniktir.
Tam metin arama nedir?
Tam metin arama, kullanıcıların sözcük yazıp bunları içeren kayıtları bulmasını sağlar; makaleler, ürün açıklamaları ya da destek talepleri gibi uzun metinlerin içinde bile. Bir alanın tamamında tam eşleşme aramak yerine tek tek sözcükleri eşleştirir ve en alakalı sonuçlar önce görünsün diye sonuçları sıralar. Çoğu web sitesinin ve uygulamanın arama kutusunu çalıştırır.
Önceden bir ters indeks (inverted index) oluşturarak çalışır. Her metin, token adı verilen sözcüklere bölünür; bunlar küçük harfe çevrilerek, "the" gibi yaygın dur sözcükleri (stop word) kaldırılarak ve kök çıkarma (stemming) ile kök biçime indirgenerek normalleştirilir; böylece "running" ve "runs" ikisi de "run" olur. İndeks daha sonra her sözcüğü onu içeren dokümanların listesine eşler ve BM25 gibi bir sıralama formülü her eşleşmeyi sözcüklerin ne sıklıkla ve nerede geçtiğine göre puanlar.
Ters indeks, bir ders kitabının sonundaki dizin gibi çalışır: "fotosentez" kelimesini bulmak için her sayfayı okumak yerine kelimeyi arar ve doğrudan listelenen sayfalara atlarsınız. Birçok ilişkisel veritabanı yerleşik tam metin arama içerir; özel arama motorları ise yazım hatası toleransı, eş anlamlılar, vurgulama ve çok yönlü (faceted) filtreler gibi özellikler ekler.
Tam metin arama çoğu zaman bir SQL LIKE '%word%' sorgusuyla karıştırılır. LIKE tam bir alt dize arar, örüntü bir joker karakterle başladığında genellikle normal bir indeks kullanamaz ve alaka düzeyi ya da sözcük biçimleri hakkında hiçbir fikri yoktur. Tam metin arama ayrıca anlamı embedding'lerle eşleştiren anlamsal ya da vektör aramadan da farklıdır; bu yüzden birçok modern sistem ikisini hibrit bir aramada birleştirir.
Önemli noktalar
- Tam metin arama yalnızca tam alan değerlerini değil, metnin içindeki sözcükleri eşleştirir.
- Her sözcüğü onu içeren dokümanlara eşleyen bir ters indekse dayanır.
- Tokenizasyon, dur sözcükleri ve kök çıkarma farklı sözcük biçimlerinin eşleşmesini sağlar.
- Sonuçlar alaka düzeyine göre, çoğu zaman BM25 formülüyle sıralanır.
- Büyük tablolarda
LIKE '%word%'sorgusundan çok daha hızlı ve akıllıdır.
Örnek
-- Add a searchable column built from the title and body, then index it
ALTER TABLE articles
ADD COLUMN search tsvector
GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || body)) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search);
-- Find and rank articles that contain both words
SELECT title, ts_rank(search, query) AS rank
FROM articles, to_tsquery('english', 'database & index') AS query
WHERE search @@ query
ORDER BY rank DESC
LIMIT 10;Sık sorulan sorular
Tam metin arama ile SQL'deki LIKE arasındaki fark nedir?
LIKE tam bir karakter dizisi arar ve örüntü % ile başladığında genellikle tüm tabloyu tarar. Tam metin arama ise bir indeks kullanır, sözcük biçimlerini anlar ve sonuçları alaka düzeyine göre sıralar.
Tam metin arama için ayrı bir arama motoruna ihtiyacım var mı?
Her zaman değil. PostgreSQL, MySQL ve SQLite dahil birçok veritabanında, birçok uygulama için yeterli olan yerleşik tam metin arama vardır; özel bir arama motoru ise çok büyük veri kümelerinde ya da yazım hatası toleransı ve çok yönlü filtreleme gibi gelişmiş özelliklerde işe yarar.
Ters indeks nedir?
Ters indeks, her sözcüğü göründüğü dokümanların listesine eşleyen bir veri yapısıdır. Bir arama motorunun her metni taramadan tüm eşleşen dokümanları bulmasını sağlar.
İlgili sayfalar
- Veritabanı İndeksiVeritabanları, s. 38Veritabanı indeksi, tüm tabloyu taramadan satırları hızla bulmayı sağlayan, bir kitabın sonundaki dizine benzeyen bir veri yapısıdır.
- SQLVeritabanları, s. 29SQL, ilişkisel veritabanlarıyla çalışmanın standart dilidir; tablo oluşturmak ve içindeki veriyi eklemek, sorgulamak, güncellemek ve silmek için kullanılır.
- VeritabanıVeritabanları, s. 37Veritabanı, bilgisayarda düzenli biçimde saklanan ve uygulamaların verimlice kaydedip arayıp güncelleyebildiği, bir yazılımla yönetilen veri topluluğudur.
- EmbeddingYapay Zekâ ve Makine Öğrenmesi, s. 18Embedding, metin, görüntü ya da başka verilerin anlamını vektör denen bir sayı listesiyle temsil eden ve benzer öğeleri birbirine yakın konumlandıran yapıdır.
- Vektör VeritabanıYapay Zekâ ve Makine Öğrenmesi, s. 47Vektör veritabanı, embedding'leri saklayıp bir sorguya en benzer vektörleri hızla bulmak için tasarlanmış, anlamsal arama ve RAG'in dayandığı veritabanıdır.
- ElasticsearchVeritabanları, s. 11Elasticsearch, JSON belgelerini indeksleyip büyük veri üzerinde hızlı tam metin arama, filtreleme ve toplama yapan dağıtık bir arama ve analiz motorudur.
- TrieVeri Yapıları, s. 33Trie, string'leri karakter karakter saklayan ağaç biçimli bir veri yapısıdır; aynı öneki paylaşan tüm kelimeler kökten itibaren aynı yolu paylaşır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin