Una de las herramientas imprescindibles hoy en día en cualquier web es un buscador sobre los contenidos de la propia web, algo así como un
Google pero restringido a los contenidos de nuestra propia web.

Para ello vamos a necesitar varias cosas:
- Un gestor de contenidos de nuestra web, es decir, que el contenido de la web se extraiga de tablas. Si por ejemplo nuestra web es el catálogo de productos de nuestra empresa, lo primero es tener en bd la estructura de fichas de productos.
- Una variable global accesible web, llamémosla $TXT-BUSQUEDA$, que contendrá el texto a buscar en los contenidos.
- Un formulario web para que el usuario introduzca la cadena a buscar.
- Uno o varios índices sobre la tabla de productos para realizar la búsqueda por trozos de palabras, todas las palabras o por alguna de las palabras.
- La búsqueda en sí.
- Un proceso accesible web que reciba la variable global $TXT-BUSQUEDA$, lance la búsqueda y muestre el html de los resultados.
Vayamos por partes.
El gestor de contenidos de nuestra web lo vamos a reducir a una tabla
PRODUCTOS. En esta tabla vamos a tener los siguientes campos:
Nombre,
Referencia y
Descripción, por ejemplo, que son los campos sobre los que haremos que actúe el buscador.
Nombre es el campo Nombre que nos crea Velneo por defecto al crear una tabla nueva junto con sus índices Nombre, Palabras y Trozos. Podemos observar cómo están configurados estos índices para tomarlos como referencia a la hora de montar nuestros propios índices.
Referencia es un campo donde introduciremos un código formado tanto por letras como por números, es decir, la referencia del artículo.
Descripción será un campo alfabético de 500 caracteres de longitud, por ejemplo, donde introduciremos una descripción mucho más amplia sobre el producto en cuestión.
Como vamos a querer buscar sobre los tres campos anteriores a la vez, necesitamos un campo que aglutine el contenido de los tres. Así podemos crear un campo
TXT-BUSQUEDA Alfa 40 de longitud 500, lo que nos da un total de 750 caracteres, con
contenido inicial la concatenación de los tres campos anteriores en cuestión;
"" + %NOMBRE% + " " + %REFERENCIA% + " " + %DESCRIPCION%Ahora necesitamos, por hacerlo fácil, dos índices: uno para buscar
por palabras y otro para buscar
por trozos de palabras, es decir, por aproximación alfabética ternaria (pones un mínimo de tres letras y la búsqueda ya responde).
Para ello crearemos un nuevo índice
PALABRAS-TEXTO-BUSQUEDA, por ejemplo, que será del tipo Palabras sobre el campo
TXT-BUSQUEDA.
El segundo índice será
TROZOS-TEXTO-BUSQUEDA, del tipo Aproximación alfabética ternaria sobre el mismo campo
TXT-BUSQUEDA.
Con esto ya tenemos la
estructura de
bd necesaria para poder realizar la búsqueda.
Veamos ahora la
búsqueda.

Crearemos un nuevo objeto búsqueda que llamaremos
BUSCADOR. Esta búsqueda la vamos a configurar en principio para realizar una búsqueda por palabras, así incluiremos en la misma los
índices CODIGO con Modo de búsqueda
Todo el fichero, y como segundo índice el
PALABRAS-TEXTO-BUSQUEDA en Modo
Mezcla Cruzar.
Si como segundo índice de la búsqueda incluimos
TROZOS-TEXTO-BUSQUEDA en Modo
Mezcla Cruzar habremos configurado la búsqueda para que responda por ternas de caracteres.

En cualquiera de los dos casos, debemos indicar como
contenido inicial del segundo índice en la búsqueda el contenido de la variable global
$TXT-BUSQUEDA$.
Hago aquí un inciso para comentar las dos posibilidades que tenemos al utilizar el índice por Palabras en la búsqueda.
Si os fijáis a la hora de especificar el segundo índice de la búsqueda tenemos dos posibilidades: Todas las palabras o Alguna de las palabras. Qué quiere decir esto?
Si usamos Todas las palabras, estaremos haciendo una búsqueda tipo "Y"; que aparezca la palabra1 y la palabra2 y la palabra3.

Si en cambio usamos Alguna de las palabras, estaremos haciendo una búsqueda tipo "O"; que aparezca la palabra1 o la palabra2 o la palabra3.

Aclarado esto sigamos con nuestro buscador.
Ahora lo que vamos a necesitar es un
formulario web con un campo donde el usuario introduzca la
cadena de texto a buscar, y de valor a la variable global
$TXT-BUSQUEDA$, y un botón BUSCAR.
Eso es algo tan simple como:
<form action="
PROCESA-BUSQUEDA.PRO" method="post" name="busqueda" id="busqueda">
<input name="
TXT-BUSQUEDA" id="TXT-BUSQUEDA" size="25" maxlength="150" type="text">
<input value="BUSCAR" type="submit">
<form>

Hay que fijarse en que el
campo del formulario donde el usuario escribe la cadena a buscar
se llama igual que la
variable global $TXT-BUSQUEDA$ que va a contener esa cadena.
Otro detalle es que el botón
submit del formulario
no tiene nombre.
El
action del formulario es el proceso
PROCESA-BUSQUEDA.PRO
Este es el proceso accesible web que recibirá dentro de la variable global
$TXT-BUSQUEDA$ la cadena a buscar. Dentro del proceso lo único que hemos de hacer es lanzar la búsqueda
BUSCADOR, que directamente ya nos devuelve una lista de la tabla
PRODUCTOS, donde se habrá encontrado la cadena
$TXT-BUSQUEDA$ en alguno de los campos
%NOMBRE%,
%REFERENCIA% o
%DESCRIPCION%.
El cómo mostrar los resultados de la búsqueda ya es cuestión de un
componente html perteneciente a la tabla
PRODUCTOS, que haciendo uso de las repeticiones <AVPR> muestre la lista de productos encontrados, algo como
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Resultado búsqueda</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<p>Resultado de la búsqueda</p>
<p>Se han encontrado
#AVPn Productos con
#AVP'cadena-a-buscar'</p>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>NOMBRE</td>
<td>REFERENCIA</td>
<td>DESCRIPCION</td>
</tr>
<AVPR><tr>
<td>
#AVP%NOMBRE%</td>
<td>
#AVP%REFERENCIA%</td>
<td>
#AVP%DESCRIPCION%</td>
</tr>
</AVPR></table>
</body>
</html>
En este ejemplo hemos visto cómo montar un buscador por palabras lo más sencillo posible.
Como ya hemos adelantado antes, esto se podría complicar más incluyendo campos en el formulario para que el usuario pudiese configurar la búsqueda para que actuase por Trozos de palabras, por Palabras y en modo
"Y" u
"O", habiendo incluido ambos índices en la búsqueda y condicionandolos en consecuencia, pero esto ya lo veremos otro día.
Life is soft!