Spiga

PDO ile mySQL full text arama

mysql_* fonksiyonları yerine mysqli_* yahut PDO kullanmaya başlamadıysanız öncelikle bu değişimi gerçekleştirmenizi hatırlatmak isterim. Full text arama konusunu yıllar önce yazdığımı düşündüğüm için bu konuyu soran bir arkadaşa turkwm.com'a gir arattır demiş bulundum. Yazının bulunamasından mütevellit iş bu yazıyı yazıyorum.
Hazır yazarken konuyu PDO ile birleştirip tam bir hayır işlemeyi umuyorum. Öncelikle yeni oluşturacağınız veritabanlarında gerekli alanları full text indexi ekleyin. Fakat tecrübeyle sabittir ki bu konuyu arayanların bir çoğu anlık ziyaretçi artıp, yapılan arama sorguları sebebiyle ağırlaşan sayfa, yükselen load değerlerinden bunalan kişilerdir. Bu arkadaşlar için varolan tabloda ilgili alanlara full text indexi eklemelerini önermemiz gerek.

ALTER TABLE tablo_ismi ADD FULLTEXT(alan1, alan2);

sorgusu ile indexi ekliyebilirsiniz. Genelde makale, haber tarzı siteler olduğu için alışkanlık üzere iki alan (örneğin alan1= haber_baslik, alan2=haber_icerik ..vs) belirttim. Siz kendi ihtiyaçlarınıza göre düzenleyebilirsiniz.

Sorgu kısmına gelirsek;

SELECT * FROM tablo_ismi WHERE MATCH (alan1, alan2) AGAINST ('+kelime1 +kelime2' IN BOOLEAN MODE) gibi bir sorgumuz olsun. PDO ile bu sorguyu gerçekleştirmek isterseniz aşağıdaki hali alacaktır;


$sorgu ='SELECT * FROM tablo_ismi WHERE MATCH (alan1, alan2) AGAINST (:aranan IN BOOLEAN MODE)';

$aranan = '+kelime1 +kelime2';

$ara = $db->prepare($sorgu);                        
$ara->bindValue(':aranan', $aranan, PDO::PARAM_STR);

Sorgudaki arama kısmındaki kelime1 ve kelime2 için farklı parametreler belirleyerek farklı sonuçlara ulaşabilirsiniz.

Şöyle ki;

(''kelime1 kelime2'') kelime1 kelime2 yi grup olarak arar ve bulduğu satırları getirir.
('+kelime1 +kelime2') Her iki kelimeyi içeren satırları getirir.
('+kelime1 -kelime2') kelime1'i içeren ve kelime2'yi içermeyen satırları getirir.
('+kelime1 kelime2') kelime1'i içeren satırları ararken kelime2'yi de içeren satırlar sizin lehinize çalışır.
('>kelime1 ('kelime1*') kelime1 , kelime12 , kelime123 ,kelime1ler ..vs içeren satırları getirir.

0 yorum:

 
Turkwm.com yazılarını günlük olarak almak ister misiniz? Email aboneliği için lütfen tıklayın.