lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Edward W. Rouse" <ero...@comsquared.com>
Subject RE: IndexReader.deleteDocument in Lucene 3.6
Date Fri, 25 May 2012 17:07:29 GMT
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@gmail.com [mailto:yseeley@gmail.com] On Behalf Of Yonik
> Seeley
> Sent: Friday, May 25, 2012 12:40 PM
> To: java-user@lucene.apache.org
> Subject: Re: IndexReader.deleteDocument in Lucene 3.6
> 
> On Fri, May 25, 2012 at 5:23 AM, Nikolay Zamosenchuk
> <nikolazius@gmail.com> 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@lucene.apache.org
> > For additional commands, e-mail: java-user-help@lucene.apache.org
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Mime
View raw message