A better way is following: Cache the list of doc-ids for each category - you can cache this in a BitSet.. a bit at index "doc-id" is on if the category is present in document "doc-id", else it is off.
For user query, you need to calculate the BitSet, similar to above way. This can be done in a HitCollector implementation. Then simply do the intersection of user query's BitSet and each category BitSet - find count of "on" bits, this would give you count of documents for each category. The BitSet operations I talked above are already provided in Java, so your piece of code would be really small. Thanks, Shailendra Sharma CTO, Ver Se' Innovation Private Ltd. Bangalore, India On 7/30/07, Dennis Kubes <[EMAIL PROTECTED]> wrote: > > We found that a fast way to do this simply by running a query for each > category and getting the maxDocs. There would be one query for category > getting a single hit. > > Dennis Kubes > > Erick Erickson wrote: > > You might want to search the mail archive for "facets" or "faceted > search" > > (no quotes), as I *think* this might be relevant. > > > > Best > > Erick > > > > On 7/26/07, Ramana Jelda <[EMAIL PROTECTED]> wrote: > >> Hi , > >> Of course this statement is very expensive. > >> -->document.get("CAMPCATID")==null?"":document.get("CAMPCATID"); > >> > >> Use StringIndex/FieldCache/something similar to implement category > >> counting. > >> :) > >> > >> Jelda > >> > >>> -----Original Message----- > >>> From: Bhavin Pandya [mailto:[EMAIL PROTECTED] > >>> Sent: Thursday, July 26, 2007 5:20 PM > >>> To: java-user@lucene.apache.org > >>> Subject: How to show category count with results? > >>> > >>> Hi, > >>> > >>> I want to show each category name and its count with results. > >>> I achieved this using DocCollector but its very slow when no > >>> of results in lacs... As fetching of documents from reader in > >>> collect method is expensive... > >>> > >>> public void collect(int doc, float score) { > >>> Document document = mreader.document(doc); > >>> strcatid = > >>> document.get("CAMPCATID")==null?"":document.get("CAMPCATID"); > >>> > >>> if (catcountmap.containsKey(strcatid)) > >>> { > >>> // catid already exists in hashmap... increase count by one > >>> > >>> value = ((Integer)catcountmap.get(strcatid)).intValue(); > >>> value = value + 1; > >>> catcountmap.put(strcatid,new Integer(value)); > >>> } > >>> else > >>> catcountmap.put(strcatid,new Integer(1)); > >>> > >>> } > >>> > >>> > >>> is there any other better way to achieve this ???? > >>> > >>> > >>> Thanks. > >>> Bhavin pandya > >> > >> --------------------------------------------------------------------- > >> 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] > >