FAQ
Apologies if this info is already somewhere, but google cant find it
(: I am assuming the following code is completely thread safe:



// Called from a servlet when a user action results in the index
needing to be updated
public static void rebuildIndex() {
FSDirectory dir = new NIOFSDirectory(new
File(Configuration.getAttachmentFolder()), null);
IndexWriter w = new IndexWriter(dir, analyzer,
IndexWriter.MaxFieldLength.UNLIMITED);
.... build index ...
w.optimize();
w.commit();
w.close();
}

The following code is called from the search servlet:

// Called by the search servlet
public void search() {
FSDirectory dir = new NIOFSDirectory(new
File(Configuration.getAttachmentFolder()), null);
IndexReader indexReader = IndexReader.open(dir,true);
IndexSearcher searcher = new IndexSearcher(indexReader);
.... do the search ...
}

I am trying to work out the best/correct way to improve upon this:

1) Should the "FSDirectory dir" object be shared as some sort of
static variable?
2) Should the "IndexSearcher searcher" or the "IndexReader
indexReader" objects be stored as a static variable, and then simply
replaced when the index is rebuilt?


Thanks,
Jacob

____________________________________
Information Technology Services,
The University of Melbourne

Email: jrhoden@unimelb.edu.au
Phone: +61 3 8344 2884
Mobile: +61 4 1095 7575

Search Discussions

  • Erick Erickson at Nov 11, 2009 at 2:02 am
    1) Should the "FSDirectory dir" object be shared as some sort of static
    variable?
    I don't think it matters, do the simplest thing. The overhead in creating an
    FSDirectory is so small in relation to the other operations that I don't
    think you'd ever notice.

    2) Should the "IndexSearcher searcher" or the "IndexReader indexReader"
    objects be stored as a static variable, and then simply replaced when the
    index is rebuilt?

    Absolutely. Opening a searcher is expensive and they should only be opened
    when necessary. However, if you have multiple threads using the same
    searcher, you cannot close that searcher until all the threads are done with
    their current search. There's an example of this in Lucene In Action II,
    available from Manning in PDF format (it's still undergoing final editing).

    Best
    Erick

    On Tue, Nov 10, 2009 at 7:23 PM, Jacob Rhoden wrote:

    Apologies if this info is already somewhere, but google cant find it (: I
    am assuming the following code is completely thread safe:



    // Called from a servlet when a user action results in the index needing to
    be updated
    public static void rebuildIndex() {
    FSDirectory dir = new NIOFSDirectory(new
    File(Configuration.getAttachmentFolder()), null);
    IndexWriter w = new IndexWriter(dir, analyzer,
    IndexWriter.MaxFieldLength.UNLIMITED);
    .... build index ...
    w.optimize();
    w.commit();
    w.close();
    }

    The following code is called from the search servlet:

    // Called by the search servlet
    public void search() {
    FSDirectory dir = new NIOFSDirectory(new
    File(Configuration.getAttachmentFolder()), null);
    IndexReader indexReader = IndexReader.open(dir,true);
    IndexSearcher searcher = new IndexSearcher(indexReader);
    .... do the search ...
    }

    I am trying to work out the best/correct way to improve upon this:

    1) Should the "FSDirectory dir" object be shared as some sort of static
    variable?
    2) Should the "IndexSearcher searcher" or the "IndexReader indexReader"
    objects be stored as a static variable, and then simply replaced when the
    index is rebuilt?


    Thanks,
    Jacob

    ____________________________________
    Information Technology Services,
    The University of Melbourne

    Email: jrhoden@unimelb.edu.au
    Phone: +61 3 8344 2884
    Mobile: +61 4 1095 7575

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupjava-user @
categorieslucene
postedNov 11, '09 at 12:24a
activeNov 11, '09 at 2:02a
posts2
users2
websitelucene.apache.org

2 users in discussion

Jacob Rhoden: 1 post Erick Erickson: 1 post

People

Translate

site design / logo © 2022 Grokbase