Mysql veritabanında FullText Index ile arama yapmak

Mysql veritabanında FullText Index ile arama yapmanın birkaç avantajı var; biri performans diğeri de ayıraclar ile detaylı arama yapabilmek.Detaylara geçelim:

Bildiğimiz veri indexlemenin bir başka çeşidi olan Fulltext index sayesinde LIKE komutu ile aramanın yavaşlığından kurtulabiliyoruz. Özellikle yüzbinlerce satırlık veriler arasında LIKE komutuyla kelime araması yapmak büyük performans kaybına yol açar.

FullText Index sadece text alanları için kullanılabilir. Ayrıca FullText Index kullanabilmek için tablo formatının MyIsam olması zorunludur ki bu format zaten Mysql veritabanın standart formatıdır.

Şimdi Fulltext Index kullancağımız tabloyu oluşturalım:
CREATE TABLE IF NOT EXISTS `yazilar` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `baslik` varchar(50) COLLATE utf8_bin NOT NULL,
  `yazi` text COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `baslik` (`baslik`,`yazi`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Yukarıdaki yazilar tablosunda html kodu içermeyen yazilarin olduğunu varsayarak (varsa bunun için ayrı tablo oluşturmamız ve saf metni girmek gerekiyor) arama yapalım:
 SELECT * FROM `yazilar` WHERE MATCH(baslik,yazi) AGAINST (`aranan_kelime` IN BOOLEAN MODE);
 
MATCH parantezleri arasına aranacak FullText indexli sütünları yazıyoruz ve AGAINST parantezlerine sırasıyla aranan kelimeyi ve birden çok sonuç döndürebilmesini sağlayan BOOLEN MODE komutunu yazıyoruz. Sorguyu çalıştırdığımızda baslik ve yazi sütunlarında bu şekilde FullText arama yapabiliyoruz.

AGAINST komutunu ile aşağıdaki ayıraçları kullanarak googledakine benzer bir şekilde arama yabiliriz.

Seperatorİşlevi
+birden fazla kelimeyi aramak için kullanılır
-önüne konan kelimeyi eleyerek arama yapar
Aranan kelimelerin benzerlik oranını ölçer
( ) Kelime alt gruplarına göre arama yapar
~ Benzeşme oranı negatif olanları eleyerek arama yapar
* örnek: AGAINST ( `web*` ) ; web ile başlayan kelimeleri getirir
" " bire bir uyanları arar. Küçük büyük harf duyarsızdır

Not: MySql FullText Index kullanılan sütunlarda en az 4 karakterli olanları indexler. Bu yüzden 4'den az karakterli kelimeler için aramalar boş döner. Bunu Mysql veritabanında aşağıdaki komutla değiştirebilirsiniz:
SET GLOBAL ft_min_word_len= 4; -- 4 yerine istediğiniz değeri yazabilirsiniz
SET GLOBAL ft_max_word_len= 64;
yazan Zülküf Küçüközer tarih   31st August 2009
primary key words  Mysql | Veritabanı | Fulltex index okunma  11828
secondary key words  Arama yapmak
Bu yazı hakkında yorum yapılmamış.