Actually I don't like well my proposed way of implementation. 
I wanna play with score to implement the similar logic as I mentioned in my
solution.
But how?

Any suggestions, I would really appreciate. :)

Jelda
> -----Original Message-----
> From: Ramana Jelda [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, March 27, 2007 11:59 AM
> To: java-user@lucene.apache.org
> Subject: RE: How can I use SortComparator in my case?
> 
> Thanks for all your help.
> Here I am coming with the best solution I can see and I am 
> planning to implement this.
> 
> Suppose 20 unique customers && 90,000 results found && to be 
> returned offset results 0-20
> 
> I can think of only following solution.. 
> //Hope pseudo code is self understandable..
> 
> Public MyCollector extends TopFieldDocCollector{  private 
> Hashtable<String, FieldSortedHitQueue> hitQueues = new 
> Hashtable<String, FieldSortedHitQueue>();
> 
>  public void collect(int docId, float score) {
>             super.collect(doc, score);
>             String c = 
> cachedCustomerKeywordTerms.getGroupTerm("customer",
> docId); //like FielCache etc.
>             FieldSortedHitQueue hitQueue = hitQueues.get(c);
>             if(hitQueue == null){
>                 hitQueue = new FieldSortedHitQueue(reader, 
> sort, numHits);
>                 hitQueues.put(c, hitQueue);
>             }
>             hitQueue.insert(new FieldDoc(docId, score));
> 
>     }
> 
> /** 
>     Topdocs implementation overridden.
>     Probably needs some improvements in sorting customers by score..
> */
> 
>  public TopDocs topDocs() {
>        //just preparing Vector to be able to sort easily    
>         Vector<FieldSortedHitQueue> actualHitQueues = new 
> Vector<FieldSortedHitQueue>();
>         Enumeration<FieldSortedHitQueue> e = hitQueues.elements();
>         while(e.hasMoreElements()){
>             FieldSortedHitQueue fq = e.nextElement();
>             actualHitQueues.addElement(fq);
>         }
> 
>         //sort Vector by maxScore.. 
>         Collections.sort(actualHitQueues, new
> Comparator<FieldSortedHitQueue>() {
>                     public int compare(FieldSortedHitQueue 
> o1, FieldSortedHitQueue o2) {
>                         return 
> Float.compare(o1.getMaxScore(), o2.getMaxScore());
>                     }
>                 });
>         
>         TopDocs topDocs = super.topDocs();
>         
>         int i=0;
>         while(i < topDocs.scoreDocs.length){
>             for(int j = 0; j < actualHitQueues.size(); j++){
>                 FieldSortedHitQueue fq = actualHitQueues.get(j);
>                 FieldDoc fd = (FieldDoc) fq.pop();
>                 if(fd != null){
>                     topDocs.scoreDocs[i] = fd;
>                     i =i+1;
>                     if(i==topDocs.scoreDocs.length) break;
>                 }
>             }
>         }
> 
>         return topDocs;
>     }
> }
> 
> 
> I would really appreciate your suggestions or improvements .
> 
> Thx in advance,
> Jelda
> 
> 
> > -----Original Message-----
> > From: Doron Cohen [mailto:[EMAIL PROTECTED]
> > Sent: Monday, March 05, 2007 10:22 PM
> > To: java-user@lucene.apache.org
> > Subject: Re: How can I use SortComparator in my case?
> > 
> > I too cannot think of an indexing configuration that would 
> help this.
> > 
> > However it seems that all the required information exists at search 
> > time, more precisely at hits collection time:
> > - the doc-id and doc-score are known, and used when hits are 
> > collected.
> > - The value of that certain field of interested can be computed - 
> > similar to how it is computed for sorting by a field - but 
> its use is 
> > different - sorting should not be by the value of the field, but 
> > rather by how many docs with the same value for this field were 
> > "collected" so far.
> > 
> > This seems to call for a tailored hit collector. The search 
> API allows 
> > for providing a customized hit collector, where this counting logic 
> > could be added. (The challenge is in avoiding calling
> > reader.document(id,fieldSelector) in collect() because this 
> would be 
> > quite bad for performance in a large collection - see javadocs for
> > HitCollector.collect() - but it must be a large collection, 
> otherwise, 
> > for a small collection, the post process approach proposed 
> here would 
> > do.)
> > 
> > Doron
> > 
> > "Erick Erickson" <[EMAIL PROTECTED]> wrote on
> > 05/03/2007 04:48:10:
> > 
> > > There's a discussion recently where someone pointed me to 
> > > FieldSortedHitQueue, you might trysearchinng for that. Also, try 
> > > "buckets" which was the header of that discussion.
> > >
> > > You can also think about clever indexing schemes with fields that 
> > > allow you to sort however you really need to, although I confess 
> > > nothing jumps out at me given your example.
> > >
> > > Best
> > > Erick
> > >
> > >
> > > On 3/5/07, Ramana Jelda <[EMAIL PROTECTED]> wrote:
> > > >
> > > > This will then be a big hastle. The results are in 100s and 
> > > > sometimes
> > in
> > > > 1000s.
> > > > Hum.. No other better way?
> > > >
> > > > Jelda
> > > >
> > > > > -----Original Message-----
> > > > > From: Mordo, Aviran (EXP N-NANNATEK) 
> > > > > [mailto:[EMAIL PROTECTED]
> > > > > Sent: Friday, March 02, 2007 8:02 PM
> > > > > To: java-user@lucene.apache.org
> > > > > Subject: RE: How can I use SortComparator in my case?
> > > > >
> > > > > You'll need to do it manually and not with Lucene.
> > > > >
> > > > > Just grab all the results from Lucene and process 
> them yourself.
> > > > >
> > > > > Aviran
> > > > > http://aviransplace.com
> > > > >
> > > > > -----Original Message-----
> > > > > From: Ramana Jelda [mailto:[EMAIL PROTECTED]
> > > > > Sent: Friday, March 02, 2007 5:45 AM
> > > > > To: java-user@lucene.apache.org
> > > > > Subject: How can I use SortComparator in my case?
> > > > >
> > > > > Hi,
> > > > > I have a requirement to sort search results in a round robin.
> > > > > Ex:sorting results by field "customer"
> > > > > suppose following customers are found (number of results in
> > > > > brackets) and results are sorted by customer.
> > > > >
> > > > > Amazon(10)
> > > > > Dell(2)
> > > > > EBay(4)
> > > > > Yahoo(20)
> > > > >
> > > > > but I want to sort them in the following way,
> > > > > Amazon(1)
> > > > > Dell(1)
> > > > > EBay(1)
> > > > > Yahoo(1)
> > > > >
> > > > > Amazon(1)
> > > > > Dell(1)
> > > > > EBay(1)
> > > > > Yahoo(1)
> > > > >
> > > > > Amazon(1)
> > > > > EBay(1)
> > > > > Yahoo(1)
> > > > >
> > > > > Amazon(1)
> > > > > EBay(1)
> > > > > Yahoo(1)
> > > > >
> > > > > etc.. etc..
> > > > >
> > > > >
> > > > > You think I can use somehow SortComparator here?
> > > > > any suggestions?
> > > > >
> > > > > Thx,
> > > > > Jelda
> > > > >
> > > > >
> > > > > 
> > ------------------------------------------------------------------
> > > > > --- To unsubscribe, e-mail: 
> > > > > [EMAIL PROTECTED]
> > > > > For additional commands, e-mail: 
> > [EMAIL PROTECTED]
> > > > >
> > > >
> > > >
> > > > 
> > --------------------------------------------------------------------
> > > > - To unsubscribe, e-mail: 
> [EMAIL PROTECTED]
> > > > For additional commands, e-mail: 
> [EMAIL PROTECTED]
> > > >
> > > >
> > 
> > 
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to