En nuestro anterior post hemos visto como poner en marcha un servidor con mnogosearch. Una vez acabada la configuración se ha de poner algo que permita hacer las búsquedas. Para esto hay dos opciones:
- Usar el cgi que viene en la distribución de mnogosearch. Para la mayoría la mejor opción.
- Usar la API PHP de mnogosearch y hacer tu propia página de búsqueda. Para quienes necesitan flexibilidad, la única opción.
La documentación de la API PHP es un cacao tremendo, mezcla cosas de versión a versión, y por lo general es bastante difcil de leer. Si quieres llegar a algo con la API, lo mejor que puedes hacer es cogerte el ejemplo que viene y empezar a estudiarlo concienzudamente o bien ver como lo han hecho otros, de esto hay muy poco por la itnernet así que aqui va como lo hemos implementado nosotros.
Lo que cuento a continuación funciona con la versión de la API 30308, es muy probable que si tienes una disntinta esto no funcione, cuento sólo la chicha, nada de como ser haría la interfaz ni cosas bonitas…
// Definimos la conexión del buscador, hay que definir el modo y es interesante usar la QCache, hace que todo vaya mucho más rápido.
$url_udm="mysql://usuario:contraseña@servidor/base_de_datos/?dbmode=blob&QCache=yes";
$encuentros_por_pagina=10;
if(!isset($desde))
$desde = 0;
//nos creamos una conexión a la API
$udm = Udm_Alloc_Agent($url_udm);
/*
Con la siguiente variable se puede limitar la búsqueda a unas url, algo parecido al inurl: de google
*/
udm_add_search_limit($udm, UDM_LIMIT_URL, $sitio);
Udm_Set_Agent_Param($udm,UDM_PARAM_PAGE_SIZE,$encuentros_por_pagina); // encuentros por pagina
/*
para la paginacion,
mnogosearch pagina automaticamente, pero a diferencia de otros usa la
paginación como si fuera un libro, por lo que hay que pasarle la página
a la que quieres saltar y no el primer resultado de esa página.
*/
Udm_Set_Agent_Param($udm,UDM_PARAM_PAGE_NUM,$desde/$encuentros_por_pagina);
Udm_Set_Agent_Param($udm,UDM_PARAM_QUERY,$q); // lo que estamos buscando
Udm_Set_Agent_Param($udm,UDM_PARAM_CHARSET,'iso-8859-1'); // Aseguramos la codificación de la BD
udm_set_agent_param($udm,UDM_PARAM_BROWSER_CHARSET, 'iso-8859-1'); //la codificación del html resultante
udm_set_agent_param($udm,UDM_PARAM_STOPFILE, '/usr/local/mnogosearch/etc/stopwords/es.sl'); // las palabras que no dicen nada
$mResult = udm_find($udm,$words); //lanzamos la búsqueda
// La interfaz que vamos a devolver va a ser muy simple, a modo de ejemplo.
echo "Se encontraron". udm_get_res_param ($mResult,UDM_PARAM_FOUND) ."\n";
echo "Estamos en la conicidencia ". udm_get_res_param ($mResult,UDM_PARAM_FIRST_DOC) ." de".\
udm_get_res_param ($mResult,UDM_PARAM_LAST_DOC)."\n";
/* Para la última página hay que hacer un bucle más corto */
if ($result["estimatedTotalResultsCount"] > $desde+$encuentros_por_pagina) //no es la última página
$fin_bucle=$encuentros_por_pagina;
else
$fin_bucle=$result["estimatedTotalResultsCount"] - $desde; //es la última página
for ($i=0;$i<$fin_bucle;$i++) { // recorremos las página encontradas
// titulo de la página con su enlace
echo "<a href=\"". htmlspecialChars(udm_get_res_field ($mResult,$i,UDM_FIELD_URL)) ."\">"\
ParseDocText(udm_get_res_field ($mResult, $i,UDM_FIELD_TITLE))."</a>\n";
// resumen
echo ParseDocText(udm_get_res_field ($mResult, $i,UDM_FIELD_DESC) . udm_get_res_field ($mResult, $i,UDM_FIELD_TEXT));
// Tamaño
echo "tamaño: ".udm_get_res_field ($mResult, $i,UDM_FIELD_SIZE)."\n\n\n";
}
udm_free_res($mResult); //liberamos las conexiones y la memoria
udm_free_agent($udm);
Entradas (RSS)