Foros del Web » Programación para mayores de 30 ;) » Java »

Problema al buscar con Lucene

Estas en el tema de Problema al buscar con Lucene en el foro de Java en Foros del Web. Buenas Tardes a todos !! :D Estoy haciendo un buscador con el motor de Lucene para buscar en páginas web, pero no consigo crear el ...
  #1 (permalink)  
Antiguo 05/05/2010, 10:52
 
Fecha de Ingreso: abril-2010
Mensajes: 5
Antigüedad: 14 años
Puntos: 1
Problema al buscar con Lucene

Buenas Tardes a todos !! :D

Estoy haciendo un buscador con el motor de Lucene para buscar en páginas web, pero no consigo crear el filtro para quitar las etiquetas del lenguaje de html (como por ejemplo <body>)
En el indexador he usado la clase HTMLDocument de la libreria de Lucene.demos de esta forma:
Código:
private static void indexFile(IndexWriter writer, File f)
    throws IOException {

    if (f.isHidden() || !f.exists() || !f.canRead()) {
      return;
    }
    //muestra un mensaje en la salida estandar del archivo que va a indexar
    System.out.println("Indexing " + f.getCanonicalPath());
  
    //
    //HTMLDocument
   
    Document doc = null;
    try {
        doc = HTMLDocument.Document(f);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //indexa el archivo
    doc.add(new Field("contents", new FileReader(f)));//contenido del archivo
    doc.add(new Field("filename", f.getCanonicalPath(), Field.Store.YES, Field.Index.TOKENIZED));//UN_TOKENIZED //nombre del archivo
    //doc.add(new Field("filename", new StringReader(f.getCanonicalPath())));
    writer.addDocument(doc);
  }
Esto me deberia filtrar los documentos a la hora de indexarlos pero no lo consigo.
Sabeis si me faltaria algo mas?

Muchas gracias.
  #2 (permalink)  
Antiguo 06/05/2010, 08:42
 
Fecha de Ingreso: abril-2010
Mensajes: 5
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema al buscar con Lucene

Bueno, al final lo solucione.
Dejo la respuesta por si alguien le sirve.

Lo que fallaba es que añadía dos veces los campos, ya que la clase HTMLDocument los añade por si solos, por lo que las dos lineas del final sobran.

El código correcto es este:
Código:
private static void indexFile(IndexWriter writer, File f)
    throws IOException {

    if (f.isHidden() || !f.exists() || !f.canRead()) {
      return;
    }
    //muestra un mensaje en la salida estandar del archivo que va a indexar
    System.out.println("Indexing " + f.getCanonicalPath());
  
    //
    //HTMLDocument
   
    Document doc = null;
    try {
        doc = HTMLDocument.Document(f);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //indexa el archivo
    writer.addDocument(doc);
  }

Peor ahora me ha surgido otro fallo. A la hora de buscar necesito buscar de dos formas diferentes, por el contenido y por la url.
Por contenido me va perfecto, pero por url, a la hora de entrar en el for me salta la excepcion. El código que tengo es este:

Código:
public static String search(File indexDir, String q, int opcion) throws Exception {
         String html = "";
    try{
        Directory fsDir = FSDirectory.getDirectory(indexDir, false); //declara un directorio
        IndexSearcher is = new IndexSearcher(fsDir); //crea un buscador
        QueryParser qp; 
        if (opcion == 0) //buscar por contenido
        {
             qp = new QueryParser("contents", new StandardAnalyzer()); 
         }
         else //buscar por la url
        {
             qp = new QueryParser("path", new StandardAnalyzer()); 
         }
         Query query = qp.parse(q);
         long start = new Date().getTime();
         Hits hits = is.search(query); // ejecuta la operacion search de lo que queremos buscar
         long end = new Date().getTime();

         //muestra por la salida estandar cuantos a encontrado y en el tiempo que ha tardado
         html = html + "Found " + hits.length() +
         " document(s) (in " + (end - start) +
         " milliseconds) that matched query '" +
          q + "':";
          html = html + "<ul>";
          for (int i = 0; i < hits.length(); i++) {
                  Document doc = hits.doc(i); //busca por cada archivo todas las veces que aparece.
                  html = html + "<li>" + doc.get("path") + "</li>";
          }
          html = html + "</ul>";

    } catch (Exception e) {
          html = html + "ha surgido un error al realizar la búsqueda :D";
    }
  }

Sabeis que podría estar poniendo mal?? (perdón por la retaila)

Muchas gracias por cualquier aportacion!!! :D

Etiquetas: htmldocument, lucene
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:26.