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