Generador de Consulta MySQL FullText para un buscador

La idea es dejar una clase que genere una consulta MySQL de busqueda utilizando los indices FULLTEXT.

Lo primero son las limitaciones o requerimientos:

  • La consulta solo servirá para base de datos MySQL.
  • La tabla debe tener su juegos de caracteres en Case Insensitive o sea que no distinga entre mayúscula o minúsculas en nuestras búsquedas. Son todos los juegos de caracteres que terminan en ci por ej.: utf8_general_ci
  • Los campos que se utilizaran para realizar el indice FULLTEXT y la búsqueda deben ser del tipo
    1. CHAR
    2. VARCHAR
    3. TEXT
      o algunas de sus variantes
  • Utilizaremos la opcion IN BOOLEAN MODE que nos traerá algunas ventajas.
    1. No usa el limite del 50% de los resultados, sin esta opción si la cantidad de resultados era mayor al 50% de los registros de la tabla no nos retornaba nada, con esta opción si.
    2. Puede funcionar incluso sin un indice FULLTEXT, aunque enlenteceria enormemente la búsqueda.
    3. Nos da soporte para usar los siguientes operadores:
      • + indica que la palabra debe estar presente en cada registro que se retorne.
      • - indica que la palabra no puede estar presente en los registros que se retornen.
      • sin operador cuando ni + ni – se especifica la palabra es opcional, pero se le da mas preferencia al registro que la contiene.
      • > o < estos operadores se usan para aumentar o bajar la relevancia de una palabra en un registro, pero no elimina registros por contener dicha palabra.
      • ( ) los paréntesis se usan para agrupar palabras en sub-expresiones. Se pueden anidar expresiones.
      • ~ operador de negación, da una relevancia negativa de la palabra en el registro, pero a diferencia del operador – no elimina el registro de los resultados de la búsqueda.
      • palabras entere comillas se buscaran literalmente, es decir debe existir una coincidencia exacta en las frases.
      • * sirve como operador de truncado, en el caso de este buscador, no sera necesario usarlo puesto que la generación de la consulta se encargara de hacerlo.

Primero veamos la estructura de una tabla de ejemplo, que podria ser la del siguiente codigo...

Una vez creada la tabla y si no creamos el indice FULLTEXT, que en este caso serian los campos titulo y desarrollo, creamos el indice. La consulta funcionara igual si no se crea dicho indice pero sera mucho mas lenta que si lo creáramos.

Realizado estos dos pasos ya podemos ir al código de la clase:
Archivo: BuscadorFullText.php

Como se utiliza la clase:
El código de un ejemplo básico de utilización seria el siguiente.

Explicación del Código:

linea 10> Incluimos la clase a ser usada.
linea 11> Instanciamos la clase pasándose como parámetros, el valor del campo de búsqueda de nuestro formulario y el nombre de la tabla que se usara.
linea 14> $obj2->getValue(‘buscar’); este método nos retorna una cadena que puede ser usado correctamente en un value de un campo encerrado entre comillas dobles.
linea 23> Le indicamos cuales son los campos que pertenecen al indice fulltext, en este caso tenemos dos formatos un string separados por coma o un arreglo conteniendo en cada indice del arreglo uno de los campos.
linea 24> Pasamos los campos que queremos como resultados en la consulta.
linea 25> En este caso el formulario dispone de un campo para la categoría de la noticia, que varia según lo que selecciona el usuario. A este método le pasamos el nombre del campo del formulario que deberá coincidir con el de la tabla y el tipo de operador = > < etc. También disponemos de un método addParametrosFijos donde se le pasa alguna condición fija que se quiera.
linea 26> Cargamos la consulta en la variable $consulta !!! ojo !!! pues se usa con sprintf pues se tiene que incorporar los datos para el limit.
linea 27> Cargamos los datos del limit y ya podremos usarla en nuestra consulta mysql.
Espero que les resulte útil y cualquier comentario o error por favor avisarme para así corregirla, pues salio con pocas pruebas.

Próximamente agregare otro articulo para usar de manera conjunta, esta clase y el paginador.

FUENTES:
Búsquedas booleanas de texto completo (FullText)
Afinar búsquedas de texto completo (FullText) con MySQL
Funciones de búsqueda de texto completo (Full-Text)

Compártelo

También te puede interesar...

Comentarios

    No hay comentarios.

Escribe un comentario

Tienes que estar registrado para poder dejar comentarios.
Accede a tu cuenta o regístrate en NotasWeb.com.
Avatar_279 objetivophp
en el Ranking


Artículos más vistos del usuario

Últimos artículos del usuario