[hibernate-issues] [Hibernate-JIRA] Commented: (HSEARCH-883) Index out of bound exception on range facets when IncludeZeroCount = false, maxCount > actual count

Elmer van Chastelet (JIRA) noreply at atlassian.com
Tue Aug 30 05:34:03 EDT 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43396#comment-43396 ] 

Elmer van Chastelet commented on HSEARCH-883:
---------------------------------------------

Probably includeZeroCount=false is actually not required to get the exception. As long as maxCount is set higher than the actual facets to be returned, it will fail (which is more likely when includeZeroCounts= false).

> Index out of bound exception on range facets when IncludeZeroCount = false, maxCount > actual count
> ---------------------------------------------------------------------------------------------------
>
>                 Key: HSEARCH-883
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-883
>             Project: Hibernate Search
>          Issue Type: Bug
>          Components: query
>    Affects Versions: 3.4.1.Final, 4.0.0.Alpha1
>            Reporter: Elmer van Chastelet
>              Labels: faceting
>         Attachments: FacetCollector.diff, RangeFacetingTest.diff
>
>   Original Estimate: 1m
>  Remaining Estimate: 1m
>
> As reported in the mailing list.
> I just upgraded to from HS 3.4.0 to 3.4.1.
> When using range faceting with includeZeroCount=false AND setMaxCount is set higher than the actual facets after filtering out the zero counts, I get this exception:
> {code}
> exception message: toIndex = 3
> java.lang.IndexOutOfBoundsException: toIndex = 3
>         at java.util.ArrayList.subListRangeCheck(ArrayList.java:885)
>         at java.util.ArrayList.subList(ArrayList.java:877)
>         at org.hibernate.search.query.collector.FacetCollector.createSortedFacetList(FacetCollector.java:139)
>         at org.hibernate.search.query.collector.FacetCollector.getFacetList(FacetCollector.java:128)
>         at org.hibernate.search.query.engine.impl.QueryHits.updateTopDocs(QueryHits.java:236)
>         at org.hibernate.search.query.engine.impl.QueryHits.<init>(QueryHits.java:127)
>         at org.hibernate.search.query.engine.impl.HSQueryImpl.getQueryHits(HSQueryImpl.java:419)
>         at org.hibernate.search.query.engine.impl.HSQueryImpl.queryDocumentExtractor(HSQueryImpl.java:275)
>         at org.hibernate.search.query.engine.impl.FacetManagerImpl.getFacets(FacetManagerImpl.java:111)
>         at org.webdsl.search.AbstractEntitySearcher.getFacets(AbstractEntitySearcher.java:520)
> {code}
> This is introduced by the fix for [HSEARCH-776|https://hibernate.onjira.com/browse/HSEARCH-776]
> Fix is easy and attached, just like an additional test.
> see:
> {code:java|title=FacetCollector.diff}
> Index: FacetCollector.java
> ===================================================================
> --- FacetCollector.java	(revision 1712)
> +++ FacetCollector.java	(working copy)
> @@ -136,7 +136,7 @@
>  			facetList = createRangeFacetList( counter.getCounts().entrySet(), request, counter.getCounts().size() );
>  			Collections.sort( facetList, new RangeDefinitionOrderFacetComparator( ) );
>  			if ( facetRequest.getMaxNumberOfFacets() > 0 ) {
> -				facetList = facetList.subList( 0, facetRequest.getMaxNumberOfFacets() );
> +				facetList = facetList.subList( 0, Math.min( facetRequest.getMaxNumberOfFacets(), facetList.size() ) );
>  			}
>  		}
>  		else {
> {code}
> {code:java|title=Failing test}
> public void testRangeQueryRangeDefOrderMaxCountWithoutZeroCount() {
> 	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_ODER )
> 			.maxFacetCount(4)
> 			.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() );
> }
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list