ConocimieConocimiento en Linea Lucene Tutorialnto en Linea Lucene Tutorial
ConocimieConocimiento en Linea Lucene Tutorialnto en Linea Lucene Tutorial
ConocimieConocimiento en Linea Lucene Tutorialnto en Linea Lucene Tutorial
Conocimiento en Lnea
Lucene: Tutorial
Version 0.2
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
Revision Histrica
Date
06/03/2009
Confidencial
Version
0.2
Description
Creacin del documento. Incluye:
Introduccin, Informacin general y
operaciones bsicas con el IndexWriter
e IndexSearcher.
UPC, 2015
Author
Ivn Alonso Fernndez Cavero
Page 2 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
ndice
1.
Introduccin
1.1
Propsito
1.2
Alcance
1.3
Definiciones, Acrnimos, and Abreviaciones
1.4
Resumen
2.
Informacin General
2.1
Vista de Lucene
2.2
Descarga
2.3
Documentacin e Informacin
3.
4.
5.
Parsers
Confidencial
UPC, 2015
Page 3 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
Lucene: Tutorial
1.
Introduccin
Lucene es un motor de bsqueda de alto rendimiento escrito en Java y es Open Source. Es escalable y logra
su alto rendimiento mediante el uso de ndices. Tiene algoritmos de bsqueda eficientes. Estos algoritmos
permiten rankear los resultados (haciendo posible obtener primero los mejores resultados); hacer phrase
queries, wildcard queries, proximity queries, range queries y ms; bsquedas por campos; ordenar por
cualquier campo; y bsquedas a mltiples ndices unindolos.
1.1
Propsito
El propsito de este documento es documentar todos los conocimientos obtenidos con Lucene durante el
desarrollo del Proyecto Conocimiento en Lnea.
1.2
Alcance
El presente documento tiene como alcance explicar solo las funcionalidades utilizadas con Lucene para el
desarrollo del Proyecto Conocimiento en Lnea.
1.3
1.4
Resumen
Primero se dar a conocer una vista general de Lucene y su arquitectura. Luego se explicara las operaciones
de indexamiento y bsqueda mediante el uso del IndexWriter e IndexSearcher. Finalmente, se explicara el
uso de los parsers.
2.
Informacin General
2.1
Vista de Lucene
Nota: los parsers no son parte de Lucene. Uno mismo debe convertir los documentos a texto.
Confidencial
UPC, 2015
Page 4 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
2.2
Descarga
Puede descargar la ltima versin de Lucene aqu: http://www.apache.org/dyn/closer.cgi/lucene/java/
2.3
Documentacin e Informacin
Documentacin: http://lucene.apache.org/java/2_4_0/gettingstarted.html
JavaDocs: http://lucene.apache.org/java/2_4_0/api/index.html
Wiki: http://wiki.apache.org/lucene-java
Confidencial
UPC, 2015
Page 5 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
3.
3.1
Inicializar el IndexWriter
Esta clase permite realizar todas las operaciones que manipula el ndice. Primero se debe crear un objeto de
esta clase pasndole como parmetro la ruta del ndice, el analizador (Explicado en la seccin 3.2) a usar.
Analyzer analyzer = new SpanishAnalyzer();
String indexPath = C://lucene//indexDir
IndexWriter writer = new IndexWriter(indexPath, analyzer);
3.2
Clase Analyzer
Esta clase sirve como filtro cuando se indexa el texto. Por ejemplo, en este proyecto se uso una clase
llamada SpanishAnalyzer que extiende a Analyzer y usa filtros para omitir palabras que no queremos
indexar como estas, como, ir, a, b c, etc. Estas palabras no sirven para realizar una bsqueda.
As mismo, existen otros filtros que se le pueden aadir como omitir caracteres especiales o convertir todo
a minsculas. Lista de analyzers: BrazilianAnalyzer, ChineseAnalyzer, CJKAnalyzer, CzechAnalyzer,
DutchAnalyzer, FrenchAnalyzer, GermanAnalyzer, GreekAnalyzer, KeywordAnalyzer, PatternAnalyzer,
PerFieldAnalyzerWrapper, QueryAutoStopWordAnalyzer, RussianAnalyzer, ShingleAnalyzerWrapper,
SimpleAnalyzer, SnowballAnalyzer, StandardAnalyzer, StopAnalyzer, ThaiAnalyzer y
WhitespaceAnalyzer.
3.3
Confidencial
UPC, 2015
Page 6 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
y la revisin a la que pertenece el documento. Los parmetros para crear un Field son: El nombre del
campo, el valor del campo, un Field.Store que pregunta si se va a ser almacenado el campo, y finalmente
Field.Index que puede tener los siguientes valores:
ANALYZED: Pasa por el filtro, el analyzer.
NO: no ser indexado el contenido.
NOT_ANALYZED: No pasa por el filtro, el analyzer.
3.4
Escribir en el ndice
Escribir en el ndice es sencillo. Una vez que se a creado el documento se llama al mtodo
addDocument()
Document = createDocument(File.txt, C://lucene//dataDir//File.txt, Tequila_Burp,
06/03/2009, 55, Este es un archive de texto de prueba);
writer.addDocument(doc);
writer.optimize();
writer.close();
Siempre que se termine de usar el InderWriter se optimiza y cierra.
3.5
4.
4.1
Confidencial
UPC, 2015
Page 7 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
4.2
Version:
0.2
Date: 06/03/2009
4.3
Confidencial
UPC, 2015
Page 8 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
Ejemplo completo:
public static Object[] getIndex() throws Exception {
String rangeDate = "[20000101000000 TO 20900101000000]";
IndexSearcher searcher = null;
Object[] docsID = null;
try {
ConfigSingleton jp = ConfigSingleton.getInstance();
searcher = new IndexSearcher(jp.getIndexDir());
Analyzer analyzer = SpanishAnalyzer.getInstance();
QueryParser parser = new QueryParser("Fecha", analyzer);
Query query = parser.parse(rangeDate);
final List<Integer> tempHits = new ArrayList<Integer>();
searcher.search(query, new HitCollector() {
@Override
public void collect(int doc, float score) {
tempHits.add(doc);
}
});
List<Integer> hits = new ArrayList<Integer>();
for (int i = tempHits.size() - 1; i >= 0 ; i--) {
hits.add(tempHits.get(i));
}
docsID = new Integer[searcher.maxDoc()];
docsID = hits.toArray();
} catch (Exception e) {
throw e;
}
return docsID;
}
En este ejemplo se quiere obtener todos los documentos del ndice. Como artificio se busca por un rango de
fecha absurdo y el searcher devuelve todos los documentos en orden.
4.4
Confidencial
UPC, 2015
Page 9 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
5.
Parsers
Un parser se encarga de extraer el contenido de un archivo como PDF, Word, PPTs, etc y convertirlo a texto
puro. Si bien es cierto que los parsers no vienen dentro del paquete de lucene, se pueden conseguir parsers
en otras libreras.
A continuacin se muestra un ejemplo de parser usado en este proyecto:
Confidencial
UPC, 2015
Page 10 of 11
Conocimiento en Lnea
Lucene: Tutorial
Conocimiento-en-Linea - Lucene: Tutorial
Version:
0.2
Date: 06/03/2009
PDF:
package conocimientoenlinea.parse;
import java.io.File;
import java.io.FileInputStream;
import java.io.StringWriter;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.util.PDFTextStripper;
public class PDF {
public static String Parse(File archivo) throws Exception {
PDDocument pdfDocument = null;
String contents = null;
try {
pdfDocument = PDDocument.load(new FileInputStream(archivo));
if (pdfDocument.isEncrypted()) {
pdfDocument.decrypt("");
}
StringWriter writer = new StringWriter();
PDFTextStripper stripper = new PDFTextStripper();
stripper.writeText(pdfDocument, writer);
contents = writer.getBuffer().toString();
} catch(Exception e) {
throw new Exception();
} finally {
if (pdfDocument != null) {
pdfDocument.close();
}
}
return contents;
}
}
Confidencial
UPC, 2015
Page 11 of 11