Foros del Web » Programando para Internet » PHP »

script, Can't find FULLTEXT

Estas en el tema de script, Can't find FULLTEXT en el foro de PHP en Foros del Web. Hola, ya he consultado sobre esto y me funciona, pero al poner en el campo de busqueda más de una palabra o apenas al terminar ...
  #1 (permalink)  
Antiguo 21/08/2005, 09:10
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
script, Can't find FULLTEXT

Hola, ya he consultado sobre esto y me funciona, pero al poner en el campo de busqueda más de una palabra o apenas al terminar de poner la 1a y dar espacio me da ese error:Can't find FULLTEXT index matching the column list

el script es el siguiente:

Código PHP:
 <?php
//cadena de conexion
$link=mysql_connect("localhost","","");
mysql_select_db("");

// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($_POST["busqueda"]!="")
{
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$_POST["busqueda"]);
$numero=count($trozos);

if (
$numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$cadbusca="SELECT  palac, link FROM contenido WHERE palac =1
       AND titulo LIKE  '%$busqueda%' OR comentarios LIKE  '%$busqueda%' LIMIT 50"
;
}
elseif(
$numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
 
$cadbusca="SELECT  titulo,comentarios, MATCH ( titulo,comentarios )
      AGAINST (  '$busqueda' ) AS Score FROM contenido WHERE
      MATCH ( titulo,comentarios ) AGAINST (  '$busqueda' ) ORDER  BY Score DESC LIMIT 50"
;
}

$result=mysql_query($cadbusca,$link) or die(mysql_error());
While(
$row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$referencia=$row->palac;
$titulo=$row->link;
echo 
$referencia." - ".$titulo."<br>"; echo "<a href='".$fila['titulo']."'>".$fila['titulo']."</a>";
}
}
?>
y el formulario está asi:

Código:
<FORM METHOD=POST ACTION="buscador1.php">
                    <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Ingrese el producto</font> 
                          <input name="busqueda" type="text" size="16">
<input type="submit" name="Submit" value="Buscar">
                        </FORM>

que está mal, no puedo solucionarlo.
  #2 (permalink)  
Antiguo 21/08/2005, 09:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Como es eso de que "al dar al espacio" ya te aparece ese error? .. acaso usas RSS o Ajax (técnicas de "Remote Scripting") .. por lo que indicas ahí en el código no haces nada de eso. Así que el error se originaría al enviar tus datos vía botón de enviar de tu formulario o similar.

Sobre el error concreto .. no indicas la estructura de tus Tablas ni como las definistes ni la versión de Mysql .. pero todo eso es muy inportante .. pues no en todas las versiones de Mysql se soporta "Full Text Search" y a todo esto se deben definir los campos que se usen para ese tipo de busquedas como tal con su propiedad SQL determinada.

Puedes ver un tutorial al respecto en:
http://www.mysql-hispano.org/page.php?id=15
(fijate bien en la definición para los campos "FULL TEXT" ...)

Un saludo,
  #3 (permalink)  
Antiguo 21/08/2005, 11:37
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
La tabla es de tipo MyISAM y está formada por 5 campos, de los cuales el primero es el id (clave primaria y auto_increment), los demás son de tipo TEXT, todos tienen la propiedad FULLTEXT , es por eso que no veo porqué no puedo ingresar mas de una palabra para que realice la búsqueda.

Cuando cargo los datos para la tabla tengo que elegir alguna función para algún campo?
Unos de los cinco campos que tiene se llama título, lo hice cuando creé la tabla, de todas formas ahora cuando cargo los datos lo estoy dejando vacio porque no me sirve, ya intenté sacarlo pero no me funciona el buscador, asi que decidi dejarlo (obvio se que eso está super mal)

Que más puede estar pasando??

Última edición por mvlsistemas; 21/08/2005 a las 12:02
  #4 (permalink)  
Antiguo 21/08/2005, 12:49
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Pon la definición de tu tabla para salir de dudas..., creo que ahí está el problema

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #5 (permalink)  
Antiguo 21/08/2005, 12:55
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
nombre de la tabla: contenido

campos:

id: autoincrement - clave primaria
palac: text - fulltext
link: text - fulltext
titulo: text - fulltext
comentarios: text - fulltext

Esas son las unicas propiedades que tienen los campos

  #6 (permalink)  
Antiguo 21/08/2005, 13:07
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Ya decía yo

En tu consulta SQL utilizas MATCH ( titulo,comentarios ), al hacer eso en tu tabla "contenido" deberías tener un índice sobre los dos campos (no de manera individual):

create table contenido(
....
...
FULLTEXT (titulo, comentarios)
...
);

Saludos
PS. Date una vuelta por la documentación de MySQL
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #7 (permalink)  
Antiguo 21/08/2005, 15:12
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
xknown: Muchas gracias por tu ayuda, probé y asi funcionó.Dejo acá la consulta que utilicé para que pueda servir a otros que le suceda lo mismo.

La tabla ya estaba creada y con datos cargados por eso usé esta consulta:

CREATE FULLTEXT INDEX idx_titulo_comentarios ON contenido(titulo,comentarios);

Luego modifique esta línea en buscador1.php:

Código PHP:
elseif($numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
 
$cadbusca="SELECT  palac,link,MATCH ( titulo,comentarios )
      AGAINST (  '$busqueda' ) AS Score FROM contenido WHERE
      MATCH ( titulo,comentarios ) AGAINST (  '$busqueda' ) ORDER  BY Score DESC LIMIT 50"
;

compárenla con el código que esta más arriba.
Gracias Nuevamente

A Cluster también por su buena onda y predispsición.


Última edición por mvlsistemas; 21/08/2005 a las 18:59
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 13:50.