Why use Solr instead of Lucene for this kind of application?
2013/9/6 Stephen Green <eelstretch...@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.mira...@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 <eelstretch...@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....@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.mira...@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....@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.mira...@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 <findbestopensou...@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.mira...@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-unsubscr...@lucene.apache.org > > > > >> For additional commands, e-mail: java-user-h...@lucene.apache.org > > > > >> > > > > >> > > > > > > > > > > > > > > > -- > > > > > Cumprimentos, > > > > > David Miranda > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org > > > > For additional commands, e-mail: java-user-h...@lucene.apache.org > > > > > > > > > > > > > > > > > -- > > > Stephen Green > > > http://thesearchguy.wordpress.com > > > > > > > > > > > -- > > Cumprimentos, > > David Miranda > > > > > > -- > Stephen Green > http://thesearchguy.wordpress.com > -- Cumprimentos, David Miranda