Full Text Index (Tam Metin İndeksi), Microsoft SQL Server’ın sağladığı, veritabanındaki metin tabanlı verilere yönelik daha hızlı ve esnek arama yapabilmenizi sağlayan bir teknolojidir. Standart SQL sorgularında kullandığımız LIKE operatörü ve %keyword% kalıbı, veri seti büyüdükçe performans sorunlarına yol açar ve sadece karakter dizisi eşleşmesine odaklanır. Oysa Full-Text Index, metni kelime kelime analiz ederek (tokenization) bir dizin oluşturur. Bu sayede sadece “tam eşleşme” değil; cümle yapısı, kelime kökü ve yakınlık gibi kriterlere göre gelişmiş sorgular yapmamıza imkan tanır.
Full-Text Index sadece basit metin alanlarıyla sınırlı değildir. Geniş bir yelpazede şu veri tiplerini destekler:
- Metin Alanları: char, varchar, nchar, nvarchar, text, ntext
- Büyük Veriler: varchar(max), varbinary(max)
- Özel Formatlar: xml, image ve FILESTREAM
Gemini şunu dedi:
Harika bir başlangıç yapmışsın. Bu metni, makalenin Giriş ve Temel Kavramlar bölümü için daha profesyonel, akıcı ve okuyucu dostu bir yapıya dönüştürdüm.
İşte makalen için kullanabileceğin düzenlenmiş versiyon:
Full-Text Index yapısını kurmadan önce bilmeniz gereken iki temel kural vardır:
- İndeks oluşturulduktan sonra verilerin “populate” edilmesi (dizine işlenmesi), veri yoğunluğunuza bağlı olarak belirli bir zaman alabilir. Bu süreç arka planda işler ve sistem kaynaklarını kullanır.
- Full-Text Index oluşturulacak tabloda mutlaka bir Primary Key veya en az bir Unique Index bulunmalıdır. SQL Server, metinlerin hangi satıra ait olduğunu bu benzersiz anahtar üzerinden takip eder.
Full text index yapısının uygulanması için öncelikle full text search servisinin kurulması gerekmektedir. Yoksa ilgili yapıyı kullanamayız.

Full Text Index’in Temel Özellikleri:
Full-Text Index’i standart arama yöntemlerinden ayıran ve büyük veri setlerinde hayat kurtaran temel özellikler şunlardır:
- Kelime Tabanlı Arama: Uzun metin blokları içerisinde sadece karakter dizilerini değil, gerçek kelimeleri ve kelime öbeklerini (phrases) hedef alır.
- Esnek Sorgulama Kabiliyeti: * Mantıksal Operatörler:AND, OR, NOT gibi ifadelerle karmaşık filtreler oluşturulabilir.
- Joker (Wildcard) Aramalar: Örneğin bilgi* yazarak; “bilgisayar”, “bilgilendirme” veya “bilgili” gibi tüm türevlere anında ulaşılabilir.
- Alaka Düzeyi ve Sıralama (Ranking): Arama sonuçları sadece “var” veya “yok” şeklinde dönmez. SQL Server, bulunan sonuçların arama kriterine ne kadar uygun olduğunu derecelendirerek en alakalı sonucu en üstte getirebilir.
- Yüksek Performans: Milyonlarca satırlık veride LIKE komutu tüm tabloyu tararken (Full Table Scan), Full-Text Index doğrudan ilgili kelimeye gider. Sunucu üzerindeki yükü minimize ederek sorgu süresini saniyelere indirir.
Full-Text Index, ham metni doğrudan saklamak yerine onu parçalara ayırıp analiz ederek özel bir dizine dönüştürür. Bu süreci üç ana adımda özetleyebiliriz:
1. Tokenizasyon (Parçalara Ayırma)
Metin içerisindeki her bir kelime, arama motorunun anlayabileceği bağımsız birer birim yani “token” olarak tanımlanır. Cümleler kelimelerine ayrıştırılarak indeksleme birimine gönderilir.
2. Dilsel Analiz (Linguistic Analysis)
Bu aşama, aramanın “akıllı” olmasını sağlayan kısımdır:
- Stop-words (Etkisiz Kelimeler): “ve”, “veya”, “ile”, “ama” gibi tek başına anlam ifade etmeyen ve aramayı yavaşlatacak kelimeler dizinden ayıklanır.
- Stemming (Kök Bulma): Kelimeler dil bilgisi kurallarına göre analiz edilir. Örneğin; “koşuyor”, “koştu” ve “koşmak” kelimeleri köklerine indirgenerek aynı bağlamda indekslenebilir.
3. İndeksleme
Analiz edilen tüm bu “temizlenmiş” ve “anlamlandırılmış” kelimeler, hızlı erişim için optimize edilmiş özel bir yapıda saklanır. Kullanıcı bir sorgu attığında, SQL Server tüm tabloyu okumak yerine bu hazır sözlük yapısına bakarak saniyeler içinde yanıt döner.
Önemli İpucu: Eğer sunucunuzda metin aramaları nedeniyle performans darboğazı yaşanıyorsa, ilk incelenmesi gereken yer LIKE operatörünün kullanımıdır. Bu noktada Full-Text Index yapısına geçmek, donanım yükseltmesinden çok daha etkili bir çözüm sunacaktır.
Örnek Senaryo:
Bir kitap veritabanı olduğunu varsayalım. Kitapların isimleri, yazarları ve açıklamaları metin alanlarında depolanıyor. Bu kitapların açıklamaları üzerinde full-text arama yapabilmek istiyorsunuz.
Adım 1: Full Text Index Oluşturma
Öncelikle veritabanında full-text index oluşturmanız gerekiyor. Full-text index için öncelikle bir full-text catalog oluşturmamız gerekiyor. Ssms arayüzünde storage bölümünde catalogumuzu oluşturuyoruz.
CREATE FULLTEXT CATALOG ftCatalog


