Si vous avez besoin de Fiat
et 500
partout où l'ordre n'a pas d'importance, alors
SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');
Si vous avez besoin de Fiat 500
ensemble, alors
SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');
Si vous avez besoin de Fiat
et zéro ou plus 500
, alors
SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');
Si vous avez besoin de 500
et zéro ou plusieurs Fiat
, alors
SELECT * FROM models MATCH(name) AGAINST('Fiat +500');
Essayez-le !!!
MISE À JOUR 2013-01-28 18:28 HAE
Voici les paramètres par défaut pour la recherche FULLTEXT
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>
Notez que ft_min_word_len vaut 4 par défaut. Le jeton 500 est de longueur 3. Il ne sera donc pas indexé du tout. Vous devrez faire trois (3) choses :
ÉTAPE 01 : Configuration pour des jetons de chaîne plus petits
Ajoutez ceci à /etc/my.cnf
[mysqld]
ft_min_word_len = 1
ÉTAPE 02 :Redémarrez mysql
service mysql restart
ÉTAPE 03 :Réindexer tous les index dans les models
tableau
Vous pouvez simplement déposer et ajouter l'index FULLTEXT
ou faites-le par étapes et voyez à l'avance quelle sera sa taille
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;
Lorsque vous êtes satisfait, cela a fonctionné, puis exécutez
DROP TABLE models_old;
Essayez-le !!!