Halácsy Péter wrote:
> A lot of people requested a code to cache opened Searcher objects until the index is
>not modified. The first version of this was writed by Scott Ganyo and submitted as
>IndexAccessControl to the list.
>
> Now I've decoupled the logic that is needed to manage searher.
>
> Unfortunatly to compile and use this code one has to modify the lucene source:
Why is this more complicated than the code in demo/Search.jhtml
(included below)? FSDirectory closes files as they're GC'd, so you
don't have to explicitly close the IndexReaders or Searchers.
Doug
/** Keep a cache of open IndexReader's, so that an index does not
* have to opened for each query. The cache re-opens an index when
* it has changed so that additions and deletions are visible ASAP.
*/
static Hashtable indexCache = new Hashtable(); // name->CachedIndex
class CachedIndex { // a cache entry
IndexReader reader; // an open reader
long modified; // reader's mod. date
CachedIndex(String name) throws IOException {
modified = IndexReader.lastModified(name); // get mod. date
reader = IndexReader.open(name); // open reader
}
}
IndexReader getReader(String name) throws ServletException {
CachedIndex index = // look in cache
(CachedIndex)indexCache.get(name);
try {
if (index != null && // check up-to-date
(index.modified == IndexReader.lastModified(name)))
return index.reader; // cache hit
else {
index = new CachedIndex(name); // cache miss
}
} catch (IOException e) {
StringWriter writer = new StringWriter();
PrintWriter pw = new PrintWriter(writer);
throw new ServletException("Could not open index " + name + ": " +
e.getClass().getName() + "--" +
e.getMessage());
}
indexCache.put(name, index); // add to cache
return index.reader;
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>