facetManager.getFacetGroup(facetingName).selectFacets(facetList.toArray(new Facet[facetList.size()]));
facetManager.getFacetGroup(facetingName).selectFacets(facetList.toArray(new Facet[facetList.size()]));
// create a fulltext query Query luceneQuery = builder.all().createQuery(); // match all query FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, clazz ); // retrieve facet manager and apply faceting request FacetManager facetManager = fullTextQuery.getFacetManager(); facetManager.enableFaceting( priceFacetingRequest ); // get the list of Cd List<Cd> cds = fullTextQuery.list(); assertTrue(cds.size() == 10); // retrieve the faceting results List<Facet> facets = facetManager.getFacets( "priceFaceting" ); assertTrue(facets.get(0).getCount() == 2) // apply first facet as additional search criteria FacetSelection facetSelection = facetManager.getFacetGroup( "priceFaceting" ); facetSelection.selectFacets( facets.get( 0 ) ); // re-execute the query cds = fullTextQuery.list(); assertTrue(cds.size() == 2);
public List<Car> selectMenuItem(FacetMenuItem item) { // find the right facet using the facet manager List<Facet> facets = currentFullTextQuery.getFacetManager().getFacets( item.getFacetingName() ); Facet facet = facets.get( item.getIndex() ); selectedFacets.add( facet ); // rer-run the query FullTextSession fullTextSession = Search.getFullTextSession( factory.openSession() ); buildFullTextQuery( queryString, fullTextSession ); Transaction tx = fullTextSession.beginTransaction(); // use the facet to narrow down the query currentFullTextQuery.getFacetManager() .getFacetGroup( item.getFacetingName() ) .selectFacets( selectedFacets.toArray( new Facet[selectedFacets.size()] ) ); List<Car> cars = currentFullTextQuery.list(); tx.commit(); fullTextSession.close(); return cars; }
public List<Car> deSelectMenuItem(FacetMenuItem item) { // find the right facet using the facet manager List<Facet> facets = currentFullTextQuery.getFacetManager().getFacets( item.getFacetingName() ); Facet facet = facets.get( item.getIndex() ); selectedFacets.remove( facet ); // rer-run the query FullTextSession fullTextSession = Search.getFullTextSession( factory.openSession() ); buildFullTextQuery( queryString, fullTextSession ); Transaction tx = fullTextSession.beginTransaction(); // use the facet to narrow down the query currentFullTextQuery.getFacetManager() .getFacetGroup( item.getFacetingName() ) .selectFacets( selectedFacets.toArray( new Facet[] { } ) ); List<Car> cars = currentFullTextQuery.list(); tx.commit(); fullTextSession.close(); return cars; }
@Test public void testDateRangeFaceting() throws Exception { final String facetingName = "albumYearFaceting"; final String fieldName = "releaseYear"; final DateFormat formatter = new SimpleDateFormat( "yyyy", Locale.ROOT ); FacetingRequest rangeRequest = queryBuilder( Cd.class ).facet() .name( facetingName ) .onField( fieldName ) .range() .below( formatter.parse( "1970" ) ).excludeLimit() .from( formatter.parse( "1970" ) ).to( formatter.parse( "1979" ) ) .from( formatter.parse( "1980" ) ).to( formatter.parse( "1989" ) ) .from( formatter.parse( "1990" ) ).to( formatter.parse( "1999" ) ) .above( formatter.parse( "2000" ) ).excludeLimit() .orderedBy( FacetSortOrder.RANGE_DEFINITION_ORDER ) .createFacetingRequest(); FullTextQuery query = createMatchAllQuery( Cd.class ); FacetManager facetManager = query.getFacetManager(); facetManager.enableFaceting( rangeRequest ); List<Facet> facets = facetManager.getFacets( facetingName ); assertFacetCounts( facets, new int[] { 1, 2, 2, 5 } ); facetManager.getFacetGroup( facetingName ).selectFacets( facets.get( 3 ) ); facets = facetManager.getFacets( facetingName ); assertFacetCounts( facets, new int[] { 5 } ); }
facetManager.getFacetGroup( colorFacetName ).selectFacets( colorFacet ); assertFacetCounts( facetManager.getFacets( colorFacetName ), new int[] { 12, 0, 0, 0, 0 } ); assertFacetCounts( facetManager.getFacets( ccsFacetName ), new int[] { 4, 4, 4, 0 } ); facetManager.getFacetGroup( colorFacetName ).selectFacets( colorFacet ); facetManager.getFacetGroup( ccsFacetName ).selectFacets( ccsFacet ); assertFacetCounts( facetManager.getFacets( colorFacetName ), new int[] { 4, 0, 0, 0, 0 } ); assertFacetCounts( facetManager.getFacets( ccsFacetName ), new int[] { 4, 0, 0, 0 } ); assertTrue( "We should be able to find facets amongst the selected ones", facetManager.getFacetGroup( colorFacetName ).getSelectedFacets().contains( facetManager.getFacets( colorFacetName ).get( 0 ) facetManager.getFacetGroup( colorFacetName ).clearSelectedFacets(); facetManager.getFacetGroup( ccsFacetName ).clearSelectedFacets(); assertFacetCounts( facetManager.getFacets( colorFacetName ), new int[] { 12, 12, 12, 12, 2 } ); assertFacetCounts( facetManager.getFacets( ccsFacetName ), new int[] { 17, 16, 16, 1 } );
facetManager.getFacetGroup( facetName ).selectFacets( facetList.get( 0 ), facetList.get( 3 ) ); query.list(); assertEquals( "Wrong number of query matches", 3, query.getResultSize() ); assertFacetValues( facetList, new Object[] { "Egg", "Potato", "Milk", "Onion", "Salt" } ); facetManager.getFacetGroup( facetName ).selectFacets( FacetCombine.AND, facetList.get( 0 ), facetList.get( 3 ) ); query.list(); assertEquals( "Wrong number of query matches", 1, query.getResultSize() );
@Test public void testDiscreteFacetDrillDown() throws Exception { final String facetName = "ccs"; Query luceneQuery = queryBuilder( Car.class ).keyword().onField( "make" ).matching( "Honda" ).createQuery(); FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .includeZeroCounts( true ) .createFacetingRequest(); FullTextQuery query = fullTextSession.createFullTextQuery( luceneQuery, Car.class ); FacetManager facetManager = query.getFacetManager(); facetManager.enableFaceting( request ); query.setFirstResult( 0 ).setMaxResults( 1 ); assertEquals( "Wrong number of query matches", 13, query.getResultSize() ); List<Facet> facetList = facetManager.getFacets( facetName ); assertFacetCounts( facetList, new int[] { 5, 4, 4, 0 } ); facetManager.getFacetGroup( facetName ).selectFacets( facetList.get( 0 ) ); query.list(); assertEquals( "Wrong number of query matches", 5, query.getResultSize() ); List<Facet> newFacetList = facetManager.getFacets( facetName ); assertFacetCounts( newFacetList, new int[] { 5, 0, 0, 0 } ); facetManager.getFacetGroup( facetName ).selectFacets( facetList.get( 1 ) ); query.setMaxResults( 1000 ); // When testing against Elasticsearch you need to stay under the maximum page limit assertEquals( "Wrong number of query matches", 9, query.list().size() ); newFacetList = facetManager.getFacets( facetName ); assertFacetCounts( newFacetList, new int[] { 5, 4, 0, 0 } ); }
@Test @TestForIssue(jiraKey = "HSEARCH-770") public void testRangeBelowWithFacetSelection() { final String facetingName = "truckHorsePowerFaceting"; FacetingRequest rangeRequest = queryBuilder( Truck.class ).facet() .name( facetingName ) .onField( "horsePower" ) .range() .below( 1000 ) .createFacetingRequest(); FullTextQuery query = createMatchAllQuery( Truck.class ); FacetManager facetManager = query.getFacetManager(); query.getFacetManager().enableFaceting( rangeRequest ); List<Facet> facets = facetManager.getFacets( facetingName ); // OK facets = facetManager.getFacets( facetingName ); // Still OK assertFacetCounts( facets, new int[] { 4 } ); facetManager.getFacetGroup( facetingName ).selectFacets( facets.get( 0 ) ); // narrow search on facet facets = facetManager.getFacets( facetingName ); // Exception... assertFacetCounts( facets, new int[] { 4 } ); }
@Test public void testRangeFacetDrillDown() { final String indexFieldName = "price"; final String priceRange = "priceRange"; FacetingRequest rangeRequest = queryBuilder( Fruit.class ).facet() .name( priceRange ) .onField( indexFieldName ) .range() .from( 0.00 ).to( 1.00 ) .from( 1.01 ).to( 1.50 ) .from( 1.51 ).to( 3.00 ) .from( 4.00 ).to( 5.00 ) .includeZeroCounts( true ) .createFacetingRequest(); FullTextQuery query = createMatchAllQuery( Fruit.class ); FacetManager facetManager = query.getFacetManager(); facetManager.enableFaceting( rangeRequest ); assertEquals( "Wrong number of query matches", 10, query.getResultSize() ); List<Facet> facets = facetManager.getFacets( priceRange ); assertFacetCounts( facets, new int[] { 5, 3, 2, 0 } ); facetManager.getFacetGroup( priceRange ).selectFacets( facets.get( 2 ) ); assertEquals( "Wrong number of query matches", 2, query.list().size() ); List<Facet> newFacetList = facetManager.getFacets( priceRange ); assertFacetCounts( newFacetList, new int[] { 2, 0, 0, 0 } ); }