SPHINX CON PHP: CÓMO INTEGRARLO PARA BÚSQUEDAS

Hace ya tiempo que quería escribir un post sobre el indexador sphinx. Lo usamos nn la empresa donde estoy trabajando actualmentey la verdad es que no es muy difícil. Aunque, como todo, siempre se pueden hacer cosas más complejas según las necesidades.
El ejemplo que voy a poner es bastante sencillo para que se entienda como funciona el indexador.
Lo primero es preparar el archivo de configuración, donde se le indicará a sphinx donde almacenar los índices y la query para generar dichos índices. Dicho archivo se llamará sphinx.conf y yo lo tengo en la carpeta donde tengo el sphinx aunque se puede configurar para poner dicho archivo en cualquier otro sitio.
Ejemplo del fichero de configuración:
source busquedas
	{
  #Configuración de bbdd
	    type  = mysql
	    sql_host   = localhost
	    sql_user   = root
	    sql_pass   = pass
	    sql_db     = sphinx
	    sql_port   = 3306
	 
#Query de datos para indexar sql_query = SELECT id, label, description, begin_production, end_production FROM model sql_attr_uint = id # Atributo id para buscar después de indexar sql_attr_timestamp = begin_production #attibuto fecha < sql_query_info = SELECT * FROM model WHERE id=$id } index busquedasx { source = busquedas path = /xampp/htdocs/sphinx/busquedas1 #ruta donde se indexará el contenido docinfo = extern charset_type = utf-8 stopwords =/path/a/stopwords/stopwords.txt } indexer { mem_limit = 32M } searchd { listen = 127.0.0.1 port = 3312 log = /xampp/htdocs/sphinx/searchd.log query_log = /xampp/htdocs/sphinx/query.log read_timeout = 5 max_children = 30 pid_file = /xampp/htdocs/sphinx/searchd.pid max_matches = 1000 seamless_rotate = 1 preopen_indexes = 0 unlink_old = 1 crash_log_path = /var/log/sphinx/crash
Nota: Donde pone stopwords y una ruta es donde se encuentra el fichero en el que se le indica a sphinx que palabras no indexar como artículos, determinantes, etc...
Dicho fichero es un fichero de texto (.txt) donde irán las palabra separadas por un espacio.
Lo descrito arriba es un ejemplo sencillo, muy sencillo. Aconsejo profundizar más para adaptar los atributos, etc...Después de ajustar el fichero de configuración de sphinx hay que indexar el contenido en base al fichero de configuración y ya luego ya con el php realizar las búsquedas. Conviente tener un cron para indexar cada cierto tiempo ya que la base de datos se irá actualizando con contenido con cierta regularidad y conviene indexar ese contenido nuevo.

//Se instancia el objeto de sphinx
$s = new SphinxClient();

//Se establece el server de sphinx
$s->setServer("localhost", 9312);
//Se indica el modo de búsqueda
$s->setMatchMode(SPH_MATCH_ANY);
//Se lanza la búsqueda ver que 'busquedasx' está definido en el fichero sphinx.conf $result = $s->Query( 'texto a buscar', 'busquedasx' );
var_dump($result);
Los diferentes modos de búsqueda que hay en php para sphinx son:
-SPH_MATCH_ALL: Busca coincidencias en todas las palabras(modo por defecto).
-SPH_MATCH_ANY: Busca coincidencia en cualquiera de las palabras de la query.
-SPH_MATCH_PHRASE: Busca coincidencia como frase, requiere una coincidencia exacta.
-SPH_MATCH_BOOLEAN: Busca coincidencia como una expresión booleana.
-SPH_MATCH_EXTENDED: Busca coincidencia como una expresión sphinx interna.
-SPH_MATCH_FULLSCAN: Activa fullscan.
-SPH_MATCH_EXTENDED2: Igual que SPH_MATCH_EXTENDED peroañadiendo peso a las palabras.
Este post es un ejemplo muy sencillo y por supuesto que sphinx tiene muchas más cosas pero espero que os sirva para empezar y aprender.