Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Can't find FULLTEXT mysql

Estas en el tema de Can't find FULLTEXT mysql en el foro de Mysql en Foros del Web. Hola compañeros, me presento mi nombre es Gerard y soy nuevo por aqui. Tengo un problema con un buscador para una web que estoy haciendo. ...
  #1 (permalink)  
Antiguo 13/06/2014, 08:34
Avatar de gerardrev  
Fecha de Ingreso: junio-2014
Ubicación: Tarragona
Mensajes: 23
Antigüedad: 9 años, 10 meses
Puntos: 0
Can't find FULLTEXT mysql

Hola compañeros, me presento mi nombre es Gerard y soy nuevo por aqui.
Tengo un problema con un buscador para una web que estoy haciendo.
Utilizo una BBDD mysql, tal que asi:

Id (autoincrement)
Titulo fulltext
Url fulltext
Palabras fulltext

Y la consulta la hago asi:
Código MySQL:
Ver original
  1. -- Si la búsqueda tiene una palabra utilizamos LIKE sino MATCH AGAINST.
  2. SELECT titulo, url, palabras
  3. FROM buscador
  4. WHERE titulo LIKE '%$cadena_sin_espacios%' OR palabras LIKE '%$cadena_sin_espacios%'
  5.  
  6. SELECT titulo, url, palabras, MATCH (Titulo,Palabras) AGAINST ('+".$cadena_sin_espacios."*' IN BOOLEAN MODE) AS Score
  7. FROM `buscador`
  8. WHERE MATCH (Titulo,Palabras) AGAINST ('+".$cadena_sin_espacios."*' IN BOOLEAN MODE)
PD: lo de cadena sin espacios no hagais caso que es solo para borrar espacios que pudiera haber antes de la palabra.
Cita:
Editado: No aplica a foro de MySQL

El problema viene cuando busco dos palabras en el buscador, me sale el mensaje:
Can't find FULLTEXT index matching the column list

Anteriormente ya me habia salido pero ajustando las columnas a fulltext lo solucione.
No me hagais mucho caso pero diria que el problema viene desde esta mañana que he puesto el cotejamiento: utf8_spanish_ci, para que se mostrasen los acentos, aunque finalmente lo he tenido que solucionar de la siguiente forma porque ni con esas:

Cita:
Editado: No aplica a foro de MySQL
A ver si alguien sabe a que se debe, o almenos como resolverlo.
Muchas gracias de antemano.

Última edición por gnzsoloyo; 14/06/2014 a las 20:36
  #2 (permalink)  
Antiguo 13/06/2014, 08:58
 
Fecha de Ingreso: noviembre-2010
Ubicación: en las nubes
Mensajes: 56
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Can't find FULLTEXT mysql

bueno el detalle es que no se puede buscar de esa manera en un campo tipo fulltext,
no puede usar like , solamente MATCH (title,body) AGAINST ('database');
like , solo aplica en el caso de char y varchar, si no me equivoco

http://dev.mysql.com/doc/refman/5.0/...expansion.html
http://dev.mysql.com/doc/refman/5.0/...xt-search.html
__________________
la mejor soluciones no es la mas complicada, si no con la mejor ingenio
  #3 (permalink)  
Antiguo 13/06/2014, 08:59
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Can't find FULLTEXT mysql

Yo diria que tu Full Text deberia ser Titulo y Palabras, no url... ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #4 (permalink)  
Antiguo 14/06/2014, 17:22
Avatar de gerardrev  
Fecha de Ingreso: junio-2014
Ubicación: Tarragona
Mensajes: 23
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Can't find FULLTEXT mysql

Cita:
Iniciado por Hufex Ver Mensaje
bueno el detalle es que no se puede buscar de esa manera en un campo tipo fulltext,
no puede usar like , solamente MATCH (title,body) AGAINST ('database');
like , solo aplica en el caso de char y varchar, si no me equivoco

[url]http://dev.mysql.com/doc/refman/5.0/es/fulltext-query-expansion.html[/url]
[url]http://dev.mysql.com/doc/refman/5.0/es/fulltext-search.html[/url]
El error lo da cuando uso el match, cuando uso el like no peta.

Cita:
Iniciado por Eleazan Ver Mensaje
Yo diria que tu Full Text deberia ser Titulo y Palabras, no url... ;)
lo cambiare pero no creo que afecte en nada, puesto que en la columna URL no busca coincidencias, solo devuelve esa variable si encuentra la coincidencia en titulo o palabras.
  #5 (permalink)  
Antiguo 14/06/2014, 18:54
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Can't find FULLTEXT mysql

Cita:
Can't find FULLTEXT index matching the column list

Anteriormente ya me habia salido pero ajustando las columnas a fulltext lo solucione.
No entiendo como puede ser esto, cómo ajustaste las columnas a fulltext? El error es porque no se encuentra el índice y no por cómo tengas las columnas.

Serías tan amable de mostrar la estructura de tu tabla?

