Hey Hira , Thanks so much for the reply. Much appreciate it.
Quote: Would it be possible to just include a query clause? - i.e., instead of just contents:<userQuery>, also add +id:<idWeCareAbout> How can I do that ? I see my query as : +contents:harvard +contents:business +contents:review where the search phrase was: harvard business review Now how can I add +id:<idWeCareAbout> ?? This would give me that one exact document I am looking for , for that id. I don't have to iterate through hits. thanks, Askar On 7/24/07, N. Hira <[EMAIL PROTECTED]> wrote: > > I'm no expert on this (so please accept the comments in that context) > but 2 things seem weird to me: > > 1. Iterating over each hit is an expensive proposition. I've often > seen people recommending a HitCollector. > > 2. It seems that doBodySearch() is essentially saying, do this search > and return the score pertinent to this ID (using an exhaustive loop). > Would it be possible to just include a query clause? > - i.e., instead of just contents:<userQuery>, also add > +id:<idWeCareAbout> > > In general though, I think your algorithm seems inefficient (if I > understand it correctly):-- if I want to search for one term among 3 in > a "collection" of 300 documents (as defined by some external attribute), > I will wind up executing 300 x 3 searches, and for each search that is > executed, I will iterate over every Hit, even if I've already found the > one that I "care about". > > What would break if you: > 1. Included "creator" in the Lucene index (or, filtered out the Hits > using a BitSet or something like it) > 2. Executed 1 search > 3. Collected the results of the first N Hits (where N is some > reasonable limit, like 100 or 500) > > -h > > > On Tue, 2007-07-24 at 20:14 -0400, 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); > > } > > > > return score; > > } > > > > I really need to optimize doBodySearch(...) as this takes the most > > time. > > > > thanks guys, > > Askar > > > > > > On 7/24/07, N. Hira <[EMAIL PROTECTED]> wrote: > > > > Could you show us the relevant source from doBodySearch()? > > > > -h > > > > On Tue, 2007-07-24 at 19:58 -0400, Askar Zaidi wrote: > > > I ran some tests and it seems that the slowness is from > > Lucene calls when I > > > do "doBodySearch", if I remove that call, Lucene gives me > > results in 5 > > > seconds. otherwise it takes about 50 seconds. > > > > > > But I need to do Body search and that field contains lots of > > text. The field > > > is <contents>. How can I optimize that ? > > > > > > thanks, > > > Askar > > > > > > > > > >