Hola miembros de qbit y seguidores del blog, hace poco tiempo tuve la oportunidad de trabajar con sphinx (search engine).
Para lo siguiente necesitamos:
* Linux
* Sphinx aquí
* Base de datos por lo menos con una tabla para probar.
Después de realizar la instalación de sphinx en linux.
Buscamos el archivo con el nombre “sphinx.conf.in” que se encuentra dentro de la carpeta de sphinx, Una vez ahí abrir el archivo con editor de texto de su preferencia (nano, vi, etc.). Voy a explicar un poco del archivo y la configuración básica para el funcionamiento.
El primer apartado es el de source aquí encontramos la configuración.
# src1 - el nombre nuestra configuración fuente. Source src1 { # Defenir el tipo de búsqueda que realizaremos. # Tipo de conexión podemos elegir -> mysql, pgsql, mssql, xmlpip Type = mysql # Si seleccionamos mysql - escribir los datos para la conexión con la base de datos, creo que no hay mas que explicar aquí. sql_host = localhost sql_user = test sql_pass = sql_db = test sql_port = 3306 # Opciona ya que por default es 3306 # Es la consulta de la en la cual realizaremos la búsqueda de texto # Recordatorio la "\" es solo un salto de linea sql_query = \ SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \ FROM documents # Aquí podemos los atributos por los cuales podemos agrupar la consulta # esto resulta útil al momento de agrupar una sola parte y establecer un rango en la búsqueda sql_attr_uint = group_id } # configuración de los indices index index_src1{ # seleccionar la fuente y el directorio donde se crearan los indices source = src1 path = /home/usuario/sphinx/data/file docinfo = extern } # Establecemos el limite memoria cache indexer{ mem_limit = 256M } # Aquí encontramos la configuración log # Configuración máxima de conexiones y el tiempo limite # Máximo de match o filas a buscar # puerto de de escucha searchd{ listen = 9312 log = /var/log/sphinxsearch/searchd.log query_log = /var/log/sphinxsearch/query.log read_timeout = 5 max_children = 30 pid_file = /var/run/sphinxsearch/searchd.pid # max_matches = 1000 seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 workers = threads # for RT to work binlog_path = /home/usuario/sphinx/data }
Después del archivo de configuración guardar este en la ruta del defautl, No olvidar agregar permisos de escritura a los archivos de log. Aquí encontramos el archivo de configuración
/usr/local/etc/sphinx.conf
Por omisión en linux podemos encontrar sphinx en la siguiente ruta
cd /usr/local/bin/
Donde ejecutaremos
indexer --all
esto para indexar los resultados de la tabla
Cliente Sphinx
Podemos crear en php un pequeño cliente que se conecta al sphinx
// Usar la libreria para php sphinx require_once sphinxapi.php $client = new SphinxClient(); $client->setServer( servidor, puerto ); // Respuesta siempre como Array $client->SetArrayResult(true); // Establecer Limit de la consulta $client->SetLimits( 0, 50 ); // Aquí es algo importante ya que se pueden establecer varios tipos de búsqueda y esto afecta al resultado // Establecer tipo match en la cadenas $client->SetMatchMode( SPH_MATCH_ANY ); /* Son la que he utilizado pero existen otras SPH_MATCH_ALL = coincide con todas las palabras de la consulta SPH_MATCH_ANY = coincide con alguna de las palabras de la consulta; SPH_MATCH_BOOLEAN = coincide con la consulta como una expresión booleana; SPH_MATCH_EXTENDED = coincide con la consulta como una expresión de esfinge lenguaje de consulta SPH_MATCH_EXTENDED2 = */ // Establecer filtro por medio de los parámetros con los que agrupamos la consulta // dentro del archivo de configuración agregamos un "sql_attr_uint" // por ejemplo es como si el mysql se realizara un Where filter in (value) $client->SetFilter( $filter , $value ); // Por último colocamos la palabra o la consulta sphinx y el nombre del indice donde realizaremos la consulta $result = $client->query($query, $indice);
Sphinx si realiza las búsquedas mas rápido en comparación con el motor de mysql, aunque hay un problema para poder actualizar los nuevos registro hay que volver a realizar un ” indexer –all “.
Bueno para finalizar si no les agrada esto aquí la documentacion de sphinx