On Tue, Apr 05, 2005 at 08:16:35AM -0700, Otis Gospodnetic wrote:
> If you take this approach, keep in mind that you will also need to
> handle regular application shutdowns, and also try to catch some
> crashes/errors, in order to flush your in-memory queue of items
> scheduled for indexing, and write them to disk.

right, when complete index rebuilds are expensive and therefore seldom
or never take place this is essential.

> Feel free to post the code, if you want and can, so people don't have
> to reinvent this.

I implemented the solution I mentioned in a lucene indexing plugin I
wrote for XWiki (xwiki.org). It doesn't have any persistency solution
for the queue to preserve state of the queue during application
downtime, but relies on complete index rebuilds to be done after such
events.

code (GPL) and docs can be found at
http://www.jkraemer.net/maven/xwiki/plugins/lucene-plugin/

The relevant piece of code is the IndexUpdater class which holds a
XWikiDocumentQueue and implements several XWiki interfaces to receive
notifications when documents change. IndexUpdater#run is executed in
it's own thread (spawned by the LucenePlugin class), regularly checking
the queue and updating the index when necessary.

Index rebuilds are done by emptying the index and then feeding all
documents into the updater's queue. At least on unix systems this works
fine, searches during the rebuild are still done using the old IndexReader 
instance which was opened when the index still was there. After rebuild 
is finished, the reader is closed and a new one is opened, now searching 
takes place on the new index.

Jens


-- 
webit! Gesellschaft für neue Medien mbH          www.webit.de
Dipl.-Wirtschaftsingenieur Jens Krämer       [EMAIL PROTECTED]
Schnorrstraße 76                      Telefon +49 351 46766 0
D-01069 Dresden                      Telefax +49 351 46766 66

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to