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);
       }

questionAnswers(2)

yourAnswerToTheQuestion