Re: Lucene Concurrent Search

2013-09-06 Thread Ian Lea
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.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,

Re: Lucene Concurrent Search

2013-09-06 Thread Stephen Green
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.comwrote:

 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 

Re: Lucene Concurrent Search

2013-09-06 Thread David Miranda
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 

Re: Lucene Concurrent Search

2013-09-06 Thread Stephen Green
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 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;
 --
 Cumprimentos,
 David Miranda



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


Re: Lucene Concurrent Search

2013-09-05 Thread Ian Lea
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 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.

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



Re: Lucene Concurrent Search

2013-09-05 Thread Aditya
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.comwrote:

 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

2013-09-05 Thread Ian Lea
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



Re: Lucene Concurrent Search

2013-09-05 Thread David Miranda
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


Re: Lucene Concurrent Search

2013-09-05 Thread David Miranda
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


Re: Lucene Concurrent Search

2013-09-05 Thread Ian Lea
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



Re: Lucene Concurrent Search

2013-09-05 Thread David Miranda
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


Re: Lucene Concurrent Search

2013-09-05 Thread Stephen Green
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


Lucene Concurrent Search

2013-09-04 Thread David Miranda
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.