You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by David Miranda <da...@gmail.com> on 2013/09/05 03:16:12 UTC

Lucene Concurrent Search

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.

Re: Lucene Concurrent Search

Posted by Ian Lea <ia...@gmail.com>.
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
<da...@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 <ee...@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 <ia...@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 <ia...@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 <fi...@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


Re: Lucene Concurrent Search

Posted by Stephen Green <ee...@gmail.com>.
Mostly because it already handles all of the I sexing and querying that I
expect you'll want to be doing and now with Solr Cloud you can ven scale
search beyond one machine.

If you're just looking to learn about this stuff, though, it is fun to roll
your own!

On Friday, September 6, 2013, David Miranda wrote:

> Why use Solr instead of Lucene for this kind of application?
>
>
> 2013/9/6 Stephen Green <ee...@gmail.com>
>
> > Something like:
> >
> > public class SearchListener implements ServletContextListener {
> >
> >     @Override
> >     public void contextInitialized(ServletContextEvent sce) {
> >
> >         ServletContext sc = sce.getServletContext();
> >         String indexDir = sc.getInitParameter("indexDir");
> >         SearcherManager searcherManager = new
> > SearcherManager(FSDirectory.open(new File(indexDir)), null);
> >         sc.setAttribute("searcherManager", searcherManager);
> >    }
> >
> >    public void contextDestroyed(ServletContextEvent sce) {
> >         ServletContext sc = sce.getServletContext();
> >
> >         SearcherManager searcherManager = (SearcherManager)
> > sc.getAttribute("searcherManager");
> >         if(searcherManager != null) {
> >             try {
> >                 searcherManager.close();
> >             } catch(IOException ex) {
> >                 logger.log(Level.SEVERE, String.format(
> >                         "Error shutting down search engine"), ex);
> >             }
> >         }
> >     }
> > }
> >
> > Usually does the trick.  You need to put some parameters ("indexDir")
> into
> > your web.xml and make sure that it knows that SearchListener is a
> > ServletListener for your Web app.
> >
> > But, to re-iterate what someone else said: if you really just want
> RESTful
> > search, you might be better off with Solr.
> >
> >
> >
> > On Thu, Sep 5, 2013 at 6: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 <ee...@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 <ia...@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 <ia...@gmail.com>
> > > > > >
> > > > > >> I think that blog post was bleeding edge and the API changed a
> bit
> > > > > >> subsequently.
> > > > > >>
> > > > > >> I use
> > > > > >>
> > > > > >> Directory dir = whatever;
> > > > > >--
> Cumprimentos,
> David Miranda
>


-- 
Stephen Green
http://thesearchguy.wordpress.com

Re: Lucene Concurrent Search

Posted by David Miranda <da...@gmail.com>.
Why use Solr instead of Lucene for this kind of application?


2013/9/6 Stephen Green <ee...@gmail.com>

> Something like:
>
> public class SearchListener implements ServletContextListener {
>
>     @Override
>     public void contextInitialized(ServletContextEvent sce) {
>
>         ServletContext sc = sce.getServletContext();
>         String indexDir = sc.getInitParameter("indexDir");
>         SearcherManager searcherManager = new
> SearcherManager(FSDirectory.open(new File(indexDir)), null);
>         sc.setAttribute("searcherManager", searcherManager);
>    }
>
>    public void contextDestroyed(ServletContextEvent sce) {
>         ServletContext sc = sce.getServletContext();
>
>         SearcherManager searcherManager = (SearcherManager)
> sc.getAttribute("searcherManager");
>         if(searcherManager != null) {
>             try {
>                 searcherManager.close();
>             } catch(IOException ex) {
>                 logger.log(Level.SEVERE, String.format(
>                         "Error shutting down search engine"), ex);
>             }
>         }
>     }
> }
>
> Usually does the trick.  You need to put some parameters ("indexDir") into
> your web.xml and make sure that it knows that SearchListener is a
> ServletListener for your Web app.
>
> But, to re-iterate what someone else said: if you really just want RESTful
> search, you might be better off with Solr.
>
>
>
> On Thu, Sep 5, 2013 at 6: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 <ee...@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 <ia...@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 <ia...@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 <fi...@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
> >
>
>
>
> --
> Stephen Green
> http://thesearchguy.wordpress.com
>



-- 
Cumprimentos,
David Miranda

Re: Lucene Concurrent Search

Posted by Stephen Green <ee...@gmail.com>.
Something like:

public class SearchListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {

        ServletContext sc = sce.getServletContext();
        String indexDir = sc.getInitParameter("indexDir");
        SearcherManager searcherManager = new
SearcherManager(FSDirectory.open(new File(indexDir)), null);
        sc.setAttribute("searcherManager", searcherManager);
   }

   public void contextDestroyed(ServletContextEvent sce) {
        ServletContext sc = sce.getServletContext();

        SearcherManager searcherManager = (SearcherManager)
sc.getAttribute("searcherManager");
        if(searcherManager != null) {
            try {
                searcherManager.close();
            } catch(IOException ex) {
                logger.log(Level.SEVERE, String.format(
                        "Error shutting down search engine"), ex);
            }
        }
    }
}

Usually does the trick.  You need to put some parameters ("indexDir") into
your web.xml and make sure that it knows that SearchListener is a
ServletListener for your Web app.

But, to re-iterate what someone else said: if you really just want RESTful
search, you might be better off with Solr.



On Thu, Sep 5, 2013 at 6:21 PM, David Miranda <da...@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 <ee...@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 <ia...@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 <ia...@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 <fi...@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
>



-- 
Stephen Green
http://thesearchguy.wordpress.com

Re: Lucene Concurrent Search

Posted by David Miranda <da...@gmail.com>.
Did you have a practical example of the use of SearchManager (initialize,
use to do research)?

Thanks in advance.


2013/9/5 Stephen Green <ee...@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 <ia...@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 <ia...@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 <fi...@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

Re: Lucene Concurrent Search

Posted by Stephen Green <ee...@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 <ia...@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 <da...@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 <ia...@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 <fi...@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

Re: Lucene Concurrent Search

Posted by Ian Lea <ia...@gmail.com>.
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 <da...@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 <ia...@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 <da...@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 <fi...@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


Re: Lucene Concurrent Search

Posted by David Miranda <da...@gmail.com>.
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 <ia...@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 <da...@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 <fi...@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

Re: Lucene Concurrent Search

Posted by Ian Lea <ia...@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 <da...@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 <fi...@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


Re: Lucene Concurrent Search

Posted by David Miranda <da...@gmail.com>.
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 <fi...@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

Re: Lucene Concurrent Search

Posted by Aditya <fi...@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 <da...@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.
>

Re: Lucene Concurrent Search

Posted by Ian Lea <ia...@gmail.com>.
Take a look at org.apache.lucene.search.SearcherManager.

>From the javadocs "Utility class to safely share IndexSearcher
instances across multiple threads, while periodically reopening.".


--
Ian.


On Thu, Sep 5, 2013 at 2:16 AM, David Miranda <da...@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.

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