lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Grant Ingersoll <gsing...@apache.org>
Subject Re: Fine Tuning Lucene implementation
Date Wed, 25 Jul 2007 00:59:58 GMT
Inline below

On Jul 24, 2007, at 8:14 PM, Askar Zaidi wrote:

> Sure.
>
>  public float doBodySearch(Searcher searcher,String query, int id){
>
>                  try{
>                                 score = search(searcher, query,id);
>                      }
>                       catch(IOException io){}
>                       catch(ParseException pe){}
>
>                       return score;
>
>                 }
>
>  private float search(Searcher searcher, String queryString, int  
> id) throws
> ParseException, IOException {
>
>         // Build a Query object
>
>         QueryParser queryParser = new QueryParser("contents", new
> KeywordAnalyzer());
>
>         queryParser.setDefaultOperator(QueryParser.Operator.AND);
>
>         Query query = queryParser.parse(queryString);
>
>         // Search for the query
>
>         Hits hits = searcher.search(query);
>         Document doc = null;
>
>         // Examine the Hits object to see if there were any matches
>         int hitCount = hits.length();
>
>                 for(int i=0;i<hitCount;i++){
>                 doc = hits.doc(i);
>                 String str = doc.get("item");
>                 int tmp = Integer.parseInt(str);
>                 if(tmp==id)
>                 score = hits.score(i);
>                 }

Why do you need this if clause?  Can't you make the id a required  
term in your query, that way you know it is a match in all returned  
documents?  Also, do all three of your searches do this inner loop on  
the hits?  You either need to implement caching, or, and this is  
better, I think, you need to refactor so that you can combine your  
various searches into a single search and only loop over the hits  
once.  But, that is just a guess.  I don't actually know what your  
application is doing.  Also, if you are returning "score", why don't  
you break out of the hits loop after you find your hit?

In database land, I think you are doing the equivalent of the n- 
select problem (or whatever they call it, i.e. when you do a select,  
iterate over each select, generating a new select for each statement  
on other tables) and should try to figure out how to do a "join"  
instead, whereby a single query or two gets you all your results and  
then you process them.

-Grant


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


Mime
View raw message