lucene: jak wykonać przyrostowe indeksowanie i uniknąć „usuwania i ponawiania”
Mam folder (MY_FILES), który zawiera około 500 plików i każdego dnia pojawia się nowy plik i jest tam umieszczany. Rozmiar każdego pliku wynosi około 4 MB.
Właśnie opracowałem prostą „główną pustkę”, aby sprawdzić, czy mogę wyszukać konkretny symbol wieloznaczny w tych plikach. Działa dobrze.
Problem polega na tym, że usuwam stary katalog indeksowany i ponownie indeksuję. To zajmuje dużo czasu i oczywiście jest nieefektywne. To, czego szukam, to „indeksowanie przyrostowe”. Oznacza to, że jeśli indeks już istnieje - wystarczy dodać nowe pliki do indeksu.
Zastanawiałem się, czy Lucene ma jakiś mechanizm sprawdzający, czy „doc” został zaindeksowany przed próbą jego indeksowania. Coś jak pisarz.isDocExists?
Dzięki!
Mój kod wygląda tak:
// build the writer
IndexWriter writer;
IndexWriterConfig indexWriter = new IndexWriterConfig(Version.LUCENE_36, analyzer);
writer = new IndexWriter(fsDir, indexWriter);
writer.deleteAll(); //must - otherwise it will return duplicated result
//build the docs and add to writer
File dir = new File(MY_FILES);
File[] files = dir.listFiles();
int counter = 0;
for (File file : files)
{
String path = file.getCanonicalPath();
FileReader reader = new FileReader(file);
Document doc = new Document();
doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("path", path, Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("content", reader));
writer.addDocument(doc);
System.out.println("indexing "+file.getName()+" "+ ++counter+"/"+files.length);
}