Not: Full text index yapısının uygulanması için öncelikle full text search servisinin kurulması gerekmektedir. Yoksa ilgili yapıyı kullanamayız.
Ardından full-text index’i belirli bir tabloya uygulamamız gerekmektedir.
CREATE FULLTEXT INDEX ON [Person].[Address](AddressLine1)--Full-text uygulanacak kolon
KEY INDEX [PK_Address_AddressID] -- [Address] tablosunun primary key’i
ON ftCatalog;

Eğer yukarıdaki ifadeyi çalıştırdıktan sonra aşağıdaki hatayı alıyorsak, sql server kurulum ekranında karşılaşmış olduğumuz Full-text yapısının çalışacağı servisin yüklenmesi gerekmektedir.

Yukarıdaki ifadeleri açıklayacak olursak KEY INDEX, Full-Text Index’in hangi unique index üzerinden oluşturulacağını belirtiyor.
Adım 2: Full Text Araması Yapma
Full-Text Index oluşturulduktan sonra, *CONTAINS* veya *FREETEXT* gibi ifadelerle arama yapabilirsiniz.
Şimdi açıklama alanında kelimelere dayalı aramalar yapabilirsiniz. Örneğin, “SQL” kelimesini açıklamalarda aramak için şu sorguyu yazabilirsiniz:
SELECT *
FROM [Person].[Address]
WHERE CONTAINS(AddressLine1, 'SQL');
Bu sorgu, AddressLine1 sütununda “SQL” kelimesini içeren tüm bilgileri getirir.
Adım 3: Boolean Araması
Daha karmaşık aramalar yapabilirsiniz. Örneğin, hem “SQL” hem de “Veritabanı” kelimelerini içeren kitapları bulmak için şu sorguyu kullanabilirsiniz:
SELECT *
FROM [Person].[Address]
WHERE CONTAINS(AddressLine1, '"SQL" AND "Veritabanı"');
Adım 4: Wildcard Araması
Wildcards kullanarak da arama yapabilirsiniz. Örneğin, açıklamada “veri” kelimesiyle başlayan tüm kitapları bulmak için:
SELECT *
FROM [Person].[Address]
WHERE CONTAINS(AddressLine1,'veri*');
Bu, “veri”, “veritabanı”, “verimlilik” gibi “veri” ile başlayan tüm kelimeleri arar.
Sonuç ve Avantajlar:
- Full-text index, metin tabanlı aramalarda çok daha hızlı sonuç almanızı sağlar.
- Metin aramalarında çok daha esnek ve karmaşık sorgular yazabilirsiniz.
- Büyük veri setlerinde bile mantıksal operatörler ve wildcard’larla gelişmiş arama yapabilirsiniz.
Tam metin dizinlerini kullanmanın dezavantajlarının çoğu kaynak tüketimi etrafında döner. Tam metin dizin aramaları SQL Server hizmeti tarafından değil MSFTESQL hizmeti tarafından gerçekleştirildiğinden, bu iki hizmet sunucunuzdaki bellek kaynakları için rekabet edebilir. Her iki hizmet de akılda tutularak doğru şekilde yapılandırılmazsa bu bir sorun olabilir.
Özetle, MSSQL Server’daki Full Text Index, veritabanındaki büyük metin verilerine yönelik hızlı, esnek ve etkili aramalar yapmanızı sağlayan bir araçtır.
Bu makalede Full-Text Index yapısını görmüş olduk. Başka bir makalede görüşmek dileğiyle.
“İlminle övünme, Şeytan’a bak!” Araf-12
