Full Text Searching…

// 2 Nisan 2010 // Delphi

Full-Text Search ile Arama İşlemleri

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.

Birkaç basit örnek;

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.

USE AdventureWorks;
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components' );
GO

USE Northwind;
GO
SELECT   K.RANK, CompanyName, ContactName, Address
FROM      Customers AS C
         INNER JOIN
         CONTAINSTABLE(Customers,Address, 'ISABOUT ("des*",
            Rue WEIGHT(0.5),
            Bouchers WEIGHT(0.9))', 3) AS K
         ON C.CustomerID = K.[KEY];
GO

USE AdventureWorks;
GO
DECLARE @SearchWord varchar(30)
SET @SearchWord ='performance'
SELECT Description 
FROM Production.ProductDescription 
WHERE FREETEXT(Description, @SearchWord);

Use AdventureWorks;
GO
SELECT Name, Color FROM Production.Product
WHERE CONTAINS((Name, Color), 'Red');

KONUYLA ALAKALI FAYDALI LİNKLER
Querying SQL Server Using Full-Text Search
Limiting Ranked Result Sets (Full-Text Search)
FREETEXT (Transact-SQL)

“Full Text Searching…” için 2 Yorum

  1. Tuğrul HELVACI diyor ki:

    Selmanım yazdıkların için sağol ama makeleyi düzenlemek için epey uğraştım bilesin.Bir dahaki makalende yazım tarzına biraz daha dikkat edebilirsen hem okuyanlar için hem de benim için iyilik yapmış olursun ;)

    Bu arada kısaca bakabilme fırsatı buldum ama şimdilik pek bir şey anlamadım, daha detaylıca okuduğumda umarım anlayabilirim :)

  2. bayram diyor ki:

    “Full Text Index seçeneği üzerinden Define Full Text Index seçeneği seçilmelidir” demişsiniz de ben de o seçenek mevcut değil sağ tıklıyorum tabloya fakat ne yazıkki databaseden use fulltext i seçili hale getirmeme rağmen olmuyor yardımcı olurmusunuz lütfen nette döküman yok cevap bulamadım

bayram için yorum yazın