texto - Mysql busca cadenas y números usando MATCH() CONTRA()
comparar cadenas en mysql (1)
Tengo un problema con la función MATCH AGAINST.
La siguiente consulta me da el mismo resultado:
SELECT * FROM models MATCH(name) AGAINST(''Fiat 500'')
SELECT * FROM models MATCH(name) AGAINST(''Fiat'')
¿Cómo puedo buscar cadenas y números en una columna de una tabla de texto completo?
Gracias
Si necesita Fiat
y 500
cualquier lugar donde el orden no importe, entonces
SELECT * FROM models MATCH(name) AGAINST(''+Fiat +500'');
Si necesita Fiat 500
juntos, entonces
SELECT * FROM models MATCH(name) AGAINST(''+"Fiat 500"'');
Si necesita Fiat
y cero o más 500
, entonces
SELECT * FROM models MATCH(name) AGAINST(''+Fiat 500'');
Si necesita 500
y cero o más Fiat
, entonces
SELECT * FROM models MATCH(name) AGAINST(''Fiat +500'');
Darle una oportunidad !!!
ACTUALIZACIÓN 2013-01-28 18:28 EDT
Estas son las configuraciones predeterminadas para la búsqueda 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>
Tenga en cuenta que ft_min_word_len es 4 por defecto. El token 500 tiene una longitud 3. por lo tanto, 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: reindexe todos los índices en la tabla de models
Simplemente puede soltar y agregar el índice FULLTEXT
o hazlo por etapas y observa qué tan grande será por adelantado
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 de que esto funcionó, ejecute
DROP TABLE models_old;
Darle una oportunidad !!!