Pokud potřebujete Fiat
a 500
kdekoli, kde na pořadí nezáleží, pak
SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');
Pokud potřebujete Fiat 500
společně, pak
SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');
Pokud potřebujete Fiat
a nula nebo více 500
, pak
SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');
Pokud potřebujete 500
a nula nebo více Fiat
, pak
SELECT * FROM models MATCH(name) AGAINST('Fiat +500');
Vyzkoušejte to !!!
AKTUALIZACE 2013-01-28 18:28 EDT
Zde jsou výchozí nastavení pro FULLTEXTOVÉ vyhledávání
mysql> show variables like 'ft%';
+--------------------------+----------------+
| Variable_name | Value |
+--------------------------+----------------+
| ft_boolean_syntax | + -><()~*:""&| |
| ft_max_word_len | 84 |
| ft_min_word_len | 4 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | (built-in) |
+--------------------------+----------------+
5 rows in set (0.00 sec)
mysql>
Všimněte si, že ft_min_word_len je standardně 4. Token 500 má délku 3. nebude tedy vůbec indexován. Budete muset udělat tři (3) věci:
KROK 01:Konfigurace pro menší řetězcové tokeny
Přidejte to do /etc/my.cnf
[mysqld]
ft_min_word_len = 1
KROK 02:Restartujte mysql
service mysql restart
KROK 03:Přeindexujte všechny indexy v models
tabulka
Můžete jednoduše vypustit a přidat FULLTEXTOVÝ index
nebo to udělejte po etapách a předem uvidíte, jak velké to bude
CREATE TABLE models_new LIKE models;
ALTER TABLE models_new DROP INDEX name;
ALTER TABLE models_new ADD FULLTEXT name (name);
ALTER TABLE models_new DISABLE KEYS;
INSERT INTO models_new SELECT * FROM models;
ALTER TABLE models_new ENABLE KEYS;
ALTER TABLE models RENAME models_old;
ALTER TABLE models_new RENAME models;
Až budete spokojeni, že to fungovalo, spusťte
DROP TABLE models_old;
Vyzkoušejte to !!!