
erouse at comsquared
May 25, 2012, 10:07 AM
Post #3 of 3
(268 views)
Permalink
|
|
RE: IndexReader.deleteDocument in Lucene 3.6
[In reply to]
|
|
To ensure deletion I use a while loop with a counter (to prevent an endless loop if there's a problem) Term term = this.createIdTerm(id); Int count = 0; while(readDocument(indexName, id) != null) { count++; log.debug("deleting document " + id + " from index " + indexName); writer.deleteDocuments(term); writer.commit(); if(count > 10) { failed = true; break; } } If(failed) throw DeleteFailedException("Failed to delete document " + id + " from index " + indexName); And readDocument does this: IndexReader reader = this.getReader(indexName); Document doc = null; TermDocs td = reader.termDocs(this.createIdTerm(id)); if(td.next()) { int d = td.doc(); doc = reader.document(d); } this.returnReader(reader); return doc; Because IndexReader.termDocs doesn't return deleted documents, once the deletion is successful, readDocument returns a null. I'm not even sure if I need to make the writer.commit() call, but the load for us is small enough that performance isn't an issue. If performance does become an issue I might need to tweak this a bit, but it does ensure that a deletion is successful or it throws an exception. > -----Original Message----- > From: yseeley [at] gmail [mailto:yseeley [at] gmail] On Behalf Of Yonik > Seeley > Sent: Friday, May 25, 2012 12:40 PM > To: java-user [at] lucene > Subject: Re: IndexReader.deleteDocument in Lucene 3.6 > > On Fri, May 25, 2012 at 5:23 AM, Nikolay Zamosenchuk > <nikolazius [at] gmail> wrote: > > IndexWriter.deleteDocument(..) is not final, > > but doesn't return any result. > > Deleted terms are buffered for good performance, so at the time of > IndexWriter.deleteDocument(Term) we don't know how many documents > match the term. > > > Can anyone please suggest how to solve this issue? Can simply run > term > > query before, but it seems to be absolutely inefficient. > > You could switch to an asynchronous design and use a custom query that > keeps track of how many (or which) documents it matched. > > -Yonik > http://lucidimagination.com > > > > > > -- > > Best regards, Nikolay Zamosenchuk > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: java-user-unsubscribe [at] lucene > > For additional commands, e-mail: java-user-help [at] lucene > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-user-unsubscribe [at] lucene > For additional commands, e-mail: java-user-help [at] lucene --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscribe [at] lucene For additional commands, e-mail: java-user-help [at] lucene
|