Estoy usando Lucene para indexar y buscar una pequeña cantidad de documentos grandes. Usando la demostración del sitio de Lucene he indexado los documentos y puedo buscarlos. Sin embargo, el resultado de la búsqueda no es particularmente útil ya que apunta al archivo del documento. Con documentos muy grandes, esto no es particularmente útil.¿Puede Lucene devolver varios resultados de búsqueda de un solo archivo indexado?
Me pregunto si Lucene puede indexar estos documentos muy grandes y crear una abstracción sobre ellos que proporcione resultados mucho más precisos.
Un ejemplo podría explicar mejor a qué me refiero. Considere un libro muy grande, como la Biblia. Un archivo contiene el texto completo de la Biblia, por lo que con la demostración, el resultado de buscar, por ejemplo, 'Damasco' apuntaría al archivo. Lo que me gustaría hacer es conservar el documento grande, pero las búsquedas arrojarán resultados que apunten a un Libro, Capítulo o incluso tan precisos como un Verso. Así que una búsqueda de 'Damasco' podría regresar (entre otros) Libro 23, Capítulo 7, Verso 8.
¿Es esto posible (y la mejor práctica en el uso de Lucene), o debería intentar seccionar el documento grande en muchos pequeños archivos para indexar?
Si hace alguna diferencia, estoy usando Java Lucene 2.9.0 y estoy indexando archivos HTML de aproximadamente 1MB - 4MB de tamaño. Que en términos de tamaño de archivo no es grande, pero es grande, en relación con una persona que lo lee.
No creo que haya explicado esto tan bien como pude. Aquí va para otro ejemplo.
Digamos que tomo mi archivo HTML grande, y (por los argumentos) el término de búsqueda 'Damasco' aparece 3 veces. Una vez en la línea 100 dentro de una etiqueta <div>
, en la línea 2000 dentro de una etiqueta <p>
, y en la línea 5000 dentro de una etiqueta <h1>
. ¿Es posible indexar con Lucene, de modo que habrá 3 resultados, y pueden señalar el elemento específico dentro del término?
No creo que desee proporcionar un resultado de documento diferente para el término. Entonces, si el término 'Damasco' apareció dos veces dentro de un <div>
específico, solo habría una coincidencia.
Parece de un comentario de Kragen que lo que me gustaría hacer es analizar el HTML cuando Lucene está pasando por la fase de indexación. Entonces puedo decidir el fragmento que quiero considerar como un documento de lo que lee el analizador. Entonces, si veo un div con cierta clase, puedo comenzar un nuevo documento de Lucene y se devolverá como un hit separado cuando se busque una palabra en el contenido de div.
¿Suena como lo que quiero hacer, y es posible?
Usando su ejemplo, ¿puedo conservar el libro B como un solo archivo, en mi caso un archivo HTML, y crear varios documentos Lucene desde ese único archivo, de modo que todos los resultados del único archivo puedan ser informados al usuario como discretos? ¿golpes? ¿Es posible indexar por capítulo cuando los capítulos están en el mismo * archivo *? Gracias por su respuesta :) – Grundlefleck
Puede indexar por capítulo al darle a Lucene solo un subconjunto de ese archivo cuando lo indexe; esto le dará 1 hit por cada capítulo coincidente. Si desea presentar al usuario un hit por coincidencia discreta, deberá buscar y encontrar todas las ocurrencias para cada documento coincidente: no hay forma de dividir un libro en suficientes documentos Lucene para que cada golpe garantizado corresponden a exactamente 1 ocurrencia de esa palabra/frase. – Justin