I almost forgot ... if/when you want to "apply" some of those facets to a query provided by your user, put the queries for each facet into a list and use...
List<Query> facetToApply = ... DocList result = searcher.getDocList(mainQuery, facetsToApply, yourSort, 0, 20, searcher.GET_SCORES) ..and the filterCache will be used for each facet, the cache DocSets will all be intersected, and the resulting DocSet will be converted to a Filter that will be applied when your mainQuery is executed. -Hoss