Buscador
El buscador Prontus es un indexador y buscador de texto completo (full text) integrado a Prontus, que puede ser utilizado para buscar contenidos dentro de instancias de Prontus, dentro de páginas web de formato libre e incluso dentro de archivos de tipo binario como PDFs o documentos de texto.
Última modificación: Jueves 26 de agosto de 2021
El buscador Prontus consiste en dos soluciones: un indexador de contenidos que genera archivos estáticos, y un formulario de búsqueda. El indexador funciona analizando los artículos de una instancia Prontus o archivos sueltos dentro de un conjunto de directorios en el disco duro del servidor virtual. Como resultado de ese análisis, el indexador construye archivos de bases de datos que contienen todas las palabras relevantes encontradas dentro de los textos, organizadas de forma tal que la búsqueda de palabras e identificación de los archivos que las contienen es rápida y eficiente.
Dentro de estas bases de datos, denominadas "índices", se almacena toda la información que será desplegada como resultado de una búsqueda, de manera que no es necesario volver a leer los archivos indexados para entregar información básica acerca de ellos (su ubicación -url-, el titular y las primeras palabras del texto).
Al hacer una búsqueda, puedes implementar una serie de filtros para acotar la búsqueda de manera más específica según tus necesidades. Estos filtros incluyen criterios como búsqueda por taxonomía, por fecha y orden de los resultados.
Los programas que forman el buscador Prontus son dos:
prontus_indexer.cgi
, recorre los directorios y sitios externos indexando archivos.prontus_search.cgi
, ejecuta las búsquedas y despliega los resultados al usuario web.
- Utiliza la estructura de datos de Prontus para reconocer el texto significativo que debe ser indexado, haciendo más eficiente este proceso y descartando texto superfluo, no significativo o confuso.
- Utiliza la estructura de datos de Prontus para reconocer el alta y la fecha y hora de publicación y expiración de cada artículo, decidiendo de acuerdo a esto si los indexa o no.
- Permite definir el límite de repeticiones máximo para reconocer y descartar palabras no significativas.
- Al indexar directorios arbitrarios, permite definir los tipos de archivo que serán indexados.
- Compatible con el idioma español. Reconoce acentos (á), tildes (ñ) y cremillas (ü).
- Permite buscar dentro de un índice en particular o en todos los índices almacenados.
- Busca por una o más palabras, entregando resultados que las contienen todas (modalidad AND) o alguna de ellas (modalidad OR).
- Permite buscar por frases (texto entre comillas).
- Permite definir palabras a eliminar de los resultados (modalidad NOT).
- Reconoce comodines '*' (varias letras) y '?' (una letra).
- Entrega resultados ordenados por importancia (cantidad de palabras encontradas dentro del texto) o por fecha de publicación.
- Permite filtrar por taxonomía Prontus (sección, tema y subtema de los artículos).
- Permite filtrar por rango de fechas.
- Permite implementar distintos formularios de búsqueda y plantillas para mostrar los resultados.
- Entrega los resultados paginados, pudiendo definirse la cantidad máxima de páginas y la cantidad de resultados a mostrar en cada una.
- Los resultados son escritos y entregados desde un directorio temporal, de manera de incluir con naturalidad los elementos dinámicos que rodeen la página de respuesta (por ejemplo, PHP o ASP).
- Permite la integración de filtros externos para indexar archivos de datos tales como PDF, DOC, etc.
- Permite definir un archivo de bitácora para registrar la fecha, hora, número IP y texto buscado en cada oportunidad.
- Es compatible con las Friendly URLs de Prontus.
El proceso de indexado es llevado a cabo por el programa prontus_indexer.cgi
, que puedes invocar mediante una interfaz de línea de comando, manualmente o usando cron, o a través de un navegador usando el panel de administración del sitio:
Una vez allí debes hacer click en el botón "Reindexar Todo"
El buscador toma los parámetros de configuración del archivo buscador_prontus.cfg
ubicado en [nombre del sitio]/cpan/buscador_prontus.cfg
. Puedes ver la descripción de cada variable de configuración en el artículo correspondiente.
Los directorios donde se alojan las componentes del buscador Prontus son los siguientes:
-
Programas
/cgi-bin # Directorio cgi público de Prontus (puede ser cgi-b10.14, etc)
prontus_search.cgi # CGI para realizar búsquedas.
/cgi-cpn # Directorio cgi privado de Prontus (puede ser cgi-p10.14, etc)
prontus_indexer.cgi # Programa de indexación.
lib_search.pm # Biblioteca de rutinas del Buscador Prontus
# (debe incluirse si el código no es compilado).
-
Archivo de Configuración
/<directorio prontus>/cpan/buscador_prontus.cfg
-
Indices
/<directorio prontus>/cpan/data/search
raw/0000 # Indice de archivos arbitrarios.
url/0000 # Indice de archivos obtenidos vía spider.
<dir prontus>/aaaa # Indice del año aaaa del prontus <dir prontus>.
...
Se crea un nuevo índice cada año para evitar que éste crezca en forma descontrolada. Para sitios con mucho contenido (20.000 artículos al año) indexar un año completo puede requerir hasta 100 MB disponibles en RAM.
-
Archivo Semáforo
/<directorio prontus>/cpan/data/search
semaforo.txt # Archivo semáforo.
El semáforo impide la ejecución de más de una copia del indexador para una misma instancia de Prontus; sin embargo, si el archivo es más antiguo que 12 horas, entonces es descartado. Así se impide un deadlock en caso de que la ejecución del indexador sea abortada por alguna razón y no se alcance a borrar el archivo semáforo.
-
Plantillas
/<directorio prontus>/plantillas/extra/search/pags
search.html # Plantilla por defecto.
<nombre>.html # Otra plantilla.
...
La plantilla a utilizar se especifica dentro de los parámetros de invocación del buscador. Puedes usar tantas plantillas como sea necesario.
-
Páginas de resultado
/<directorio prontus>/site/cache/search/pags
search.html # Plantilla por defecto.
<nombre>.html # Otra plantilla.
La página de resultado se escriben en este directorio y el browser del usuario se dirige para leerla desde ahí mediante una redirección HTTP. Los nombres de estos archivos tienen la forma:
'search' . <tiempo Unix (segundos)> . <número de proceso> . <extension>
La extensión es la misma que la de la plantilla.
Cada vez que se hace una búsqueda, se borran de este directorio los archivos con más de 5 minutos de antigüedad.
La búsqueda dentro de los índices previamente creados se realiza mediante la CGI
prontus_search.cgi
Las variables de invocación son las siguientes:
Nombre |
Ejemplo |
Descripción |
search_prontus |
prontus_noticias |
Nombre del directorio Prontus donde residen los índices. |
search_comodines |
yes |
'yes' o 'no'. Si es 'yes', permite la búsqueda usando los comodines * y ?. La búsqueda con comodines utiliza muchos más recursos que la búsqueda sin ellos, por lo que esta modalidad no es recomendable para sitios expuestos a muchas visitas. Valor por defecto: 'no'. |
search_idx |
prontus3_videos |
Indice donde buscar. Puede ser 'ALL', en cuyo caso se busca en todos. Si no se especifica, busca en el índice correspondiente a search_prontus. |
search_tmp |
search_simple.HTML |
Nombre de la plantilla de búsqueda. Si no se especifica, se usa search.HTML Las plantillas se toman de /< search_prontus >/plantillas/extra/search/pags |
search_resxpag |
10 |
Resultados por página, con un máximo correspondiente al parámetro RESPERPAGarchivo de configuración. Si la variable search_resxpag no se especifica, se asume el valor del parámetro RESPERPAG archivo de configuración. Si el parámetro RESPERPAG no existe en el archivo de configuración, se usa el valor 50. |
search_maxpags |
20 |
Resultados por página, con un máximo correspondiente al parámetro MAXPAGSarchivo de configuración. Si la variable search_maxpags no se especifica, se asume el valor del parámetro MAXPAGS archivo de configuración. Si el parámetro MAXPAGS no existe en el archivo de configuración, se usa el valor 20. |
search_texto |
flores -fernando |
Texto a buscar. Este texto es validado y convertido en un conjunto de palabras. Si están habilitados (search_comodines = yes), pueden usarse los comodines * y ?. Un signo menos (-) ante una palabra excluirá los resultados que la contengan. Puede buscarse por todas las palabras o por sólo algunas de ellas, dependiendo de la variable search_modo. |
search_pag |
5 |
Página a mostrar. Si no se especifica, se muestra la primera página. |
search_orden |
CRO |
Orden de los resultados (CRO para cronológico o REL para relevancia). Si no se especifica, se ordena cronológico. |
search_form |
yes |
Mostrar formulario ('yes' o 'no'). Valor por defecto: 'yes'. |
search_modo |
AND |
Hacer AND u OR con las palabras ingresadas (por defecto hace OR). |
search_seccion |
Noticias |
Nombre de la sección a mostrar. Si no se especifica, se muestran todas. |
search_tema |
Santiago |
Nombre del tema a mostrar. Si no se especifica, se muestran todos. |
search_subtema |
Salud |
Nombre del subtema a mostrar. Si no se especifica, se muestran todos. |
search_fechaini |
01/01/05 |
Fecha de inicio. Si no se especifica, no se filtra por fecha. Se aceptan separadores / y -. |
search_fechafin |
01/06/05 |
Fecha de término. Si no se especifica, no se filtra por fecha. Se aceptan separadores / y -. |
search_meta1 |
imagen |
Variable META1, definida en el archivo de configuración. |
search_meta2 |
calle |
Variable META2, definida en el archivo de configuración. (Muestra sólo resultados cuya variable META2 corresponde al valor pasado en la invocación) |
search_meta3 |
zoo |
Variable META3, definida en el archivo de configuración. (Muestra sólo resultados cuya variable META2 corresponde al valor pasado en la invocación) |
Aplicación
Puedes usar el buscador Prontus con un mínimo de variables de invocación, con todas ellas o con un conjunto escogido de acuerdo a las características del sitio web. El resto puede no especificarse para utilizar los valores por defecto u ocultarse de la vista del usuario haciendo uso de variables ocultas (campos hidden).
Además, puedes usar el buscador Prontus con o sin formulario incluido en los resultados, lo cual te otorga una gran libertad a la hora de diagramar la mecánica de funcionamiento.
-
Invocación mínima
En caso de poseer el formulario inserto dentro de la plantilla de resultados, basta con invocar /cgi-bin/prontus_search.cgi?search_prontus=[nombre del sitio]
, por ejemplo /cgi-bin/prontus_search.cgi?search_prontus=prontus_noticias
para que se despliegue la plantilla por defecto mostrando sólo el formulario de búsqueda.
-
Invocación mínima con cambio de plantilla
Si necesitas especificar otra plantilla a mostrar, entonces la invocación cambia a /cgi-bin/prontus_search.cgi?search_prontus=[nombre del sitio]?search_tmp=[ nombre de la plantilla ]
Ver Cómo implementar un buscador.
Puedes también especificar dinámicamente la plantilla de resultados usando la variable de invocación search_tmp en tus formularios. Eso en este caso te permitirá configurar la plantilla a una adecuada a cada multivista distinta.
Para la aplicación en sitios con múltiples idiomas, deberás implementar instancias de Prontus separadas con el objeto de contener los indexadores de cada idioma. Por ejemplo, si un sitio tienen versiones en inglés y español, se instala una instancia de Prontus aparte, llamada por ejemplo prontus_search
, y se configura para que su buscador indexe el sitio original, llamado por ejemplo prontus_empresa, mediante la variable en el archivo de configuración:
PRONTUS_DIR_1 = /prontus_empresa
En el mismo archivo de configuración se especifica que el buscador indexe sólo los textos en inglés, por ejemplo:
# Variable Prontus que sera considerada el titular.
TITLEVAR = txt_titular_en# Variables Prontus sobre las que se buscara.
TEXTVARS = txt_titular_en txt_bajada_en vtxt_cuerpo_en vtxt_recuadro_en txt_asociado1_entxt_asociado2_en txt_asociado3_en
En este ejemplo mostramos marcas Prontus con el sufijo _en para contener los textos en inglés.
Puedes implementar una serie de filtros para acotar la búsqueda de manera más específica, según requiera el usuario. Éstos incluyen criterios como búsqueda por taxonomía, por fecha y orden de los resultados.
El buscador incluye una serie de filtros que se manejan mediante javascript, por lo que se deben incluir en el header de las plantillas que utilizen al buscador avanzado.
/[nombre del sitio]/js-local/jquery/jquery.js
/[nombre del sitio]/js-local/jquery/jquery-ui.js
Para esta implementación, necesitas las que definen, y generan, los objetos con los listados correspondientes a las categorías Prontus (Sección, Tema y Subtema) existentes en el sitio.
/[nombre del sitio]/plantillas/extra/mapa/pags/tax_secc.js
var SECC ={
%%loop_seccion%% '%%_seccion1%%':'%%_nom%%',
%%/loop_seccion%% '0': ''
}
/[nombre del sitio]/plantillas/extra/mapa/pags/tax_tem.js
var TEMA ={
'0':{%%loop_seccion%% '0':''},
'%%_seccion1%%':{
%%/loop_seccion%%
%%loop_tema%% '%%_tema1%%': '%%_nom%%',
%%/loop_tema%%
'0':{ }
}
}
/[nombre del sitio]/plantillas/extra/mapa/pags/tax_subtem.js
var SUBTEMA ={
'0':{%%loop_seccion%%%%/loop_seccion%%%%loop_tema%% '0':''},
'%%_tema1%%':{
%%/loop_tema%%
%%loop_subtema%% '%%_subtema1%%': '%%_nom%%',
%%/loop_subtema%% '0':{ }
}
}
Además de los listados se necesita una clase que controle los eventos en el formulario. Para esto, puedes implementar un script como el siguiente, que llamaremos >/[nombre del sitio]/js-local/Taxonomia.class.js
:
var Taxonomia = {
load_seccion: function() {
Taxonomia.limpiaTaxonomia('SECCION1');
Taxonomia.limpiaTaxonomia('TEMA1');
Taxonomia.limpiaTaxonomia('SUBTEMA1');
var objcombo = document.getElementById('SECCION1');
var j=0;
objcombo.options[j++] = new Option('---', '');
for (var i in SECC){
if (i != 0 && SECC[i] != null && SECC[i] != undefined) {
objcombo.options[j++] = new Option(SECC[i], i);
};
}
return false;
},
load_tema: function() {
Taxonomia.limpiaTaxonomia('TEMA1');
Taxonomia.limpiaTaxonomia('SUBTEMA1');
var seccion = document.getElementById('SECCION1').value;
var objcombo = document.getElementById('TEMA1');
var j=0;
objcombo.options[j++] = new Option('---', '');
for (var i in TEMA[seccion]){
if (i != 0 && TEMA[seccion][i] != null && TEMA[seccion][i] != undefined) {
objcombo.options[j++] = new Option(TEMA[seccion][i], i);
};
}
return false;
},
load_subtema: function() {
Taxonomia.limpiaTaxonomia('SUBTEMA1');
var tema = document.getElementById('TEMA1').value;
var objcombo = document.getElementById('SUBTEMA1');
var j=0;
objcombo.options[j++] = new Option('---', '');
for (var i in SUBTEMA[tema]){
if (i != 0 && SUBTEMA[tema][i] != null && SUBTEMA[tema][i] != undefined) {
objcombo.options[j++] = new Option(SUBTEMA[tema][i], i);
};
}
return false;
},
rellena_nombres_tax: function() {
if(document.getElementById('SECCION1') && document.getElementById('NOM_SECCION1')) {
var item = document.getElementById('SECCION1');
var valor = item.options[item.selectedIndex].text;
document.getElementById('NOM_SECCION1').value = (valor == '---')? '':valor;
};
if(document.getElementById('TEMA1') && document.getElementById('NOM_TEMA1')) {
var item = document.getElementById('TEMA1');
var valor = item.options[item.selectedIndex].text;
document.getElementById('NOM_TEMA1').value = (valor == '---')? '':valor;
};
if(document.getElementById('SUBTEMA1') && document.getElementById('NOM_SUBTEMA1')) {
var item = document.getElementById('SUBTEMA1');
var valor = item.options[item.selectedIndex].text;
document.getElementById('NOM_SUBTEMA1').value = (valor == '---')? '':valor;
};
},
init: function() {
Taxonomia.load_seccion();
var valor = document.getElementById('NOM_SECCION1').value;
if (valor != '') {
Taxonomia._selecciona_default('SECCION1',valor);
Taxonomia.load_tema();
valor = document.getElementById('NOM_TEMA1').value;
if (valor != '') {
Taxonomia._selecciona_default('TEMA1',valor);
Taxonomia.load_subtema();
valor = document.getElementById('NOM_SUBTEMA1').value;
if (valor != '') {
Taxonomia._selecciona_default('SUBTEMA1',valor);
}
}
}
},
_selecciona_default: function(id, valor) {
var opts = document.getElementById(id).options;
for(var i = 0; i < opts.length; i++) {
if(opts[i].innerText == valor) {
opts.selectedIndex = i;
return;
}
}
},
limpiaTaxonomia: function(combo) {
var objcombo = document.getElementById(combo);
var len = objcombo.options.length;
for(var i = (len-1); i >= 0 ; i--) {
objcombo.options[i] = null;
};
objcombo.options[0] = new Option('', '');
}
};
Para el filtro por fecha se utiliza el plugin datepicker, éste permite seleccionar con el mouse una fecha directamente desde un calendario.
/[nombre del sitio]/js-local/jquery/plugins/datepicker/js/i18n/jquery.ui.datepicker-es.js
Para iniciar el plugin del calendario se debe agregar el siguiente código:
<script type="text/javascript">
$(document).ready(function(){
$('.fecha').datepicker({
dateFormat: 'dd/mm/yy',
buttonImage: '/#prontus_id#/js-local/jquery/plugins/datepicker/imag/calendar.gif',
buttonImageOnly: true,
showOn: 'both'
});
Taxonomia.init();
});
</script>
Artículos Relacionados
Conceptos Básicos
¿Qué es Prontus?
Estructura de directorios
Glosario
Navegadores soportados
Tutoriales
Instalación de Prontus CMS
Implementar un nuevo sitio en Prontus
Cómo crear un FID
Cómo crear una plantilla de artículo
Cómo crear una plantilla de portada
Cómo crear plantillas de formulario
Cómo implementar un formulario
Cómo implementar un buscador
Cómo implementar un buscador Elasticsearch
Cómo crear una plantilla de taxonomía
Cómo crear plantillas de tags
Cómo crear una plantilla de listado
Cómo crear una plantilla de tags jerárquicos
Implementar carga de videos en Prontus
Integración de Redes Sociales
Instalación y Configuración
Requerimientos
Configuración del servidor
Base de datos
Asegurar la plataforma
Instalación con Wizard Prontus
Ajustes post-instalación
Archivos de configuración de Prontus
Friendly URLs
Friendly URLs para imágenes
SSI en Prontus
Logs de Eventos
Ejecutar procesos periódicamente con cron
Debugging
Plantillas
Plantillas de FID
Plantillas de artículo
Plantillas de portada
Plantillas de taxonomía
Plantillas de artículos relacionados
Plantillas de tags
Plantillas de listado
Plantillas de tags jerárquicos
Plantillas de mapa de taxonomía
Plantillas de mapa de tags
Marcas
Tipos de marcas
Diccionario de marcas
Marcas para texto
Marcas de lógica
Marcas de despliegue
Marca Menú y Panel
Parsing de marcas en formularios Prontus
Funcionalidades
Funcionalidades SEO en Prontus CMS
Multivistas
Galería de Imágenes
Buscador Multivista
Buscador
Buscador Elasticsearch
Calendarios
Imprimir artículos
Posting de contenidos
Plugins
Post-procesos
Prontus functions
Implementar copias de seguridad automáticas con Dropbox
Implementar múltiples ediciones
Regeneración masiva de artículos via línea de comandos