[hibernate-issues] [Hibernate-JIRA] Updated: (HSEARCH-883) Index out of bound exception on range facets when IncludeZeroCount = false, maxCount > actual count (Elmer van Chastelet)
Sanne Grinovero (JIRA)
noreply at atlassian.com
Tue Aug 30 05:38:02 EDT 2011
[ http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-883?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sanne Grinovero updated HSEARCH-883:
------------------------------------
Fix Version/s: 4.0.0.Alpha2
3.4.2
Assignee: Sanne Grinovero
Remaining Estimate: 10m (was: 1m)
Original Estimate: 10m (was: 1m)
Summary: Index out of bound exception on range facets when IncludeZeroCount = false, maxCount > actual count (Elmer van Chastelet) (was: Index out of bound exception on range facets when IncludeZeroCount = false, maxCount > actual count)
> Index out of bound exception on range facets when IncludeZeroCount = false, maxCount > actual count (Elmer van Chastelet)
> -------------------------------------------------------------------------------------------------------------------------
>
> 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
> Assignee: Sanne Grinovero
> Labels: faceting
> Fix For: 3.4.2, 4.0.0.Alpha2
>
> Attachments: FacetCollector.diff, RangeFacetingTest.diff
>
> Original Estimate: 10m
> Remaining Estimate: 10m
>
> 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