lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim Smith (JIRA)" <>
Subject [jira] Commented: (LUCENE-1705) Add deleteAllDocuments() method to IndexWriter
Date Fri, 19 Jun 2009 21:26:07 GMT


Tim Smith commented on LUCENE-1705:

My use case is like so:

* IndexReader opened against old index (the last committed index)
* user requests "clearing the index" (for whatever reason, up to them to decide) 
** this will close the current IndexWriter and reopen with create=true (ideally this would
just call writer.deleteAll())
** IndexWriter.init() writes out new segments.gen file referencing no segments with create=true
(old segments are not yet deleted as IndexReader is still open for them)
** NOTE: new IndexReader not yet opened because they haven't said "commit" yet
** (previous commit will still be the "live" index seen by searches - obviously this means
disk is not reclaimed yet)
* user may then feed new documents, or not, (up to them)
* user will then eventually say commit
* new IndexReader will be opened, which should only contain documents added since the "deleteAll()"

Ideally, i want to perform this delete all operation very efficiently without needing to reopen
an IndexWriter 
The rollback() call would possibly slightly optimize what i am currently doing, but even better
still would be a highly efficient deleteAll() method (as all the semantics of this operation
would be handled nicely (without jumping through hoops to clear the index))

Creating a new IndexWriter in the same directory with create=true works like a champ, (existing
IndexReaders still see the previous commit)
just want do avoid the IndexWriter.close() call

> Add deleteAllDocuments() method to IndexWriter
> ----------------------------------------------
>                 Key: LUCENE-1705
>                 URL:
>             Project: Lucene - Java
>          Issue Type: Wish
>          Components: Index
>    Affects Versions: 2.4
>            Reporter: Tim Smith
> Ideally, there would be a deleteAllDocuments() or clear() method on the IndexWriter
> This method should have the same performance and characteristics as:
> * currentWriter.close()
> * currentWriter = new IndexWriter(..., create=true,...)
> This would greatly optimize a delete all documents case. Using deleteDocuments(new MatchAllDocsQuery())
could be expensive given a large existing index.
> IndexWriter.deleteAllDocuments() should have the same semantics as a commit(), as far
as index visibility goes (new IndexReader opening would get the empty index)
> I see this was previously asked for in LUCENE-932, however it would be nice to finally
see this added such that the IndexWriter would not need to be closed to perform the "clear"
as this seems to be the general recommendation for working with an IndexWriter now
> deleteAllDocuments() method should:
> * abort any background merges (they are pointless once a deleteAll has been received)
> * write new segments file referencing no segments
> This method would remove one of the final reasons i would ever need to close an IndexWriter
and reopen a new one 

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message