2010-08-09 17 views
15

Estoy un poco perdido, esto parece un error tonto, pero no tengo ni idea de lo que puede ser. Aquí está la sesión de pruebas:búsqueda FULLTEXT en MySQL no devuelve ninguna fila

mysql> drop table articles; 
Query OK, 0 rows affected (0.02 sec) 

mysql> CREATE TABLE articles (body TEXT, title VARCHAR(250), id INT NOT NULL auto_increment, PRIMARY KEY(id)) ENGINE = MYISAM; 
Query OK, 0 rows affected (0.02 sec) 

mysql> ALTER TABLE articles ADD FULLTEXT(body, title); 
Query OK, 0 rows affected (0.02 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

mysql> insert into articles(body) values ('Maya'); 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT * FROM articles WHERE MATCH(title, body) AGAINST('Maya'); 
Empty set (0.00 sec) 

mysql> select * from articles 
    -> ; 
+------+-------+----+ 
| body | title | id | 
+------+-------+----+ 
| Maya | NULL | 1 | 
+------+-------+----+ 
1 row in set (0.00 sec) 

Este es el "mysqld Ver 5.1.37-1ubuntu5 de Debian GNU-Linux en i486 ((Ubuntu))".

Aquí es el guión de corte sencillo y pegar (por favor probarlo y verificar si funciona en su sistema):

CREATE TABLE articles (body TEXT, title VARCHAR(250), id INT NOT NULL auto_increment, PRIMARY KEY(id)) ENGINE = MYISAM; 
ALTER TABLE articles ADD FULLTEXT(body, title); 
insert into articles(body) values ('Maya'); 
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('Maya');  
+2

+1 por hacer una pregunta comprensible bien, y bien documentado en la primera oportunidad. –

Respuesta

19

En MySQL hay tres tipos de búsquedas de texto completo:

  • búsqueda booleana
  • búsqueda en lenguaje natural (usado por defecto)
  • búsqueda de expansión de consultas

De MySQL manual entry:

Una búsqueda en lenguaje natural interpreta la cadena de búsqueda como una frase en lenguaje humano natural (una frase en texto libre). No hay operadores especiales . La lista de palabras prohibidas se aplica. Además, palabras que están presentes en 50% o más de las filas son consideradas comunes y no coinciden. Las búsquedas de texto completo son naturales búsquedas de idioma si se proporciona el modificador IN NATURAL MODO IDIOMA o si no se proporciona ningún modificador.

Por ejemplo, trate de añadir dos discos más:

INSERT INTO articles(body) VALUES ('Some text'), ('Another text'); 

y ejecutar la misma Seleccionar de nuevo - que funcionará.

Como solución alternativa, puede utilizar el modo booleano, que no tiene esta regla "50%":

SELECT * FROM articles WHERE MATCH(title, body) AGAINST('Maya' IN BOOLEAN MODE); 
Cuestiones relacionadas