Try this: 1. Open reader. 2. removeModifiedFiles(reader) 3. reader.close() 4. Open writer. 5. updateIndexDocs() 6. writer.close();
i.e. don't have both reader and writer open at the same time. btw I suspect you might be removing index entries for files that have been modified, but adding all files. Another "index keeps growing" problem! Could be wrong. -- Ian. > [EMAIL PROTECTED] (kerr) wrote > > Thank you Otis, > Yes, reader should be closed. But it isn't the reason of this Exception. > the errors happen before deleting file. > Kerr. > close() > Closes files associated with this index. Also saves any new deletions to disk. No > other methods should be called after this has been called. > > ----- Original Message ----- > From: "Otis Gospodnetic" <[EMAIL PROTECTED]> > To: "Lucene Users List" <[EMAIL PROTECTED]> > Sent: Thursday, April 03, 2003 12:14 PM > Subject: Re: about increment update > > > > Maybe this is missing? > > http://jakarta.apache.org/lucene/docs/api/org/apache/lucene/index/IndexReader.html#close() > > > > Otis > > > > --- kerr <[EMAIL PROTECTED]> wrote: > > > Hello everyone, > > > Here I try to increment update index file and follow the idea to > > > delete modified file first and re-add it. Here is the source. > > > But when I execute it, the index directory create a file(write.lock) > > > when execute the line > > > reader.delete(i);, > > > and caught a class java.io.IOException with message: Index locked > > > for write. > > > After that, when I execute the line > > > IndexWriter writer = new IndexWriter("index", new > > > StandardAnalyzer(), false); > > > caught a class java.io.IOException with message: Index locked for > > > write > > > if I delete the file(write.lock), the error will re-happen. > > > anyone can help and thanks. > > > Kerr. > > > > > > > > > import org.apache.lucene.analysis.standard.StandardAnalyzer; > > > import org.apache.lucene.index.IndexWriter; > > > import org.apache.lucene.document.Document; > > > import org.apache.lucene.document.Field; > > > import org.apache.lucene.store.Directory; > > > import org.apache.lucene.store.FSDirectory; > > > import org.apache.lucene.index.IndexReader; > > > import org.apache.lucene.index.Term; > > > > > > import java.io.File; > > > import java.util.Date; > > > > > > > > > public class UpdateIndexFiles { > > > public static void main(String[] args) { > > > try { > > > Date start = new Date(); > > > > > > Directory directory = FSDirectory.getDirectory("index", false); > > > IndexReader reader = IndexReader.open(directory); > > > System.out.println(reader.isLocked(directory)); > > > //reader.unlock(directory); > > > IndexWriter writer = new IndexWriter("index", new > > > StandardAnalyzer(), false); > > > > > > String base = ""; > > > if (args.length == 0){ > > > base = "D:\\Tomcat\\webapps\\ROOT\\test"; > > > } else { > > > base = args[0]; > > > } > > > removeModifiedFiles(reader); > > > updateIndexDocs(reader, writer, new File(base)); > > > > > > writer.optimize(); > > > writer.close(); > > > > > > Date end = new Date(); > > > > > > System.out.print(end.getTime() - start.getTime()); > > > System.out.println(" total milliseconds"); > > > > > > } catch (Exception e) { > > > System.out.println(" caught a " + e.getClass() + > > > "\n with message: " + e.getMessage()); > > > e.printStackTrace(); > > > } > > > } > > > > > > public static void removeModifiedFiles(IndexReader reader) throws > > > Exception { > > > Document adoc; > > > String path; > > > File aFile; > > > for (int i=0; i<reader.numDocs(); i++){ > > > adoc = reader.document(i); > > > path = adoc.get("path"); > > > aFile = new File(path); > > > if (reader.lastModified(path) < aFile.lastModified()){ > > > System.out.println(reader.isLocked(path)); > > > reader.delete(i); > > > } > > > } > > > } > > > > > > public static void updateIndexDocs(IndexReader reader, IndexWriter > > > writer, File file) > > > throws Exception { > > > > > > if (file.isDirectory()) { > > > String[] files = file.list(); > > > for (int i = 0; i < files.length; i++) > > > updateIndexDocs(reader, writer, new File(file, files[i])); > > > } else { > > > if (!reader.indexExists(file)){ > > > System.out.println("adding " + file); > > > writer.addDocument(FileDocument.Document(file)); > > > } else {} > > > } > > > } > > > } ---------------------------------------------------------------------- Searchable personal storage and archiving from http://www.digimem.net/
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]