@Test @TestForIssue(jiraKey = "HSEARCH-809") public void testStringFaceting() throws Exception { FacetingRequest request = queryBuilder( Car.class ).facet() .name( "manufacturer" ) .onField( "make" ) .discrete() .includeZeroCounts( false ) .createFacetingRequest(); FullTextQuery query = matchAll( request ); List<Facet> facetList = query.getFacetManager().getFacets( "manufacturer" ); assertEquals( "Wrong number of facets", 5, facetList.size() ); assertFacet( facetList.get( 0 ), "Honda", 13 ); assertFacet( facetList.get( 1 ), "BMW", 12 ); assertFacet( facetList.get( 2 ), "Mercedes", 12 ); assertFacet( facetList.get( 3 ), "Toyota", 12 ); assertFacet( facetList.get( 4 ), "Ford", 1 ); }
@Test public void testAllIndexedManyToOneValuesGetCounted() throws Exception { FacetingRequest request = queryBuilder( Company.class ).facet() .name( facetName ) .onField( indexFieldName ) .discrete() .includeZeroCounts( true ) .createFacetingRequest(); FullTextQuery query = queryCompanyWithFacet( request ); List<Facet> facetList = query.getFacetManager().getFacets( facetName ); assertEquals( "Wrong number of facets", 2, facetList.size() ); // check count in facet Iterator<Facet> itr = facetList.iterator(); while ( itr.hasNext() ) { Facet item = itr.next(); assertEquals( "Wrong count of facet", 1, item.getCount() ); } }
/** * Asserts that a sortable field with collation (whose value is analyzed) * doesn't conflict with a facet, even if the sortable field and the facet have * conflicting (identical) names. * * This makes sense because both features use DocValues internally, and we'd * like to make sure Lucene doesn't mix the two. */ @Test @TestForIssue(jiraKey = "HSEARCH-2376") public void testStringFacetingWithNameCollision() throws Exception { FacetingRequest request = queryBuilder( Car.class ).facet() .name( "manufacturer" ) .onField( "facetNameCollision" ) .discrete() .includeZeroCounts( false ) .createFacetingRequest(); FullTextQuery query = matchAll( request ); List<Facet> facetList = query.getFacetManager().getFacets( "manufacturer" ); assertEquals( "Wrong number of facets", 5, facetList.size() ); assertFacet( facetList.get( 0 ), "Honda", 13 ); assertFacet( facetList.get( 1 ), "BMW", 12 ); assertFacet( facetList.get( 2 ), "Mercedes", 12 ); assertFacet( facetList.get( 3 ), "Toyota", 12 ); assertFacet( facetList.get( 4 ), "Ford", 1 ); }
private void doDiscreteFacetingQuery() { QueryBuilder qb = helper.queryBuilder( FacetedEntity.class ); FacetingRequest request = qb.facet() .name( "myRequest" ) .onField( "stringField" ) .discrete() .includeZeroCounts( false ) .createFacetingRequest(); // Mainly, we're testing that executing the query with faceting enabled won't explode HSQuery hsQuery = helper.hsQuery( FacetedEntity.class ); hsQuery.getFacetManager().enableFaceting( request ); helper.assertThat( hsQuery ) .facets( "myRequest" ) .isEmpty(); }
.onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .includeZeroCounts( true ) .createFacetingRequest();
.onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .includeZeroCounts( true ) .createFacetingRequest();
.onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .includeZeroCounts( true ) .createFacetingRequest();
@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 } ); }
.onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .includeZeroCounts( true ) .createFacetingRequest(); .onField( colorFacetFieldName ) .discrete() .includeZeroCounts( true ) .createFacetingRequest();