Hm, what happens if one of the other index-modifying operations (e.g. optimize, addDocument, addIndexer) is invoked at the same time by another thread that uses the same IndexWriter instance? // close IndexWriter // open IndexReader // delete via IndexReader // close IndexReader // open and return new IndexWriter public IndexWriter delete(int docNum) throws IOException { this.close(); IndexReader ireader = IndexReader.open(directory); ireader.deleteIngoreLock(docNum); ireader.close(); return new IndexWriter(reuse dir, analyzer, create flag); }
One ugly API perhaps (returning IndexWriter like this), but it doesn't mess with (no)locks. Oh, I didn't synchronize on anything. Maybe on directory? Otis --- Daniel Naber <[EMAIL PROTECTED]> wrote: > Hi, > > the request to delete documents in IndexWriter instead of IndexReader > comes > up regularly. What if we implement a delete() method in IndexWriter > like > this: > > public synchronized void delete(int docNum) throws IOException { > IndexReader ireader = IndexReader.open(directory); > ireader.deleteIngoreLock(docNum); > ireader.close(); > } > > deleteIngoreLock would be a new method just like delete, but that > doesn't > create a lock -- it uses the IndexWriter's lock which exists all the > time. > Would this work and would this be safe? > > I'm well aware that this can be slow, but it makes deleting documents > so > much easier for many people who don't have huge indices. We could > document > the fact that it's slow and use an array of document IDs to encourage > > people to delete more than one document at once, so the overhead of > opening the reader becomes less. > > Regards > Daniel > > -- > http://www.danielnaber.de > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]