@Test public void testSimpleFaceting() throws Exception { String facetName = "ccs"; FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .createFacetingRequest(); FullTextQuery query = matchAll( request ); List<Facet> facetList = query.getFacetManager().getFacets( facetName ); assertEquals( "Wrong number of facets", 4, facetList.size() ); assertFacet( facetList.get( 0 ), "2407", 17 ); assertFacet( facetList.get( 1 ), "2831", 16 ); assertFacet( facetList.get( 2 ), "3398", 16 ); assertFacet( facetList.get( 3 ), "2500", 1 ); }
@Test public void testSimpleDiscretFacetingQuery() throws Exception { FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .createFacetingRequest(); FullTextQuery query = queryHondaWithFacet( request ); List<Facet> facetList = query.getFacetManager().getFacets( facetName ); assertEquals( "Wrong number of facets", 3, facetList.size() ); }
@Test public void testSimpleDiscretFacetingWithNoResultsQuery() throws Exception { FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .createFacetingRequest(); FullTextQuery query = queryHondaNoResultsWithFacet( request ); List<Facet> facetList = query.getFacetManager().getFacets( facetName ); assertEquals( "Wrong number of facets", 0, facetList.size() ); }
@Test public void testSimpleDiscretFaceting() throws Exception { FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .createFacetingRequest(); FullTextQuery query = queryHondaWithFacet( request ); List<Facet> facetList = query.getFacetManager().getFacets( facetName ); assertEquals( "Wrong number of facets", 3, facetList.size() ); }
@Test public void testFacetingOnEmptyIndex() throws Exception { FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .createFacetingRequest(); FullTextQuery query = queryHondaWithFacet( request ); List<Facet> facetList = query.getFacetManager().getFacets( facetName ); assertEquals( "Wrong number of facets", 0, facetList.size() ); }
@Test public void testNullFieldNameThrowsException() { try { queryBuilder( Car.class ).facet() .name( facetName ) .onField( null ) .discrete() .createFacetingRequest(); fail( "null should not be a valid field name" ); } catch (IllegalArgumentException e) { // success } }
@Test public void testNullRequestNameThrowsException() { try { queryBuilder( Car.class ).facet() .name( null ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .createFacetingRequest(); fail( "null should not be a valid request name" ); } catch (IllegalArgumentException e) { // success } }
public void testFaceting() throws Exception { QueryBuilder queryBuilder = qf.buildQueryBuilderForClass(Car.class).get(); FacetingRequest request = queryBuilder.facet() .name(facetName) .onField(indexFieldName) .discrete() .createFacetingRequest(); Query luceneQuery = queryBuilder.all().createQuery(); CacheQuery<?> query = qf.getQuery(luceneQuery); query.getFacetManager().enableFaceting(request); List<Facet> facetList = query.getFacetManager().getFacets(facetName); assertEquals("Wrong number of facets", 2, facetList.size()); assertEquals("4000", facetList.get(0).getValue()); assertEquals(2, facetList.get(0).getCount()); assertEquals(indexFieldName, facetList.get(0).getFieldName()); assertEquals("2341", facetList.get(1).getValue()); assertEquals(1, facetList.get(1).getCount()); assertEquals(indexFieldName, facetList.get(1).getFieldName()); }
@Test public void testEnableDisableFacets() { FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .createFacetingRequest(); FullTextQuery query = queryHondaWithFacet( request ); assertTrue( "We should have facet results", query.getFacetManager().getFacets( facetName ).size() > 0 ); query.getFacetManager().disableFaceting( facetName ); query.list(); assertTrue( "We should have no facets", query.getFacetManager().getFacets( facetName ).size() == 0 ); }
@Test public void testDefaultSortOrderIsCount() throws Exception { FacetingRequest request = queryBuilder( Car.class ).facet() .name( facetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_STRING_ENCODING ) .discrete() .createFacetingRequest(); FullTextQuery query = queryHondaWithFacet( request ); List<Facet> facetList = query.getFacetManager().getFacets( facetName ); assertFacetCounts( facetList, new int[] { 5, 4, 4 } ); }
@Test public void testUnknownFieldNameThrowsException() { FacetingRequest request = queryBuilder( Car.class ).facet() .name( "foo" ) // faceting name is irrelevant .onField( "foobar" ) // foobar is not a valid field name .discrete() .createFacetingRequest(); try { FullTextQuery query = queryHondaWithFacet( request ); query.getFacetManager().getFacets( "foo" ); fail( "The specified field name did not exist. Faceting request should fail" ); } catch (SearchException e) { assertTrue( "Unexpected error message: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000268" ) ); } }
@Test public void testKnownFieldNameNotConfiguredForFacetingThrowsException() { FacetingRequest request = queryBuilder( Fruit.class ).facet() .name( "foo" ) // faceting name is irrelevant .onField( "name" ) // name is a valid property of apple, but not configured for faceting .discrete() .createFacetingRequest(); try { FullTextQuery query = fullTextSession.createFullTextQuery( new MatchAllDocsQuery(), Fruit.class ); query.getFacetManager().enableFaceting( request ); assertEquals( "Wrong number of query matches", 1, query.getResultSize() ); query.getFacetManager().getFacets( "foo" ); fail( "The specified field name did not exist. Faceting request should fail" ); } catch (SearchException e) { assertTrue( "Unexpected error message: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000268" ) ); } }
.onField( indexFieldName ) .discrete() .createFacetingRequest();
@Test public void clear_faceting() throws Exception { QueryBuilder qb = helper.queryBuilder( IndexedEntity.class ); HSQuery hsQuery = queryAll(); helper.assertThat( hsQuery ).matchesExactlyIds( 0, 1, 2 ); String facetingRequestName = "facet1"; FacetingRequest facetingRequest1 = qb.facet() .name( facetingRequestName ) .onField( "facetField" ) .discrete() .createFacetingRequest(); hsQuery.getFacetManager().enableFaceting( facetingRequest1 ); helper.assertThat( hsQuery ).facets( facetingRequestName ) .includes( "zero", 1 ) .includes( "one", 1 ) .includes( "two", 1 ) .only(); hsQuery.getFacetManager().disableFaceting( facetingRequestName ); helper.assertThat( hsQuery ).facets( facetingRequestName ).isEmpty(); }
private void buildFullTextQuery(String queryString, FullTextSession fullTextSession) { // get a query builder final QueryBuilder builder = fullTextSession.getSearchFactory() .buildQueryBuilder() .forEntity( Car.class ) .get(); // build a Lucene query final Query query = builder.keyword().onField( "make" ).matching( queryString ).createQuery(); // create facets for navigation // discrete faceting final FacetingRequest colorFacet = builder.facet() .name( colorFacetName ) .onField( "color" ) .discrete() .createFacetingRequest(); // range faceting final FacetingRequest priceFacet = builder.facet() .name( cubicCapacityFacetName ) .onField( Car.CUBIC_CAPACITY_STRING_FACET_NUMERIC_ENCODING ) .range() .below( 2500 ).excludeLimit() .from( 2500 ).to( 3000 ) .above( 3000 ).excludeLimit() .createFacetingRequest(); // create the fulltext query, enable the facets via the facet manager and return the results currentFullTextQuery = fullTextSession.createFullTextQuery( query, Car.class ); currentFullTextQuery.setFirstResult( 0 ).setMaxResults( 20 ); currentFullTextQuery.getFacetManager().enableFaceting( colorFacet ).enableFaceting( priceFacet ); }