[
https://issues.apache.org/jira/browse/LUCENE-1705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12722021#action_12722021
]
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()" operation
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: https://issues.apache.org/jira/browse/LUCENE-1705
> 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: [email protected]
For additional commands, e-mail: [email protected]