Lucene es una biblioteca de programas gratuita y de código abierto que cualquier persona puede utilizar y modificar y que está publicada por la Apache Software Foundation. Aunque en sus inicios Lucene estaba escrito completamente en Java, ahora también se puede usar en otros lenguajes de programación. Además Apache Solr y Elasticsearch sirven como poderosas extensiones que dotan a la función de búsqueda de más posibilidades.
Lucene permite la búsqueda de texto completo, es decir, se trata de un programa que busca en un conjunto de documentos de texto uno o más términos definidos por el usuario. De este hecho se deduce que Lucene no solo se utiliza en el contexto de la World Wide Web, si bien en este las funciones de búsqueda constituyen un elemento omnipresente. También se puede recurrir a Lucene en la búsqueda de archivos, bibliotecas o incluso en el ordenador de sobremesa y, además de aplicarse en documentos HTML, también trabaja con correo electrónico o incluso con archivos PDF.
El índice es un elemento decisivo en el proceso de búsqueda con Lucene y se considera el corazón del programa: en él se almacenan todos los términos de todos los documentos. Este tipo de índice invertido consiste principalmente en una tabla donde se guarda la posición de cada término. No obstante, para poder crear un índice, primero es necesaria la extracción de todos los términos de todos los documentos, proceso que cada usuario puede configurar individualmente. En la configuración, los desarrolladores establecen qué campos quieren incluir en el índice. Pero ¿a qué se refieren estos campos?
Los objetos con los que Lucene trabaja son documentos de cualquier tipo. Estos, desde el punto de vista del propio programa, contienen una serie de campos y estos incluyen, por ejemplo, el nombre del autor, el título del documento o el nombre del archivo. Cada campo tiene una designación y un valor únicos. Por ejemplo, el campo llamado title puede tener el valor "Manual de usuario de Apache Lucene". Al crear el índice, el usuario puede decidir qué metadatos quiere incluir.
En la indexación de los documentos, tiene lugar también lo que se conoce como tokenization. Para una máquina, un documento es ante todo un conjunto de información. Incluso cuando se pasa del nivel de los bits al de contenido legible para los humanos, un documento sigue estando compuesto por una serie de signos: letras, puntuación, espacios, etc.
A partir de estos datos, se crean con los segmentos de tokenization los términos (en su mayoría palabras) que finalmente van a poder buscarse. La forma más sencilla de ejecutar este tipo de tokenización es mediante el método de espacio en blanco: un término termina cuando se encuentra un espacio en blanco. Sin embargo, este método pierde su utilidad cuando un término está compuesto por varias palabras separadas, como puede ser el caso de "sin embargo". Para solucionarlo, se recurre a diccionarios adicionales que se pueden implementar también en el código Lucene.
Al analizar los datos de los que forma parte el proceso de tokenization, Lucene también ejecuta un proceso de normalización. Esto significa que los términos se convierten a una forma estandarizada, de modo que, por ejemplo, todas las mayúsculas se escriben en minúsculas. Además, Apache Lucene introduce una clasificación mediante una serie de algoritmos, por ejemplo, a través de la medida tf-idf. Como usuario, es probable que primero desees obtener los resultados más relevantes o recientes, lo que es posible gracias a los algoritmos del motor de búsqueda.
Para que los usuarios puedan encontrar lo que buscan, deben introducir un término o términos de búsqueda en una línea de texto. Dicho término recibe el nombre de query (consulta) en el contexto de ApacheLucene. Esta entrada no solo debe estar formada por una palabra o conjunto de ellas, sino que también puede contener comodines y operadores boleanos como AND, OR o + y -, entre otros. El denominado QueryParser, una clase dentro de la biblioteca del programa, traduce la entrada en una solicitud de búsqueda concreta para el motor de búsqueda. Los desarrolladores también pueden configurar el QueryParser de modo que se adapte exactamente a las necesidades del usuario.
Lo que caracterizó al lanzamiento de Lucene fue la indexación incremental. Antes de este programa solo era posible la indexación por bloques, que permitía indexar únicamente índices completos. No obstante, con la indexación incremental es posible actualizar un índice, de modo que se pueden añadir o eliminar entradas individuales.