For the singleton technique that I use, the per-search code looks like

import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.SearcherManager;

 SearcherManager sm = LuceneSearcherManagerCache.get(indexdir);
 IndexSearcher s = sm.acquire();
 try {
   search(...);
 }
 finally {
   sm.release(s);
 }
 s =  null;

where LuceneSearcherManagerCache is the singleton class that
initialises and caches SearcherManager instances by index directory.
It calls maybeRefresh() on each call which of course isn't
particularly efficient, but this is used, within tomcat, for
occasional searches on small indexes with no knowledge of when or if a
particular index may have changed or not.  In practice, on my indexes
on my hardware it is, as usual with lucene, fast.

As I think I said, the initialization of SearcherManager is 100% default:

new SearcherManager(dir, new SearcherFactory());



Hope that helps.


--
Ian.


On Thu, Sep 5, 2013 at 11:21 PM, David Miranda
<[email protected]> wrote:
> Did you have a practical example of the use of SearchManager (initialize,
> use to do research)?
>
> Thanks in advance.
>
>
> 2013/9/5 Stephen Green <[email protected]>
>
>> You can implement a ServletListener for your app and open the index there
>> (in the contextInitialized method). You can then create the SearcherManager
>> from the IndexReader/Searcher and store it in the ServletContext, where it
>> can be fetched out by your REST servlets.
>>
>> This is a typical pattern that we use for lots of Web apps that use
>> resources like Lucene.
>>
>>
>> On Thu, Sep 5, 2013 at 12:05 PM, Ian Lea <[email protected]> wrote:
>>
>> > I use a singleton class but there are other ways in tomcat.  Can't
>> > remember what - maybe application scope.
>> >
>> >
>> > --
>> > Ian.
>> >
>> >
>> > On Thu, Sep 5, 2013 at 4:46 PM, David Miranda <[email protected]
>> >
>> > wrote:
>> > > Where I can initialize the SearchManager variable to after use it in
>> the
>> > > REST servlet to do research in the index?
>> > >
>> > >
>> > > 2013/9/5 Ian Lea <[email protected]>
>> > >
>> > >> I think that blog post was bleeding edge and the API changed a bit
>> > >> subsequently.
>> > >>
>> > >> I use
>> > >>
>> > >> Directory dir = whatever;
>> > >> SearcherManager sm = new SearcherManager(dir, new SearcherFactory());
>> > >>
>> > >> to get default behaviour.  The javadocs for SearcherFactory explain
>> > >> that you can write your own implementation if you want custom
>> > >> behaviour such as warming.
>> > >>
>> > >>
>> > >> --
>> > >> Ian.
>> > >>
>> > >>
>> > >> On Thu, Sep 5, 2013 at 3:53 PM, David Miranda <
>> > [email protected]>
>> > >> wrote:
>> > >> > Hi,
>> > >> >
>> > >> > I'm trying to implement my code with SearchManager to make  my app
>> > >> > thread-safe. I'm follow this post:
>> > >> >
>> > >>
>> >
>> http://blog.mikemccandless.com/2011/09/lucenes-searchermanager-simplifies.html
>> > >> >
>> > >> > There is a class that implements "SearchWarmer". I can't find this
>> > class
>> > >> in
>> > >> > the Lucene library, what class is that?
>> > >> >
>> > >> > Thanks.
>> > >> >
>> > >> >
>> > >> > 2013/9/5 Aditya <[email protected]>
>> > >> >
>> > >> >> Hi
>> > >> >>
>> > >> >> You want to use REST service for your search, then my advice would
>> > be to
>> > >> >> use Solr. As it has buitl-in functionality of REST API.
>> > >> >>
>> > >> >> If you want to use Lucene then below are my comments:
>> > >> >> 1. In do search function, you are creating reader object. If this
>> > call
>> > >> is
>> > >> >> invoked for every query then it would be very expensive. You need
>> to
>> > >> create
>> > >> >> it once globally and re opon it, if the index is modified. Its
>> better
>> > >> use
>> > >> >> SearchManager.
>> > >> >>
>> > >> >> Regards
>> > >> >> Aditya
>> > >> >> www.findbestopensource.com - Search from 1 Million open source
>> > >> projects.
>> > >> >>
>> > >> >>
>> > >> >>
>> > >> >> On Thu, Sep 5, 2013 at 6:46 AM, David Miranda <
>> > >> [email protected]
>> > >> >> >wrote:
>> > >> >>
>> > >> >> > Hi,
>> > >> >> >
>> > >> >> > I'm developing a web application, that contains a REST service in
>> > the
>> > >> >> > Tomcat, that receives several requests per second.
>> > >> >> > The REST requests do research in a Lucene index, to do this i use
>> > the
>> > >> >> > IndexSearch.
>> > >> >> >
>> > >> >> > My questions are:
>> > >> >> > - There are concurrency problems in multiple research?
>> > >> >> > - What the best design pattern to do this?
>> > >> >> >
>> > >> >> > public class IndexResearch(){
>> > >> >> > >   private static int MAX_HITS = 500;
>> > >> >> > >   private static String DIRECTORY = "indexdir";
>> > >> >> > >   private IndexSearcher searcher;
>> > >> >> > >   private StandardAnalyzer analyzer;
>> > >> >> > >
>> > >> >> >
>> > >> >> >
>> > >> >> >
>> > >> >> > >   public IndexResearch(){
>> > >> >> > >   }
>> > >> >> > >   public String doSearch(String text){
>> > >> >> > >      analyzer = new StandardAnalyzer(Version.LUCENE_43);
>> > >> >> > >      topic = QueryParser.escape(topic);
>> > >> >> > >      Query q = new QueryParser(Version.LUCENE_43, "field",
>> > analyzer
>> > >> >> > > ).parse(text);
>> > >> >> > >      File indexDirectory = new File(DIRECTORY);
>> > >> >> > >      IndexReader reader;
>> > >> >> > >      reader =
>> > >> DirectoryReader.open(FSDirectory.open(indexDirectory));
>> > >> >> > >      searcher = new IndexSearcher(reader);
>> > >> >> > >
>> > >> >> >         /*more code*/
>> > >> >> >
>> > >> >> > >    }
>> > >> >> > > }
>> > >> >> >
>> > >> >> >
>> > >> >> > Can I create, in the servlet, one object of this class per client
>> > >> request
>> > >> >> > (Is that the best design pattern)?
>> > >> >> >
>> > >> >> > Thanks in advance.
>> > >> >> >
>> > >> >>
>> > >> >
>> > >> >
>> > >> >
>> > >> > --
>> > >> > Cumprimentos,
>> > >> > David Miranda
>> > >>
>> > >> ---------------------------------------------------------------------
>> > >> To unsubscribe, e-mail: [email protected]
>> > >> For additional commands, e-mail: [email protected]
>> > >>
>> > >>
>> > >
>> > >
>> > > --
>> > > Cumprimentos,
>> > > David Miranda
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: [email protected]
>> > For additional commands, e-mail: [email protected]
>> >
>> >
>>
>>
>> --
>> Stephen Green
>> http://thesearchguy.wordpress.com
>>
>
>
>
> --
> Cumprimentos,
> David Miranda

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to