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]