for (String facetField : facetFields) { FacetingRequest facetingRequest = queryBuilder.facet().name(facetField + FACET_NAME_SUFFIX).onField(facetField) .discrete().orderedBy(FacetSortOrder.COUNT_DESC).includeZeroCounts(false).maxFacetCount(facetCount) .createFacetingRequest(); facetManager.enableFaceting(facetingRequest);
for (String facetField : facetFields) { FacetingRequest facetingRequest = queryBuilder.facet().name(facetField + FACET_NAME_SUFFIX).onField(facetField) .discrete().orderedBy(FacetSortOrder.COUNT_DESC).includeZeroCounts(false).maxFacetCount(facetCount) .createFacetingRequest(); facetManager.enableFaceting(facetingRequest);
@Test public void testFacetEmbeddedAndCollections() throws Exception { FullTextSession fullTextSession = Search.getFullTextSession( openSession() ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( new MatchAllDocsQuery(), Book.class ); QueryBuilder builder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity( Book.class ).get(); FacetingRequest facetReq = builder.facet() .name( "someFacet" ) .onField( "authors.name_untokenized" ) .discrete() .orderedBy( FacetSortOrder.COUNT_DESC ) .includeZeroCounts( false ) .maxFacetCount( 10 ) .createFacetingRequest(); List<Facet> facets = fullTextQuery.getFacetManager().enableFaceting( facetReq ).getFacets( "someFacet" ); assertEquals( "There should be three facets", 3, facets.size() ); assertFacet( facets.get( 0 ), hugo, 3 ); assertFacet( facets.get( 1 ), moliere, 2 ); assertFacet( facets.get( 2 ), voltaire, 1 ); fullTextSession.close(); }
@Test @TestForIssue(jiraKey = "HSEARCH-776") public void testMaxFacetCounts() throws Exception { FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .orderedBy( FacetSortOrder.COUNT_DESC ) .maxFacetCount( 1 ) .createFacetingRequest(); FullTextQuery query = queryHondaWithFacet( request ); List<Facet> facetList = query.getFacetManager().getFacets( facetName ); assertEquals( "The number of facets should be restricted", 1, facetList.size() ); assertFacetCounts( facetList, new int[] { 5 } ); }
@Test public void stringCollection() throws Exception { StringCollectionFacetEntity entity = new StringCollectionFacetEntity( 1L ); helper.add( entity ); entity = new StringCollectionFacetEntity( 1L, "foo" ); helper.add( entity ); entity = new StringCollectionFacetEntity( 2L, "foo", "bar" ); helper.add( entity ); HSQuery hsQuery = sfHolder.getSearchFactory().createHSQuery( new MatchAllDocsQuery(), StringCollectionFacetEntity.class ); QueryBuilder builder = sfHolder.getSearchFactory().buildQueryBuilder().forEntity( StringCollectionFacetEntity.class ).get(); FacetingRequest facetReq = builder.facet() .name( "someFacet" ) .onField( "facet" ) .discrete() .orderedBy( FacetSortOrder.COUNT_DESC ) .includeZeroCounts( false ) .maxFacetCount( 10 ) .createFacetingRequest(); List<Facet> facets = hsQuery.getFacetManager().enableFaceting( facetReq ).getFacets( "someFacet" ); assertEquals( "There should be two facets", 2, facets.size() ); assertFacet( facets.get( 0 ), "foo", 2 ); assertFacet( facets.get( 1 ), "bar", 1 ); }
@Test public void stringMap() throws Exception { StringMapFacetEntity entity = new StringMapFacetEntity( 1L ); helper.add( entity ); entity = new StringMapFacetEntity( 1L, "foo" ); helper.add( entity ); entity = new StringMapFacetEntity( 2L, "foo", "bar" ); helper.add( entity ); HSQuery hsQuery = sfHolder.getSearchFactory().createHSQuery( new MatchAllDocsQuery(), StringMapFacetEntity.class ); QueryBuilder builder = sfHolder.getSearchFactory().buildQueryBuilder().forEntity( StringMapFacetEntity.class ).get(); FacetingRequest facetReq = builder.facet() .name( "someFacet" ) .onField( "facet" ) .discrete() .orderedBy( FacetSortOrder.COUNT_DESC ) .includeZeroCounts( false ) .maxFacetCount( 10 ) .createFacetingRequest(); List<Facet> facets = hsQuery.getFacetManager().enableFaceting( facetReq ).getFacets( "someFacet" ); assertEquals( "There should be two facets", 2, facets.size() ); assertFacet( facets.get( 0 ), "foo", 2 ); assertFacet( facets.get( 1 ), "bar", 1 ); }
@Test public void stringArray() throws Exception { StringArrayFacetEntity entity = new StringArrayFacetEntity( 1L ); helper.add( entity ); entity = new StringArrayFacetEntity( 1L, "foo" ); helper.add( entity ); entity = new StringArrayFacetEntity( 2L, "foo", "bar" ); helper.add( entity ); HSQuery hsQuery = sfHolder.getSearchFactory().createHSQuery( new MatchAllDocsQuery(), StringArrayFacetEntity.class ); QueryBuilder builder = sfHolder.getSearchFactory().buildQueryBuilder().forEntity( StringArrayFacetEntity.class ).get(); FacetingRequest facetReq = builder.facet() .name( "someFacet" ) .onField( "facet" ) .discrete() .orderedBy( FacetSortOrder.COUNT_DESC ) .includeZeroCounts( false ) .maxFacetCount( 10 ) .createFacetingRequest(); List<Facet> facets = hsQuery.getFacetManager().enableFaceting( facetReq ).getFacets( "someFacet" ); assertEquals( "There should be two facets", 2, facets.size() ); assertFacet( facets.get( 0 ), "foo", 2 ); assertFacet( facets.get( 1 ), "bar", 1 ); }
@Test public void testRangeQueryRangeDefOrderHigherMaxCount() { 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( false ) .orderedBy( FacetSortOrder.RANGE_DEFINITION_ORDER ) .maxFacetCount( 5 ) .createFacetingRequest(); FullTextQuery query = createMatchAllQuery( Fruit.class ); FacetManager facetManager = query.getFacetManager(); facetManager.enableFaceting( rangeRequest ); List<Facet> facets = query.getFacetManager().getFacets( priceRange ); assertFacetCounts( facets, new int[] { 2, 3, 5 } ); assertEquals( "[0.0, 1.0]", facets.get( 0 ).getValue() ); assertEquals( "[1.01, 1.5]", facets.get( 1 ).getValue() ); assertEquals( "[1.51, 3.0]", facets.get( 2 ).getValue() ); }
@Test @Ignore // HSEARCH-1927 : Range faceting on multiple numeric values does not work public void numberCollection() throws Exception { NumberCollectionFacetEntity entity = new NumberCollectionFacetEntity( 1L ); helper.add( entity ); entity = new NumberCollectionFacetEntity( 1L, 42.2f ); helper.add( entity ); entity = new NumberCollectionFacetEntity( 2L, 42.3f, 442.2f ); helper.add( entity ); HSQuery hsQuery = sfHolder.getSearchFactory().createHSQuery( new MatchAllDocsQuery(), NumberCollectionFacetEntity.class ); QueryBuilder builder = sfHolder.getSearchFactory().buildQueryBuilder().forEntity( NumberCollectionFacetEntity.class ).get(); FacetingRequest facetReq = builder.facet() .name( "someFacet" ) .onField( "facet" ) .range() .from( 0.0f ).to( 100.0f ).excludeLimit() .from( 100.0f ).to( 500.0f ).excludeLimit() .orderedBy( FacetSortOrder.COUNT_DESC ) .includeZeroCounts( false ) .maxFacetCount( 10 ) .createFacetingRequest(); List<Facet> facets = hsQuery.getFacetManager().enableFaceting( facetReq ).getFacets( "someFacet" ); assertEquals( "There should be two facets", 2, facets.size() ); assertFacet( facets.get( 0 ), "[0.0, 100.0)", 2 ); assertFacet( facets.get( 1 ), "[100.0, 500.0)", 1 ); }
@Test @Ignore // HSEARCH-1927 : Range faceting on multiple numeric values does not work public void numberArray() throws Exception { NumberArrayFacetEntity entity = new NumberArrayFacetEntity( 1L ); helper.add( entity ); entity = new NumberArrayFacetEntity( 1L, 42 ); helper.add( entity ); entity = new NumberArrayFacetEntity( 2L, 43, 442 ); helper.add( entity ); HSQuery hsQuery = sfHolder.getSearchFactory().createHSQuery( new MatchAllDocsQuery(), NumberArrayFacetEntity.class ); QueryBuilder builder = sfHolder.getSearchFactory().buildQueryBuilder().forEntity( NumberArrayFacetEntity.class ).get(); FacetingRequest facetReq = builder.facet() .name( "someFacet" ) .onField( "facet" ) .range() .from( 0.0f ).to( 100.0f ).excludeLimit() .from( 100.0f ).to( 500.0f ).excludeLimit() .orderedBy( FacetSortOrder.COUNT_DESC ) .includeZeroCounts( false ) .maxFacetCount( 10 ) .createFacetingRequest(); List<Facet> facets = hsQuery.getFacetManager().enableFaceting( facetReq ).getFacets( "someFacet" ); assertEquals( "There should be two facets", 2, facets.size() ); assertFacet( facets.get( 0 ), "[0.0, 100.0)", 2 ); assertFacet( facets.get( 1 ), "[100.0, 500.0)", 1 ); }
@Test @Ignore // HSEARCH-1927 : Range faceting on multiple numeric values does not work public void numberMap() throws Exception { NumberMapFacetEntity entity = new NumberMapFacetEntity( 1L ); helper.add( entity ); entity = new NumberMapFacetEntity( 1L, 42.2f ); helper.add( entity ); entity = new NumberMapFacetEntity( 2L, 42.3f, 442.2f ); helper.add( entity ); HSQuery hsQuery = sfHolder.getSearchFactory().createHSQuery( new MatchAllDocsQuery(), NumberMapFacetEntity.class ); QueryBuilder builder = sfHolder.getSearchFactory().buildQueryBuilder().forEntity( NumberMapFacetEntity.class ).get(); FacetingRequest facetReq = builder.facet() .name( "someFacet" ) .onField( "facet" ) .range() .from( 0.0f ).to( 100.0f ).excludeLimit() .from( 100.0f ).to( 500.0f ).excludeLimit() .orderedBy( FacetSortOrder.COUNT_DESC ) .includeZeroCounts( false ) .maxFacetCount( 10 ) .createFacetingRequest(); List<Facet> facets = hsQuery.getFacetManager().enableFaceting( facetReq ).getFacets( "someFacet" ); assertEquals( "There should be two facets", 2, facets.size() ); assertFacet( facets.get( 0 ), "[0.0, 100.0)", 2 ); assertFacet( facets.get( 1 ), "[100.0, 500.0)", 1 ); }