Lucene, desarrollado por Akamai EdgeComputing se basa en Jakarta Lucene, una aplicación de búsqueda de código abierto creada por Apache Software Foundation. Aprovecha el modelo informático distribuido bajo demanda de EdgeComputing para ejecutar el software completamente en la infraestructura gestionada por Akamai, evitando más gastos de hardware para la empresa.

La Aplicación de Búsqueda Lucene

Jakarta Lucene es una biblioteca con motor de búsqueda de textos con muchas funciones y de alto rendimiento, escrita completamente en Java. El motor utiliza algoritmos de búsqueda potentes, precisos y eficientes. (http://jakarta.apache.org/lucene). Lucene incluye la siguiente funcionalidad:

  • Proporciona la capacidad de buscar en muchos idiomas
  • Indexa cualquier archivo de texto, tal como HTML, o cualquier archivo que se pueda convertir en texto
  • Clasifica la búsqueda de manera que se muestren los mejores resultados primero
  • Realiza búsqueda booleana y por frase
  • Permite búsqueda por campo (ej., las búsquedas se pueden enviar por títulos, autores, contenidos, etc.)
  • Permite búsquedas en un gran rango de fechas para que los usuarios puedan tener acceso a información sujeta a plazos determinados

La creación de un archivo índice es un paso necesario en la implementación de una aplicación de búsqueda con Lucene. Un índice es una base de datos especial que contiene una versión compilada del contenido del sitio Web. Si bien API Lucene de indexación automatiza la creación del índice, el contenido que se incluirá en el índice debe ser en formato de texto. Para cada tipo de documento que se incluirá en un índice, será necesario que el cliente utilice un analizador o extractor. Lucene incluye un HTML parser o analizador de muestra que recibe un URL o la ubicación de un archivo en un disco duro, analiza el archivo, extrae el texto de las etiquetas HTML, y crea un Java string object que pasa al API Lucene de indexación.

Para comprender mejor cómo funciona la indexación, considere el ejemplo de Akamai y su utilización de Lucene para la búsqueda en www.akamai.com. El primer paso en el proceso de indexación es identificar el contenido que se debe indexar. Como se muestra en la Imagen 1 (abajo), para cada contenido que se indexa, Lucene crea un "Objeto del documento", que es una colección de pares nombre/valor denominados "campos". Por ejemplo, un campo puede ser Título, entonces el par nombre/valor sería "Título" - "Página Principal de Akamai". Luego a cada campo se le asigna un "campo objeto", que determina si el texto relacionado con el campo se debe indexar, almacenar y/o convertir en token.


Gráfico 1: Cómo crear un Índice con Lucene



El "campo objeto" determina cómo Lucene debe utilizar la información en el campo:
  • Indexado: Si un campo está indexado, significa que se puede buscar. Para la implementación de Lucene en Akamai.com, el campo "Título" fue indexado para que una consulta pueda comprobar la búsqueda ingresada por el usuario en el campo "Título". Lucene le permite definir qué campos indexados se buscan de manera predeterminada y cuáles se reservan para búsquedas más restringidas.
  • Almacenado: Si un campo está almacenado en el índice, significa que el contenido se puede mostrar en los resultados de búsqueda. El resumen relacionado con una página frecuentemente se almacena en el índice, como en el caso de la implementación de Akamai.com. Esto permite que se incluya una corta descripción con el título en la página de resultados de búsqueda.
  • Convertido en token: Si un campo es convertido en tokens, significa que pasó por un Analizador que convierte el contenido en una secuencia de tokens. Un token es la unidad básica de indexación y representa una única palabra que se indexará. Durante el proceso de tokenización, el Analizador extrae el texto que se debe indexar mientras se aplica cualquier lógica de transformación (por ejemplo, quitar palabras vacías como "un" o "la", realizar stemming, convertir todo el texto en letras minúsculas para búsquedas donde no se diferencia entre mayúsculas y minúsculas, etc). Este proceso reduce el tamaño del índice ya que el texto relacionado con un campo se reduce hasta que quedan sólo sus elementos principales. Sólo tiene sentido convertir en tokens un campo si también será indexado. Para Akamai.com, el "Título" se convierte en tokens para que Lucene no tenga que buscar palabras tales como "un" o "la".

El paso final del proceso de indexación es utilizar el objeto Lucene IndexWriter para crear el índice. El objeto IndexWriter utiliza un Analizador para preprocesar el texto ingresado. Observe que el Analizador se utiliza para crear y buscar el índice. Como el texto de búsqueda se debe procesar de la misma manera en que se procesó el texto indexado, es fundamental utilizar el mismo Analizador tanto para indexar como para buscar. Akamai.com utiliza el Analizador Estándar de Lucene.

 

Cómo Funciona el Servicio Gestionado
Ya que Lucene está todo escrito en Java, se puede implementar y ejecutar completamente en EdgePlatform de Akamai mediante la utilización del servicio EdgeComputing de Akamai. En este modelo, el cliente utiliza el índice de búsqueda y el resto de la aplicación de búsqueda (generalmente incluyendo una página de búsqueda y una página de resultados de búsqueda) en un archivo WAR que se implementará y ejecutará desde el conjunto de servidores de aplicaciones J2EE que Akamai tiene distribuidos en todo el mundo.

Cómo Manejar las Peticiones del usuario
Lucene, implementado en la EdgePlatform de Akamai, se puede ejecutar completamente como un servicio bajo demanda sin enviar solicitudes al servidor de origen relacionadas con el tiempo de ejecución. Por lo tanto, los usuarios pueden seguir haciendo búsquedas utilizando Lucene, incluso cuando el servidor de origen se cae. Gráfico 2 (abajo) muestra un diagrama de las solicitudes del usuario a la búsqueda que se realiza en Akamai.com. Al igual que con cualquier aplicación de búsqueda implementada utilizando Lucene desarrollado por EdgeComputing de Akamai, la aplicación se ejecuta completamente en la EdgePlatform, sin reenviar solicitudes al servidor de origen.


Gráfico 2: Cómo Manejar las Peticiones del Usuario

Tenga en cuenta que en el caso de Akamai.com, se utilizan dos páginas de resultados diferentes, dependiendo de si el usuario desea buscar en todo el sitio (Search_Results.jsp) o limita la consulta a notas de prensa únicamente (PR_search_results.jsp).

Implementación y Gestión Simples
Al igual que con cualquier otra Aplicación de EdgeComputing, los clientes pueden tener información detallada y control sobre Lucene desarrollado por EdgeComputing de Akamai. La opción de implementar con tan sólo hacer clic garantiza que los clientes pueden modificar y lanzar nuevamente la aplicación cuando sea necesario. Observe el Gráfico 3 (abajo) para conocer un diagrama del modelo de implementación mediante el cual un cliente puede lanzar una aplicación de búsqueda en EdgePlatform.


Gráfico 3: Implementación de la Aplicación de Búsqueda Akamai

Modificaciones a Lucene 1.3
Para que Lucene ejecute EdgeComputing, era necesario que Akamai hiciera unas mínimas modificaciones de códigos a Lucene 1.3. Es posible que no sea necesario hacer estas modificaciones en versiones futuras de EdgeComputing si se autorizan ciertos permisos pendientes para EdgeComputing. Mientras tanto, Akamai proporcionará a los clientes nuestra versión modificada de Lucene.

  • Habilitó manualmente el indicador booleando deshabilitado en el archivo org.apache.lucene.store.FSDirectory.java. Actualmente, el entorno de prueba de EdgeComputing no permite instalar propiedades del sistema.

    private static final boolean DISABLE_LOCKS = true;
  • Incorporó la creación de archivo de bloqueo (lock) en el archivo org.apache.lucene.store.FSDirectory.java in the method public final Lock makeLock(nombre en cadena). Actualmente, el entorno de prueba de EdgeComputing no permite incorporar texto en el sistema de archivos.

    //final File lockFile = new File(System.getProperty
    ("java.io.tmpdir"),
    // buf.toString());
    final File lockFile = null;

    La función de bloqueo del índice no es necesaria en Edge porque sólo un proceso (el servidor de aplicaciones Edge) necesitará acceder al índice, lo que difiere de un entorno de origen donde un proceso puede leer del índice, y otro proceso puede estar escribiendo en el índice para actualizarlo.
  • Al abrir el índice en el archivo WAR, se debe utilizar ServletContext para obtener la ruta que se dirige hacia el directorio de índices en el archivo WAR. A continuación se muestra un ejemplo del código:

    IndexSearcher searcher = null;
    //the searcher used to open/search the index
    try {
    ServletContext sc = getServletContext();
    searcher = new indexSearcher( IndexReader.open(sc.getRealPath
    ("index")));
    } catch (Exception e)
    { ... }
Conectar

Síganos: Facebook Twitter LinkedIn YouTube SlideShare Pinterest Blogger RSS Google+

Informe sobre el Estado de Internet MÁS INFORMACIÓN

Condiciones de Internet en Tiempo Real CONSEGUIR APP