Por cierto, muevo tu tema a MySQL, porque el problema nada tiene que ver con PHP.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 14/06/2014, 20:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Can't find FULLTEXT mysql

Cita:
Can't find FULLTEXT index matching the column list
Lo que te está diciendo es que no encuentra un índice FULLTEXT creado sobre la tabla, o al menos no existe para los campos seleccionados.
Debes tener en cuenta que el indice FULLTEXT debe ser creado si o si sobre las columnas del MATCH().
Por otro lado, los índices FULLTEXT aplicaban sólo para las tablas MyISAM hasta la versión 5.6.4, donde se implementó el soporte para las InnoDB. Si no tienes esa, y las tablas son InnoDB, no podrás usar FULLTEXT.

¿Qué versión de MySQL usas?
¿Cuál es la estructura (CREATE TABLE) de las tablas?

Para esto último simplemente haz un
Código MySQL:
Ver original
  1. SHOW CREATE TABLE buscador
y postea lo que devuelve.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 17/06/2014, 01:39
Avatar de gerardrev  
Fecha de Ingreso: junio-2014
Ubicación: Tarragona
Mensajes: 23
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Can't find FULLTEXT mysql

Cita:
Iniciado por Triby Ver Mensaje
No entiendo como puede ser esto, cómo ajustaste las columnas a fulltext? El error es porque no se encuentra el índice y no por cómo tengas las columnas.

Serías tan amable de mostrar la estructura de tu tabla?

Por cierto, muevo tu tema a MySQL, porque el problema nada tiene que ver con PHP.
Ante todo gracias por vuestras respuestas. Puse el tema en php porque vi uno igual aunque se resolvio de diferente manera, y lo puse ahí, pero si es verdad que esta mejor en Mysql.

Estoy trabajando con phpmyadmin de xampp, para convertir las columnas a fulltext hay en la interficie grafica un sitio donde pone Texto completo, que lanza el siguiente comando:

Código MySQL:
Ver original
  1. ALTER TABLE `buscador` ADD FULLTEXT(`Titulo`);

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo que te está diciendo es que no encuentra un índice FULLTEXT creado sobre la tabla, o al menos no existe para los campos seleccionados.
Debes tener en cuenta que el indice FULLTEXT debe ser creado si o si sobre las columnas del MATCH().
Por otro lado, los índices FULLTEXT aplicaban sólo para las tablas MyISAM hasta la versión 5.6.4, donde se implementó el soporte para las InnoDB. Si no tienes esa, y las tablas son InnoDB, no podrás usar FULLTEXT.

¿Qué versión de MySQL usas?
¿Cuál es la estructura (CREATE TABLE) de las tablas?

Para esto último simplemente haz un
Código MySQL:
Ver original
  1. SHOW CREATE TABLE buscador
y postea lo que devuelve.
No entiendo muy bien la frase que he puesto en negrita .
Tema versiones:

Cita:
Servidor BBDD:

Servidor: 127.0.0.1 via TCP/IP
Tipo de servidor: MySQL
Versión del servidor: 5.6.16 - MySQL Community Server (GPL)
Versión del protocolo: 10
Usuario: root@localhost
Conjunto de caracteres del servidor: UTF-8 Unicode (utf8)

Servidor web:

Apache/2.4.9 (Win32) OpenSSL/1.0.1g PHP/5.5.11
Versión del cliente de base de datos: libmysql - mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $
extensión PHP: mysqli Documentación

phpMyAdmin:4.1.12
Las tablas si son InnoDB

En cuanto a la tabla (gracias por el comando):

