Mysql
 sql >> Database >  >> RDS >> Mysql

Mysql cerca stringa e numero usando MATCH() AGAINST()

Se hai bisogno di Fiat e 500 ovunque dove l'ordine non conta, allora

SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');

Se hai bisogno di Fiat 500 insieme, quindi

SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');

Se hai bisogno di Fiat e zero o più 500 , quindi

SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');

Se hai bisogno di 500 e zero o più Fiat , quindi

SELECT * FROM models MATCH(name) AGAINST('Fiat +500');

Provalo!!!

AGGIORNAMENTO 28-01-2013 18:28 EDT

Ecco le impostazioni predefinite per la ricerca 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>

Si noti che ft_min_word_len> è 4 per impostazione predefinita. Il token 500 è di lunghezza 3, quindi non verrà affatto indicizzato. Dovrai fare tre(3) cose:

PASSAGGIO 01:Configura per token di stringa più piccoli

Aggiungilo a /etc/my.cnf

[mysqld]
ft_min_word_len = 1

PASSAGGIO 02:Riavvia mysql

service mysql restart

PASSAGGIO 03:Reindicizza tutti gli indici nei models tabella

Potresti semplicemente rilasciare e aggiungere l'indice FULLTEXT

oppure fallo in più fasi e vedi quanto diventerà grande in anticipo

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;

Quando sei soddisfatto che ha funzionato, quindi esegui

DROP TABLE models_old;

Provalo!!!