Tam metin arama (full-text search)
Oracle
-- Oracle Text: CONTEXT indeksi oluştur
CREATE INDEX makale_idx ON makale(icerik) INDEXTYPE IS CTXSYS.CONTEXT;
-- CONTAINS ile ara (3. parametre 1, SCORE(1) için etikettir):
SELECT id, SCORE(1) FROM makale
WHERE CONTAINS(icerik, 'veritabanı AND performans', 1) > 0
ORDER BY SCORE(1) DESC;Oracle Text (eski adıyla interMedia) CONTEXT index'i ile dil bilinçli tam metin arama sağlar. CONTAINS operatörü AND/OR/NEAR gibi arama operatörlerini destekler. Index CTX_DDL.SYNC_INDEX veya otomatik SYNC ile güncellenir.
PostgreSQL
-- tsvector/tsquery ile arama, GIN indeksiyle hızlandır:
CREATE INDEX makale_fts_idx ON makale
USING GIN (to_tsvector('turkish', icerik));
SELECT id, ts_rank(to_tsvector('turkish', icerik), q) AS skor
FROM makale, to_tsquery('turkish', 'veritabanı & performans') q
WHERE to_tsvector('turkish', icerik) @@ q
ORDER BY skor DESC;PostgreSQL yerleşik tam metin arama tsvector (belge) ile tsquery (sorgu) türlerini @@ operatörüyle eşleştirir. GIN index'i büyük metinlerde aramayı hızlandırır. Dil sözlüğü ('turkish') kök bulma (stemming) ve stop-word işleme yapar.
MySQL
-- FULLTEXT indeks oluştur (InnoDB/MyISAM):
ALTER TABLE makale ADD FULLTEXT INDEX ft_icerik (icerik);
-- Doğal dil / boolean modda ara:
SELECT id, MATCH(icerik) AGAINST('veritabanı performans') AS skor
FROM makale
WHERE MATCH(icerik) AGAINST('+veritabanı +performans' IN BOOLEAN MODE);MySQL FULLTEXT index'i MATCH ... AGAINST söz dizimiyle sorgulanır. IN NATURAL LANGUAGE MODE alaka skoru döndürür; IN BOOLEAN MODE +/-/* operatörleriyle hassas denetim sağlar. InnoDB tam metin aramayı 5.6'dan itibaren destekler.
SQL Server
-- Full-Text Catalog ve indeks oluştur:
CREATE FULLTEXT CATALOG ft_katalog;
CREATE FULLTEXT INDEX ON dbo.makale(icerik)
KEY INDEX PK_makale ON ft_katalog;
-- CONTAINS / FREETEXT ile ara:
SELECT id FROM dbo.makale
WHERE CONTAINS(icerik, '"veritabanı" AND "performans"');SQL Server Full-Text Search için önce Full-Text Catalog, sonra tablo üzerinde Full-Text Index gerekir (benzersiz KEY INDEX zorunlu). CONTAINS kesin/yakın arama ve mantıksal operatörleri, FREETEXT anlamsal (dil bazlı) aramayı destekler. Full-Text Search bileşeni kurulu olmalıdır.
MongoDB
// Metin (text) indeksi oluştur:
db.makale.createIndex({ icerik: "text" })
// $text ile ara ve alaka skoruna göre sırala:
db.makale.find(
{ $text: { $search: "veritabanı performans" } },
{ skor: { $meta: "textScore" } }
).sort({ skor: { $meta: "textScore" } })MongoDB text index'i $text operatörüyle tam metin arama sağlar; koleksiyon başına yalnız bir text index'i olabilir. textScore meta alanı alaka düzeyini verir. Daha gelişmiş arama için Atlas Search ($search, Lucene tabanlı) kullanılır.
Redis
# RediSearch modülü (Redis Stack) gerektirir.
# İndeks tanımla:
FT.CREATE makale_idx ON HASH PREFIX 1 makale: SCHEMA icerik TEXT
# Tam metin ara:
FT.SEARCH makale_idx "veritabanı performans"Çekirdek Redis tam metin arama sunmaz; RediSearch modülü (Redis Stack ile gelir) FT.CREATE ile index, FT.SEARCH ile arama sağlar. Kök bulma, fuzzy arama, filtreleme ve sıralama desteklenir. Modül kurulu değilse özellik kullanılamaz.
Elasticsearch
# Elasticsearch doğal olarak tam metin arama motorudur.
# match sorgusu (analiz edilmiş metin araması):
GET makale/_search
{
"query": {
"match": { "icerik": "veritabanı performans" }
}
}Elasticsearch temelde Lucene üzerine kurulu bir tam metin arama motorudur; text alanları indekslenirken analiz edilir (tokenizasyon, kök bulma). match sorgusu alaka skoruna (_score) göre sıralanmış sonuç döndürür. Türkçe için 'turkish' analyzer atanabilir.