Full-Text Search ile Arama İşlemleri

Oğuz~#>

Kıdemli Üye
5 Tem 2009
4,772
17
Bursa

Full Text Search servisi ile SQL Server"da karakter bazlı alanlarda arama yapılarak daha verimli arama sonuçları elde edilebilir, ancak arama yapılacak olan alanlar üzerinde ilk olarak Full-Text Index"ler tanımlanmalıdır. Full Text Index"ler belirtilen alanın verisini fiziksel olarak belirtilen alana indeksleyerek bu alan içerisinde arama yapılmasını kolaylaştırır. Full Text Index tanımlamak için indeksin tanımlanacak olduğu tablo üzerine sağ tıklayarak Full Text Index seçeneği üzerinden Define Full Text Index seçeneği seçilmelidir. Full-Text Index tanımlarken bu Full-Text Indexler"in gruplanacağı yeni bir Full-Text Catalog tanımlanacağı gibi var olan bir kataloga da eklenmesi sağlanabilir. Full-Text Index tanımlanırken dikkat edilmesi gereken bir nokta da indeksin tanımlanacak olduğu tabloda en azından bir tane UniqueKey tanımlanmış olması gerekliliğidir. Tabi bu ayarı yapabilmek için DataBase"de Full Text Indexing özelliğinin aktif olarak ayarlanmış olması gerekmektedir. Eğer üzerinde arama yapılmak istenilen DataBase"in Full-Text Indexing özelliği aktif değilse DataBase"in özelliklerinden Files bölümünde bulunan CheckBox seçili hale getirilerek aktif yapılabilir. Full-Text Index"ler char, varchar, text, ntext, nchar ve nvarchar veri tipinde tanımlanmış olan alanlar üzerinde tanımlanabilir ve Full Text Search servisi bu alanlarla kullanılabilir.
Arama yapılacak olan sütun ya da sütunlar üzerinde Full-Text Search servisi kullanılarak arama yapmak için kullanılabilecek bir kaç farklı SQL sözcüğü vardır bu yazımda bunlardan CONTAINS ve FREETEXT sözcükleri üzerinde örnekleme yapıyor olacağım.
CONTAINS
Contains sözcüğü ile hedef alan içerisinde arama yapılacak olan sözcüklerin içinde geçtiği kayıtlar ve bu sözcüğe yakın olan kayıtlar listeleniyor olacaktır. Bu alanda örnek vermek gerekirse drive sözcüğünü ele aldığımızda sorgu sonucunda drive, drove, drives, driving ve diriven gibi sözcükleri içeren kayıtlarda sorgu sonucunda yer alıyor olacaktır. Contains sözcüğünün kullanımını aşağıda yer almaktadır.
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS ( *, " "For true" " )
Contains sözcüğü kullanılırken ilk olarak * işareti ile tablo üzerinde tanımlı olan tüm Full-Text Index"lerde arama yapılacağı belirtiliyor, bu alanda istenilirse indeks tanımlı olan sütunlardan istenilenlerde verilebilirdi. Diğer alanda ise aranacak sözcük belirtilerek belirtilen kayıt ve belirtilen kayda yakın kayıtlar getiriliyor. Contains sözcüğü ile birlikte WHERE ile kullanmaya alışık olduğumuz OR ve AND sözcükleri de kullanılabilir. Aşağıdaki sorgu çalıştırıldığında içerisinde "Aluminum alloy cups" ya da "For true" sözcükleri veya bunlarla benzer söz dizimine sahip olan sözcükleri içeren kayıtlar listeleniyor olacaktır.
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS ( *, ""Aluminum alloy cups" OR "For true" " )
FREETEXT
Freetext sözcüğü ile hedef alan içerisinde belirtilen ifade ve kelimeler çözümlenerek onlara benzer kayıtlar listeleniyor. Bu alanda örnek vermek gerekirse "Microsoft Türkiye Ofisi"ndeki seminer oldukça güzeldi ve faydalı bilgiler içeriyordu." cümlesini ele alalım. Bu alanda arama yapılırken tanımlanacak olan kelimeler Microsoft, Türkiye, Ofis, Seminer, Güzel, Faydalı, Bilgi şeklinde olacaktır. Tanımlanan ifadeler ise Microsoft Türkiye Ofisi, Faydalı bilgi şeklinde olacaktır. Freetext sözcüğü de aşağıdaki gibi kullanılabilir.
SELECT Description
FROM Production.ProductDescription
WHERE FREETEXT( description,""For true trail addicts."")
Kodlara dikkat edilirse bu kodlarda sadece description sütunu üzerinde tanımlı olan index üzerinde arama yapılacaktır.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.