First of all, I just wanted to say that I just started working with Solr and really like the results I'm getting from Solr (in terms of performance, flexibility) as well as the good responses I'm getting from this group. Hopefully I will be able to contribute in way way or another to this wonderful application in the future!
The current issue that I'm having is the following ( I tried not to be long-winded, but somehow that didn't work out :-) ): I'm extending StandardRequestHandler to no only show the counts per facet-value but also the top-N results per facet-value (where N is configurable). (See http://www.nabble.com/Result-grouping-options-tf4522284.html#a12900630 for where I got the idea from). I quickly implemented this by fetching a doclist for each of my facet-values and appending these to the result as suggested in the refered post, no problems there. However, I realized that for calculating the count for each of the facetvalues, the original standardrequesthandler already loops the doclist to check for matches. Therefore my implementation actually does double work, since it gets doclists for each of the facetvalues again. My question: is there a way to get to the already calculated doclist per facetvalue from a subclassed StandardRequestHandler, and so get a nice speedup? This facet-falculation seems to go deep into the core of Solr (SimpleFacets.getFacetTermEnumCounts) and seems not very sensible to alter for just this requirement. opinions appreciated. Some additional info: I have a requirement to be able to limit the result to explicitly specified facet-values. For that I do something like: select? qt=toplist &q=name:A OR name:B OR name:C &sort=sortfield asc &facet=true &facet.field=name &facet.limit=1 &rows=2 This all works okay and results in a faceting/grouping by field: 'name', where for each facetvalue (A, B, C) 2 results are shown (ordered by sortfield). The relevant code from the subclassed standardRequestHandler is below. As can be seen I alter the query by adding the facetvalue to FQ (which is almost guarenteed to already exist in FQ btw.) Therefore a second question is: will there be a noticable speedup when persuing the above, since the request that is done per facet-value is nothing more than giving the ordered result of the intersection of the overall query (which is in the querycache) and the facetvalue itself (which is almost certainly in the filtercache). As a last and somewhat related question: is there a way to explicity specify facet-values that I want to include in the faceting without (ab)using Q? This is relevant for me since the perfect solution would be to have the ability to orthogonally get multiple toplists in 1 query. Given the current implementation, this orthoganality is now 'corrupted' as injection of a fieldvalue in Q for one facetfield influences the outcome of another facetfield. kind regards, Geert-Jan --------------------------- if(true) //TODO: this needs facetinfo as a precondition. { NamedList facetFieldList = ((NamedList)facetInfo.get("facet_fields")); for(int i = 0; i < facetFieldList.size(); i++) { NamedList facetValList = (NamedList)facetFieldList.getVal(i); for(int j = 0; j < facetValList.size(); j++) { NamedList facetValue = new SimpleOrderedMap(); // facetValue.add("count", valList.getVal(j)); DocListAndSet resultList = new DocListAndSet(); Query facetq = QueryParsing.parseQuery( facetFieldList.getName(i) + ":" + facetValList.getName(j), req.getSchema()); resultList.docList = s.getDocList(query,facetq, sort,p.getInt(CommonParams.START,0), p.getInt(CommonParams.ROWS,3)); facetValue.add("results",resultList.docList); facetValList.setVal(j, facetValue); } } rsp.add("facet_results", facetFieldList); } -- View this message in context: http://www.nabble.com/showing-results-per-facet-value-efficiently-tf4600154.html#a13133815 Sent from the Solr - User mailing list archive at Nabble.com.