12/04/2015 - MYSQL
Ben InnoDB depolama motoru üzerinde IN BOOLEAN MODE niteleyicisini kullanmayı tercih ederim. Niteleyici IN BOOLEAN MODE'un kısıtlamaları azdır ve InnoDB depolama motoru genelde zaten güçlüdür. Depolama motoru ne olursa olsun, IN BOOLEAN MODE %50 arama kuralına takılmaz. Full-text aramalarda, InnoDB sonuçları alaka sırasına göre otomatik olarak sıralar.
FULLTEXT index olarak geçer.CHAR, VARCHAR veya TEXT alanları için geçerlidir.ALTER TABLE veya CREATE INDEX ile ekleyin.innodb_ft_min_token_size ve innodb_ft_max_token_size değişkenleriyle kontrol eder.ft_min_word_len ve ft_max_word_len değişkenleriyle kontrol eder.mysql> SELECT * FROM person;
+----+------+---------+
| id | name | surname |
+----+------+---------+
| 1 | john | |
| 2 | | john |
| 3 | a | |
| 4 | | b |
| 5 | c | c |
| 6 | john | john |
+----+------+---------+
6 rows in set (0.00 sec)
Depolama motoru MyISAM. Sonuç bulunamadı çünkü, 'john' 3 tane kayıtta mevcut, bu da toplam kayıtların %50'sinden fazla. %50 kuralı sadece MyISAM depolama motoruna mahsustur. Eğer aramadan sonuç almak isterseniz, içinde 'john' olmamak şartıyla bir kaç tane kayıt girmeniz gerekir.
mysql> SELECT *
-> FROM person
-> WHERE
-> MATCH(`name`, `surname`) AGAINST ('john' IN NATURAL LANGUAGE MODE);
Empty set (0.00 sec)
Depolama motoru InnoDB. Sonuç bulundu çünkü, %50 kuralı InnoDB depolama motoruna mahsus değildir. Sonuçlar alaka sırasına göre otomatik olarak sıralandı.
mysql> SELECT *
-> FROM person
-> WHERE
-> MATCH(`name`, `surname`) AGAINST ('john' IN NATURAL LANGUAGE MODE);
+----+------+---------+
| id | name | surname |
+----+------+---------+
| 6 | john | john |
| 1 | john | |
| 2 | | john |
+----+------+---------+
3 rows in set (0.00 sec)
Depolama motoru MyISAM. Sonuç bulundu çünkü, %50 kuralı IN BOOLEAN MODE niteleyicisine mahsus değildir. Sonuçlar alaka sırasına göre otomatik olarak sıralanmazlar.
mysql> SELECT *
-> FROM person
-> WHERE
-> MATCH(`name`, `surname`) AGAINST ('john' IN BOOLEAN MODE);
+----+------+---------+
| id | name | surname |
+----+------+---------+
| 1 | john | |
| 2 | | john |
| 6 | john | john |
+----+------+---------+
3 rows in set (0.00 sec)
Depolama motoru InnoDB. Sonuç bulundu çünkü, %50 kuralı IN BOOLEAN MODE niteleyicisine mahsus değildir. Sonuçlar alaka sırasına göre otomatik olarak sıralandı.
mysql> SELECT *
-> FROM person
-> WHERE
-> MATCH(`name`, `surname`) AGAINST ('john' IN BOOLEAN MODE);
+----+------+---------+
| id | name | surname |
+----+------+---------+
| 6 | john | john |
| 1 | john | |
| 2 | | john |
+----+------+---------+
3 rows in set (0.00 sec)