Hal�csy P�ter wrote:

> Hello!
> 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.
>
> The usage is very simple:
> IndexSearcherCache isc = new IndexSearcherCache(new File("/path/to/the/index"));
> for(int i= 0; i++; i< 100) {
>   Searcher searcher = isc.getSearcher();
>   // search here
>   searcher.close();
> }
>
> only one Searcher will be opened here if no other thread is writing the index; if 
>the index was modified getSearcher() will close the old one and create a new.
>
> Unfortunatly to compile and use this code one has to modify the lucene source:
>
> 1. change all package-protected abstract method to public in Searcher.java
>
>   /** Frees resources associated with this Searcher. */
>   abstract public void close() throws IOException;
>
>   abstract int docFreq(Term term) throws IOException;
>   abstract int maxDoc() throws IOException;
>   abstract TopDocs search(Query query, Filter filter, int n)
>        throws IOException;
>
>   /** Frees resources associated with this Searcher. */
>   public abstract  void close() throws IOException;
>
>   public abstract int docFreq(Term term) throws IOException;
>   public abstract int maxDoc() throws IOException;
>   public abstract TopDocs search(Query query, Filter filter, int n)
>        throws IOException;
>
> 2 change package protected TopDocs to public (in TopDocs.java)
> final class TopDocs {  --> public final class TopDocs {
>
> Or you can use the modified files I've attached.
>
> I hope this code is helpful.
>
> The main idea to have an interface SearcherSource something similar to DataSource in 
>javax.sql. SearcherSource is responsible for creating searcher object. One 
>implementation is SearcherCache that encapsulates the logic of caching searcher. 
>IndexSearcherCache - as you might figure out - can cache IndexSearcher objects. 
>Someone could implement a MultiSearcherCache class that manages... (recreates the 
>searcher if one of the searchers need reopening).
>
> I create IndexSearcherCache in my init method and pass the object as a 
>SearcherSource to the working methods. In the destroy process I call release() 
>method. In this way I can later change the implementation of the cache as far as it 
>implementing SearcherSource.
>
> peter
>
> ps: of cource you can change the code, class/method/package/.. names;
> Unfortunatly a lot of System.out.println debugging code is used but it is very good 
>to understand the behaviour.
>
>   ------------------------------------------------------------------------
>                             Name: CachedSearcher.zip
>    CachedSearcher.zip       Type: Zip Compressed Data (application/x-zip-compressed)
>                         Encoding: base64
>                      Description: CachedSearcher.zip
>
>                       Name: TopDocs.java
>    TopDocs.java       Type: unspecified type (application/octet-stream)
>                   Encoding: base64
>                Description: TopDocs.java
>
>                        Name: Searcher.java
>    Searcher.java       Type: unspecified type (application/octet-stream)
>                    Encoding: base64
>                 Description: Searcher.java
>
>    Part 1.5Type: Plain Text (text/plain)

I am new here, I am sorry if this question has been asked before. Why there are so 
many final and package-protected methods?  I want to change the way TermQuery doing 
scores. Ideally, I would like to have  subclasses of TermQuery and TermScorer, and 
place them in my OWN package. Currently, I have to put these two in lucene, and I have 
to copy almost every line of the TermQuery class into my new query class except the 
line returns Scorer. Note, this
may be a bad example, but I still want to know if we can make Lucene more extendable 
from outside in the future.


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

Reply via email to