Código MySQL:
Ver original
  1. CREATE TABLE `buscador` (
  2.  `Titulo` text COLLATE utf8_spanish_ci NOT NULL,
  3.  `Url` text COLLATE utf8_spanish_ci NOT NULL,
  4.  `Palabras` text COLLATE utf8_spanish_ci NOT NULL,
  5.  PRIMARY KEY (`id`),
  6.  KEY `id` (`id`),
  7.  KEY `id_2` (`id`),
  8.  KEY `id_3` (`id`),
  9.  FULLTEXT KEY `Titulo` (`Titulo`),
  10.  FULLTEXT KEY `Url` (`Url`),
  11.  FULLTEXT KEY `Palabras` (`Palabras`),
  12.  FULLTEXT KEY `Titulo_2` (`Titulo`),
  13.  FULLTEXT KEY `Palabras_2` (`Palabras`),
  14.  FULLTEXT KEY `Titulo_3` (`Titulo`),
  15.  FULLTEXT KEY `Url_2` (`Url`),
  16.  FULLTEXT KEY `Palabras_3` (`Palabras`),
  17.  FULLTEXT KEY `Titulo_4` (`Titulo`)

Lo que no se es porque me salen cosas por duplicado/triplicado incluso titulo 4, lo acabo de descubrir ahora.
Muchas gracias de antemano.
PD: vale ahora veo que por cada vez que le doy al fulltext "añade" la columna, por ejemplo ahora tengo titulo_5, aunque realmente esta columna no me es visible.

Última edición por gnzsoloyo; 18/06/2014 a las 06:03 Razón: MUY mal etiquetado. Usar HIGHLIGHT "SQL" o "MySQL".
  #8 (permalink)  
Antiguo 18/06/2014, 06:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Can't find FULLTEXT mysql

Cita:
Estoy trabajando con phpmyadmin de xampp, para convertir las columnas a fulltext hay en la interficie grafica un sitio donde pone Texto completo, que lanza el siguiente comando:
La interfaz gráfica de XAMPP, hasta lo que sé, es phpMyadmin, y el hecho de que sea difundida no implica que no pueda tener errores de diseño como interfaz.
Al ser una interfaz multiproposito para un producto que no es parte de XAMPP, ni de PHP, como es el MySQL, tiene margen de error.
Cita:
No entiendo muy bien la frase que he puesto en negrita
REsulta muy raro que no entiendas lo que remarcas.
¿Tienes claro que un indice se puede crear por más de una columna, no?
Bueno, en el caso de los FULLTEXT, un mismo índice debe crearse con todas las columnas a usar en el MATCH(), como clave de indice.
Eso es de manual. Si no están todas en el indice, MySQL descarta el índice, o no encuentra uno que cumpla con lo indicado.
Esto último quiere decir que si has creado un indice con cada una, pues eso no sirve. DEbe ser un único indice con toas al mismo tiempo, y el mismo orden del MATCH().
Código MySQL:
Ver original
  1. ALTER TABLE `buscador` ADD FULLTEXT(Titulo,Palabras);
Cita:
Tema versiones:
90% irrelevante. Yo no estoy hablando ni de PHP, ni de Apache. Sólo hablamos en este foro de MySQL. El resto no tiene imapcto en el FULLTEXT.
En tu caso, lo único importante es esto:
Cita:
Versión del servidor: 5.6.16 - MySQL Community Server (GPL)
Eso implica que por versión de MySQL no debería haber problemas. Por consecuencia, paso a pensar que el error está en la definición de la clave del índice: No tienes ninguno que abarque los dos campos al mismo tiempo. En ese caso sólo te funcionar´´ia (de aceurdo a tu tabla e indices) hacer un MATCH() por cada columna.

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 19/06/2014, 01:17
Avatar de gerardrev  
Fecha de Ingreso: junio-2014
Ubicación: Tarragona
Mensajes: 23
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Can't find FULLTEXT mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La interfaz gráfica de XAMPP, hasta lo que sé, es phpMyadmin, y el hecho de que sea difundida no implica que no pueda tener errores de diseño como interfaz.
Al ser una interfaz multiproposito para un producto que no es parte de XAMPP, ni de PHP, como es el MySQL, tiene margen de error.

REsulta muy raro que no entiendas lo que remarcas.
¿Tienes claro que un indice se puede crear por más de una columna, no?

Bueno, en el caso de los FULLTEXT, un mismo índice debe crearse con todas las columnas a usar en el MATCH(), como clave de indice.
Eso es de manual. Si no están todas en el indice, MySQL descarta el índice, o no encuentra uno que cumpla con lo indicado.
Esto último quiere decir que si has creado un indice con cada una, pues eso no sirve. DEbe ser un único indice con toas al mismo tiempo, y el mismo orden del MATCH().
Código MySQL:
Ver original
  1. ALTER TABLE `buscador` ADD FULLTEXT(Titulo,Palabras);

90% irrelevante. Yo no estoy hablando ni de PHP, ni de Apache. Sólo hablamos en este foro de MySQL. El resto no tiene imapcto en el FULLTEXT.
En tu caso, lo único importante es esto:

Eso implica que por versión de MySQL no debería haber problemas. Por consecuencia, paso a pensar que el error está en la definición de la clave del índice: No tienes ninguno que abarque los dos campos al mismo tiempo. En ese caso sólo te funcionar´´ia (de aceurdo a tu tabla e indices) hacer un MATCH() por cada columna.

¿Se entiende?
comprendido, lo habia entendido mal.

Despues de andar probando, he dado con "la solucion", aunque no muy ortodoxa pero me ha funcionado, he borrado la tabla y la he vuelto hacer desde cero y ahora ya funciona.
La verdad es que ya funcionaba en un principio, pero despues de andar tocando y probando dejo de funcionar.
Gracias por vuestro tiempo y ayuda.

Código MySQL:
Ver original
  1. CREATE TABLE `buscador` (
  2.  `Titulo` text COLLATE utf8_spanish_ci NOT NULL,
  3.  `Url` text COLLATE utf8_spanish_ci NOT NULL,
  4.  `Palabras` text COLLATE utf8_spanish_ci NOT NULL,
  5.  PRIMARY KEY (`id`),
  6.  KEY `id` (`id`),
  7.  FULLTEXT KEY `Titulo` (`Titulo`,`Palabras`)

Última edición por gerardrev; 19/06/2014 a las 01:25

Etiquetas: find, fulltext, php, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:25.