Parece que su pregunta es más sobre la fusión de índices que sobre la indexación.
El proceso de indexación es bastante simple si ignora los detalles de bajo nivel. Lucene forma lo que se llama "índice invertido" de los documentos. Así que si el documento con el texto "Ser o no ser" y el id = 1 entra, índice inverso sería el resultado:
[to] → 1
[be] → 1
[or] → 1
[not] → 1
Ésta es básicamente - el índice de la palabra a la lista de documentos que contiene la palabra dada. Cada línea de este índice (palabra) se llama lista de publicación. Este índice persiste en el almacenamiento a largo plazo en ese momento.
En realidad, por supuesto las cosas son más complicadas:
- Lucene puede omitir algunas palabras basadas en el Analizador particular, dada;
- palabras pueden preprocesarse utilizando algoritmo de tallo para reducir la flexia del idioma;
- lista de publicación puede contener no solo los identificadores de los documentos, sino también el desplazamiento de la palabra dada dentro del documento (potencialmente varias instancias) y alguna otra información adicional.
Hay muchas más complicaciones que no son tan importantes para la comprensión básica.
Es importante entender, sin embargo, que el índice de Lucene es anexar solo. En algún momento, la aplicación decide comprometer (publicar) todos los cambios en el índice. Lucene finaliza todas las operaciones de servicio con índice y lo cierra, por lo que está disponible para realizar búsquedas. Después de comprometer el índice básicamente inmutable. Este índice (o parte del índice) se llama segmento. Cuando Lucene ejecuta la búsqueda de una consulta, busca en todos los segmentos disponibles.
Entonces surge la pregunta: ¿cómo podemos cambiar el documento ya indexado?
Los documentos nuevos o las versiones nuevas de los documentos ya indexados se indexan en segmentos nuevos y las versiones anteriores se anulan en los segmentos anteriores utilizando la llamada lista kill. La lista de asesinatos es la única parte del índice comprometido que puede cambiar. Como puede imaginarse, la eficiencia del índice disminuye con el tiempo, porque los índices antiguos pueden contener documentos eliminados en su mayoría.
Aquí es donde entra en juego la fusión. Fusionar: es el proceso de combinar varios índices para hacer un índice más eficiente en general. Lo que básicamente sucede durante la fusión es copiar documentos en vivo en el segmento nuevo y eliminar segmentos antiguos por completo.
Usando este proceso simple, Lucene puede mantener el índice en buena forma en términos de rendimiento de búsqueda.
Espero que ayude.
La mayoría de las respuestas aquí son correctas que primero Lucene * crea * índice invertido, pero que no explica el punto clave de cómo ese índice de términos posteriormente obtiene * búsqueda d * (y es, creo, lo que el OP realmente solicitó). A continuación, encontrará una nueva respuesta a esta pregunta bastante antigua que, con suerte, ofrece una mejor idea. – fnl
Actualicé mi respuesta una vez más, porque las respuestas actuales (¡incluida la mía!) No son realmente satisfactorias para responder a las dos preguntas principales del OP (¿cómo proporciona Lucene una indexación optimizada y por qué algoritmo particular - una lista saliente, no un árbol B? , Por cierto). Espero que mis actualizaciones finales ahora respondan correctamente la pregunta real! – fnl