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: [email protected] [mailto:[email protected]] On Behalf Of Yonik
> Seeley
> Sent: Friday, May 25, 2012 12:40 PM
> To: [email protected]
> Subject: Re: IndexReader.deleteDocument in Lucene 3.6
>
> On Fri, May 25, 2012 at 5:23 AM, Nikolay Zamosenchuk
> <[email protected]> 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: [email protected]
> > For additional commands, e-mail: [email protected]
> >
>
> ---------------------------------------------------------------------
> 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]