Hi, sorry for the following lengthy code example, but it is hard to demonstrate this much shorter. The example shows how you can enable multiple facets and then continuously restrict the query result by chaining facets into a FacetFilter (which delegates to a ChainedFilter underneath). WDYT? If you want to see all the code or even get the feature branch - https://github.com/hferentschik/hibernate-search/blob/HSEARCH-706
public void testMultipleFacetDrillDown() throws Exception { final String ccsFacetName = "ccs"; final String ccsFacetFieldName = "cubicCapacity"; FacetRequest ccsFacetRequest = queryBuilder( Car.class ).facet() .name( ccsFacetName ) .onField( ccsFacetFieldName ) .discrete() .createFacet(); final String colorFacetName = "color"; final String colorFacetFieldName = "color"; FacetRequest colorFacetRequest = queryBuilder( Car.class ).facet() .name( colorFacetName ) .onField( colorFacetFieldName ) .discrete() .createFacet(); FullTextQuery query = createMatchAllQuery( Car.class ); query.enableFacet( colorFacetRequest ); query.enableFacet( ccsFacetRequest ); assertEquals( "Wrong number of query matches", 50, query.getResultSize() ); List<Facet> colorFacetList = getFacetListForFacet( query, colorFacetName ); assertFacetCounts( colorFacetList, new int[] { 12, 12, 12, 12, 2 } ); List<Facet> ccsFacetList = getFacetListForFacet( query, ccsFacetName ); assertFacetCounts( ccsFacetList, new int[] { 17, 16, 16, 1 } ); FacetFilter facetFilter = new FacetFilter(); query.setFilter( facetFilter ); facetFilter.addFacet( colorFacetList.get( 0 ) ); colorFacetList = getFacetListForFacet( query, colorFacetName ); assertFacetCounts( colorFacetList, new int[] { 12, 0, 0, 0, 0 } ); ccsFacetList = getFacetListForFacet( query, ccsFacetName ); assertFacetCounts( ccsFacetList, new int[] { 4, 4, 4, 0 } ); facetFilter.addFacet( ccsFacetList.get( 0 ) ); // needs to set the filter explicitly atm, because I need the query state to reset query.setFilter( facetFilter ); colorFacetList = getFacetListForFacet( query, colorFacetName ); assertFacetCounts( colorFacetList, new int[] { 4, 0, 0, 0, 0 } ); ccsFacetList = getFacetListForFacet( query, ccsFacetName ); assertFacetCounts( ccsFacetList, new int[] { 4, 0, 0, 0 } ); } I like the idea of using Lucene Filters to implement the drilldown for. It seems the most natural and the original query stays untouched. --Hardy _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev