diff --git a/solr/core/src/java/org/apache/solr/search/Grouping.java b/solr/core/src/java/org/apache/solr/search/Grouping.java index 8fff90b2a92..fd4fe6a2d1c 100755 --- a/solr/core/src/java/org/apache/solr/search/Grouping.java +++ b/solr/core/src/java/org/apache/solr/search/Grouping.java @@ -585,7 +585,7 @@ public class Grouping { } } - int len = Math.min(numGroups, docsGathered); + int len = docsGathered - offset; if (offset > len) { len = 0; } diff --git a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java index f5f91b67844..17ce2a12dde 100644 --- a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java +++ b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java @@ -182,7 +182,22 @@ public class TestGroupingSearch extends SolrTestCaseJ4 { ); } + @Test + public void testGroupingSimpleFormatArrayIndexOutOfBoundsException() throws Exception { + assertU(add(doc("id", "1"))); + assertU(add(doc("id", "2"))); + assertU(add(doc("id", "3"))); + assertU(commit()); + assertJQ( + req("q", "*:*", "start", "1", "group", "true", "group.field", "id", "group.main", "true"), + "/response=={'numFound':3,'start':1,'docs':[{'id':'2'},{'id':'3'}]}" + ); + assertJQ( + req("q", "*:*", "start", "1", "rows", "1", "group", "true", "group.field", "id", "group.main", "true"), + "/response=={'numFound':3,'start':1,'docs':[{'id':'2'}]}" + ); + } static String f = "foo_i"; static String f2 = "foo2_i";