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