lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ian Lea <ian....@gmail.com>
Subject Re: Lucene Concurrent Search
Date Fri, 06 Sep 2013 13:22:42 GMT
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
<david.b.miranda@gmail.com> 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 <eelstretching@gmail.com>
>
>> 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 <ian.lea@gmail.com> 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 <david.b.miranda@gmail.com
>> >
>> > 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 <ian.lea@gmail.com>
>> > >
>> > >> 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 <
>> > david.b.miranda@gmail.com>
>> > >> 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 <findbestopensource@gmail.com>
>> > >> >
>> > >> >> 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 <
>> > >> david.b.miranda@gmail.com
>> > >> >> >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: java-user-unsubscribe@lucene.apache.org
>> > >> For additional commands, e-mail: java-user-help@lucene.apache.org
>> > >>
>> > >>
>> > >
>> > >
>> > > --
>> > > Cumprimentos,
>> > > David Miranda
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>> > For additional commands, e-mail: java-user-help@lucene.apache.org
>> >
>> >
>>
>>
>> --
>> Stephen Green
>> http://thesearchguy.wordpress.com
>>
>
>
>
> --
> Cumprimentos,
> David Miranda

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Mime
View raw message