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
> > >
> > >
>
>
>
>