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. Normalde SQL Server, metin tabanlı verilerle yapılan aramalarda, sadece tam eşleşmelerle çalışır (örneğin WHERE koşulundaki LIKE komutu gibi). Ancak full-text index, metin verisi üzerinde kelimelere dayalı arama yapmayı sağlar ve böylece daha karmaşık arama işlemleri, kelime ve cümle temelli sorgular yapılabilir.
Tam metin dizinleriyle büyük varchar(max) ve varbinary(max) sütunlarının yanı sıra aşağıdaki sütun türlerinden herhangi birini dizine ekleyebiliriz: char, varchar, nchar, nvarchar, text, ntext, image, xml ve FILESTREAM
Not: Tablonuzda primary key (veya unique key) yoksa Full-Text Index oluşturamazsınız. Full-Text Index oluşturduktan sonra verilerinizi yeniden dizine eklemek biraz zaman alabilir.
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:
Kelime Tabanlı Arama:
Full-text index, veritabanındaki uzun metinlerdeki kelimeleri indexler. Bu sayede belirli bir kelimenin veya kelime öbeğinin yerini hızlıca bulabilirsiniz.
Esnek Arama:
Bu tür bir indeks, daha karmaşık arama koşullarını destekler, örneğin:
- AND, OR, NOT gibi mantıksal operatörler.
- Booleans (Örneğin, “en az 3 kelimeyi içeren cümle” gibi).
- Wildcard Aramaları (Örneğin, “bilgi” ile başlayan tüm kelimeleri aramak: bilgi*).
Sıralama (Ranking):
Arama sonuçları sıralanabilir, çünkü full-text index, her aramada uygunluğu ve ilgiliyi derecelendirebilir.
Yüksek Performans:
Full-text index, büyük veri setlerinde bile çok hızlı arama yapılmasına olanak tanır. Normalde SQL Server’da LIKE komutuyla yapılan aramalar, özellikle büyük veri kümesinde yavaş olabilirken, full-text index bu sorguları çok daha hızlı işler. Kullanıcıların sunucu nezlinde sorunları varsa ilk olarak sorgularında arama işlemlerinin nasıl yapıldığı incelip gerekli olan yapıya geçilmesi gerekmektedir.
Full Text Index Nasıl Çalışır?
Full-text index, metin verilerini özel bir yapıya dönüştürerek indexler. Veritabanındaki metin alanındaki her kelime ve belirli dil kurallarına göre analiz edilen öğeler (stop-words, kök kelimeler, vb.) bir index yapısına yerleştirilir.
Bu işlem genellikle şu adımları içerir:
- Tokenizasyon: Metindeki her kelime bir “token” (yani arama yapılabilir bir öğe) olarak tanımlanır.
- Dilsel Analiz: Bazı kelimeler (örneğin “ve”, “veya”, “ama” gibi) stop-words olarak kabul edilir ve indeksleme işlemine dahil edilmez. Ayrıca, kelimeler köklerine indirgenebilir (örneğin, “gittim” ve “gitmek” aynı kelime olarak kabul edilebilir).
- İndeksleme: Kelimeler, veritabanında arama yaparken hızlıca erişilebilecek şekilde indexlenir.
Ö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 serach 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:
- Performans: Full-text index, metin tabanlı aramalarda çok daha hızlı sonuç almanızı sağlar.
- Esneklik: Metin aramalarında çok daha esnek ve karmaşık sorgular yazabilirsiniz.
- Gelişmiş Arama: 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