Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql procura por string e número usando MATCH() AGAINST()


Se você precisa de Fiat e 500 em qualquer lugar onde a ordem não importa, então
SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');

Se você precisa de Fiat 500 juntos, então
SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');

Se você precisa de Fiat e zero ou mais 500 , então
SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');

Se você precisar de 500 e zero ou mais Fiat , então
SELECT * FROM models MATCH(name) AGAINST('Fiat +500');

De uma chance !!!

ATUALIZAÇÃO 28/01/2013 18:28 EDT


Aqui estão as configurações padrão para pesquisa 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>

Observe que ft_min_word_len é 4 por padrão. O token 500 tem comprimento 3. portanto, não será indexado. Você terá que fazer três (3) coisas:

ETAPA 01:Configurar para tokens de string menores


Adicione isto a /etc/my.cnf
[mysqld]
ft_min_word_len = 1

ETAPA 02:Reinicie o mysql

service mysql restart

ETAPA 03:Reindexe todos os índices nos models tabela


Você pode simplesmente soltar e adicionar o índice FULLTEXT

ou faça isso em etapas e veja o quão grande vai ficar com antecedência
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 estiver satisfeito com isso funcionou, execute
DROP TABLE models_old;

De uma chance !!!