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)