Lucene: как выполнить пошаговую индексацию и избежать «удаления и повторения»
У меня есть папка (MY_FILES), которая содержит около 500 файлов, и каждый день приходит новый файл, и он помещается туда. Размер каждого файла составляет около 4 МБ.
Я только что разработал простую 'void main' ' чтобы проверить, могу ли я найти определенный подстановочный знак в этих файлах. Работает просто отлично.
Проблема в том, что я удаляю старую indexed_folder и снова переиндексирую. Это занимает много времени и, очевидно, неэффективно. То, что я ищу, - это «инкрементная индексация». То есть, если индекс уже существует - просто добавьте новые файлы в индекс.
Мне было интересно, есть ли в Lucene какой-то механизм, чтобы проверить, является ли 'doc' был проиндексирован, прежде чем пытаться проиндексировать его. Что-то вроде writer.isDocExists?
Спасибо!
Мой код выглядит так:
// 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);
}