sql >> Base de Datos >  >> RDS >> Mysql

Mysql busca cadena y número usando MATCH() AGAINST()

Si necesitas Fiat y 500 en cualquier lugar donde el orden no importe, entonces

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

Si necesitas Fiat 500 juntos, entonces

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

Si necesitas Fiat y cero o más 500 , entonces

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

Si necesitas 500 y cero o más Fiat , entonces

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

Pruébalo !!!

ACTUALIZACIÓN 2013-01-28 18:28 EDT

Esta es la configuración predeterminada para la búsqueda de TEXTO COMPLETO

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>

Tenga en cuenta que ft_min_word_len es 4 por defecto. El token 500 tiene una longitud de 3, por lo que no se indexará en absoluto. Tendrás que hacer tres (3) cosas:

PASO 01:Configurar para tokens de cadena más pequeños

Agregue esto a /etc/my.cnf

[mysqld]
ft_min_word_len = 1

PASO 02:Reiniciar mysql

service mysql restart

PASO 03:Reindexar todos los índices en los models mesa

Simplemente puede soltar y agregar el índice FULLTEXT

o hazlo por etapas y ve qué tan grande será de antemano

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;

Cuando esté satisfecho con esto funcionó, entonces ejecute

DROP TABLE models_old;

Pruébalo !!!