Arama sorgularında genellikle like komutu kullanılır. Bunun nedeni like ın (=) den daha esnek bir yapıda olmasıdır. Mysql içinde arama yapılırken genelde tercih edilen yöntem içeriğin içindeki kelimelerin veya harf dizilimlerinin içinde arana kelimenin veya harf dizisinin geçmesidir . Yani mevcut içerikteki herhangi bir kelimede, aradığımız kelime başata,ortada veya sonda var ise o içeriği doğru içerik olarak alırız. Temel olarak arama sorgusunun mantığı budur. Bir örnek verecek olursak.
şeklinde olur. % işaretleri joker karakterlerdir. Aradığımız kelime veritabanındaki metnin içindeki bir kelimienin herhengi bir yerinde (başında, sonunda, ortasında) mevcut ise o satır seçilecektir. Basit bir arama scriptini yazmada like işimiz igörebilir, fakat biz daha fazlasını istiyorsak fulltext indexleri imdadımıza koşacaktır.
LIKE tan farklı olarak fulltext indekslerini de kullanabiliriz. MySQL fulltext indeksleri arama sorguları için LIKE fonksiyonundan daha fonksiyoneldir.Diğer bir artısı da arama sonuçlarını önem sırasına göre dizmesidir. fulltext arama tablolardaki VAR,TEXT ve VARCHAR alanlarını fulltext indeks olarak atayıp MATCH fonksiyonunu kullanarak bunlarda arama yapmak olarak özetlenebilir. Fulltext içeriğe sahip alanları bulunan bir tabloyu şöyle yaratabiliriz.
Böylece konu adında bir tablo oluşturmuş olduk ve bu tablonun baslik ve icerik alanlarını fulltext olarak atıyoruz. Arama yapılacak alanları tablo oluşturulduktan sonrada fulltext index olarak da belirleyebiliriz. Bunuda şöyle yapabiliriz.
İçeriklerimizi fulltext yaptıktan sonra tablomuzun şekline şöyle bir bakalım. +----id-------+-----baslik----+-----icerik-----+ 1 Mysql Fulltext arama
sorgusu "arama" geçen icerik yada baslik alanlarına sahip satırları elde etmemizi sağlayacaktır . MATCH fonksiyonu her satıra bir puan verir. Yani aranan kelimenin içeriklerde geçme sayısına göre her satıra bir puan verir ve puanı en yüksek satırı (yani kelimenin en çok geçtiği) en üste gelecek şekilde sıralar. MATCH fonksiyonu AGAINST ten sonra verilen kelimeyi kendinden sonraki fulltext indekslerde arar. Fulltext indexlerde MATCH ile arama yapılırken küçük büyük harfin önemi yoktur. Yani kelime ile KELime aynı kelimedir.
Sorgusu içinde "arama" geçen satırların id ve baslik alanlarını ve puanları döner.
fulltext aramanın fonksiyonelliği sadece bunlarla bitmiyor. Fulltext arama bazı operatörleri kullanmamıza olanak sağlar. Bu operatörler aranan kelimenin nasıl aranması gerektiği hakkında mysqle bilgi sağlar.
("+") kelimenin mutlaka bulunması gerektiğini belirtir Örnek: +php
("-") kelimenin aramada bulunmamasi yani harici tutulmasi gerektiğini belirtir Örnek: +php "mysql php geçen mysql geçmeyen satırlar çekilir
("< >") operatörleri kelimenin puana olan etkisini belirlemenizi sağlar.
( ) kelimeleri gruplamanızı sağlar.
("~") kelimenin aramada bulunması puanı ters yönde etkiler. Yani ("-") operatörü gibi ama arama sonuçları gösterilir.
("*") sonuna geldiği kelimenin ekli bir şekilde bulunabileceğini belirtir
''çift tırnak'' kelime grubunu arar Örnek: "ışın kılıcı"
fulltext aramada her satır için bir puan döndüğün ve sonuçları bu puana göre sıraladığını söylemiştik. IN BOOLEAN MODE özelliğini kullanarak puana göre sıralama işlemini kapatabiliriz.
Sorgusu içinde mysql geçen ama php geçmeyen satırları getirir. Ama sıralamayı puan göre değil de tablodaki sıralarına göre getirir.
İyi çalışmalar.
Kaynak
PHP:
$sql = "select * from `table` where `abc` like '%$aranan%'";
LIKE tan farklı olarak fulltext indekslerini de kullanabiliriz. MySQL fulltext indeksleri arama sorguları için LIKE fonksiyonundan daha fonksiyoneldir.Diğer bir artısı da arama sonuçlarını önem sırasına göre dizmesidir. fulltext arama tablolardaki VAR,TEXT ve VARCHAR alanlarını fulltext indeks olarak atayıp MATCH fonksiyonunu kullanarak bunlarda arama yapmak olarak özetlenebilir. Fulltext içeriğe sahip alanları bulunan bir tabloyu şöyle yaratabiliriz.
PHP:
CREATE TABLE konu (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,baslik VARCHAR(100),icerik TEXT, FULLTEXT (baslik,icerik));
PHP:
ALTER TABLE `konu` ADD FULLTEXT `fulltextindex` (`baslik`,`icerik`).
PHP:
SELECT * FROM konu WHERE MATCH (baslik,icerik) AGAINST ('arama');
PHP:
SELECT id,baslik,MATCH (baslik,icerik) AGAINST ('arama') AS puan FROM konu WHERE MATCH (baslik,icerik) AGAINST ('arama');
fulltext aramanın fonksiyonelliği sadece bunlarla bitmiyor. Fulltext arama bazı operatörleri kullanmamıza olanak sağlar. Bu operatörler aranan kelimenin nasıl aranması gerektiği hakkında mysqle bilgi sağlar.
("+") kelimenin mutlaka bulunması gerektiğini belirtir Örnek: +php
("-") kelimenin aramada bulunmamasi yani harici tutulmasi gerektiğini belirtir Örnek: +php "mysql php geçen mysql geçmeyen satırlar çekilir
("< >") operatörleri kelimenin puana olan etkisini belirlemenizi sağlar.
( ) kelimeleri gruplamanızı sağlar.
("~") kelimenin aramada bulunması puanı ters yönde etkiler. Yani ("-") operatörü gibi ama arama sonuçları gösterilir.
("*") sonuna geldiği kelimenin ekli bir şekilde bulunabileceğini belirtir
''çift tırnak'' kelime grubunu arar Örnek: "ışın kılıcı"
fulltext aramada her satır için bir puan döndüğün ve sonuçları bu puana göre sıraladığını söylemiştik. IN BOOLEAN MODE özelliğini kullanarak puana göre sıralama işlemini kapatabiliriz.
PHP:
SELECT * FROM konu WHERE MATCH (baslik,icerik) AGAINST ('+mysql -php' IN BOOLEAN MODE);
İyi çalışmalar.
Kaynak