mirror of https://github.com/apache/lucene.git
SOLR-12875: AIOOBE fix when unique()/uniqueBlock() is used with DVHASH method in json.facet
This commit is contained in:
parent
ac1925045d
commit
5aa8ad5b14
|
@ -228,6 +228,9 @@ Bug Fixes
|
||||||
|
|
||||||
* SOLR-7557: Fix parsing of child documents using queryAndStreamResponse (Marvin Bredal Lillehaug/Stian Østerhaug via janhoy)
|
* SOLR-7557: Fix parsing of child documents using queryAndStreamResponse (Marvin Bredal Lillehaug/Stian Østerhaug via janhoy)
|
||||||
|
|
||||||
|
* SOLR-12875: fix ArrayIndexOutOfBoundsException when unique(field) or uniqueBlock(_root_) is
|
||||||
|
used with DVHASH method in json.facet. (Tim Underwood via Mikhail Khludnev)
|
||||||
|
|
||||||
Improvements
|
Improvements
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,13 @@ public class UniqueBlockAgg extends UniqueAgg {
|
||||||
Arrays.fill(counts, 0);
|
Arrays.fill(counts, 0);
|
||||||
Arrays.fill(lastSeenValuesPerSlot, Integer.MIN_VALUE);
|
Arrays.fill(lastSeenValuesPerSlot, Integer.MIN_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resize(Resizer resizer) {
|
||||||
|
lastSeenValuesPerSlot = resizer.resize(lastSeenValuesPerSlot, Integer.MIN_VALUE);
|
||||||
|
super.resize(resizer);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getValue(int slot) throws IOException {
|
public Object getValue(int slot) throws IOException {
|
||||||
return counts[slot];
|
return counts[slot];
|
||||||
|
|
|
@ -148,5 +148,8 @@ abstract class UniqueSlotAcc extends SlotAcc {
|
||||||
@Override
|
@Override
|
||||||
public void resize(Resizer resizer) {
|
public void resize(Resizer resizer) {
|
||||||
arr = resizer.resize(arr, null);
|
arr = resizer.resize(arr, null);
|
||||||
|
if (counts != null) {
|
||||||
|
counts = resizer.resize(counts, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2410,7 +2410,72 @@ public class TestJsonFacets extends SolrTestCaseHS {
|
||||||
", books2:{ buckets:[ {val:q,count:1} ] }" +
|
", books2:{ buckets:[ {val:q,count:1} ] }" +
|
||||||
"}"
|
"}"
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An explicit test for unique*(_root_) across all methods
|
||||||
|
*/
|
||||||
|
public void testUniquesForMethod() throws Exception {
|
||||||
|
final Client client = Client.localClient();
|
||||||
|
|
||||||
|
final SolrParams p = params("rows","0");
|
||||||
|
|
||||||
|
client.deleteByQuery("*:*", null);
|
||||||
|
|
||||||
|
SolrInputDocument parent;
|
||||||
|
parent = sdoc("id", "1", "type_s","book", "book_s","A", "v_t","q");
|
||||||
|
client.add(parent, null);
|
||||||
|
|
||||||
|
parent = sdoc("id", "2", "type_s","book", "book_s","B", "v_t","q w");
|
||||||
|
parent.addChildDocument( sdoc("id","2.1", "type_s","page", "page_s","a", "v_t","x y z") );
|
||||||
|
parent.addChildDocument( sdoc("id","2.2", "type_s","page", "page_s","b", "v_t","x y ") );
|
||||||
|
parent.addChildDocument( sdoc("id","2.3", "type_s","page", "page_s","c", "v_t"," y z" ) );
|
||||||
|
client.add(parent, null);
|
||||||
|
|
||||||
|
parent = sdoc("id", "3", "type_s","book", "book_s","C", "v_t","q w e");
|
||||||
|
parent.addChildDocument( sdoc("id","3.1", "type_s","page", "page_s","d", "v_t","x ") );
|
||||||
|
parent.addChildDocument( sdoc("id","3.2", "type_s","page", "page_s","e", "v_t"," y ") );
|
||||||
|
parent.addChildDocument( sdoc("id","3.3", "type_s","page", "page_s","f", "v_t"," z") );
|
||||||
|
client.add(parent, null);
|
||||||
|
|
||||||
|
parent = sdoc("id", "4", "type_s","book", "book_s","D", "v_t","e");
|
||||||
|
client.add(parent, null);
|
||||||
|
|
||||||
|
client.commit();
|
||||||
|
|
||||||
|
client.testJQ(params(p, "q", "type_s:page"
|
||||||
|
, "json.facet", "{" +
|
||||||
|
" types: {" +
|
||||||
|
" type:terms," +
|
||||||
|
" field:type_s," +
|
||||||
|
" limit:-1," +
|
||||||
|
" facet: {" +
|
||||||
|
" in_books: \"unique(_root_)\" }"+
|
||||||
|
" }," +
|
||||||
|
" pages: {" +
|
||||||
|
" type:terms," +
|
||||||
|
" field:page_s," +
|
||||||
|
" limit:-1," +
|
||||||
|
" facet: {" +
|
||||||
|
" in_books: \"uniqueBlock(_root_)\" }"+
|
||||||
|
" }" +
|
||||||
|
"}" )
|
||||||
|
|
||||||
|
, "response=={numFound:6,start:0,docs:[]}"
|
||||||
|
, "facets=={ count:6," +
|
||||||
|
"types:{" +
|
||||||
|
" buckets:[ {val:page, count:6, in_books:2} ]}" +
|
||||||
|
"pages:{" +
|
||||||
|
" buckets:[ " +
|
||||||
|
" {val:a, count:1, in_books:1}," +
|
||||||
|
" {val:b, count:1, in_books:1}," +
|
||||||
|
" {val:c, count:1, in_books:1}," +
|
||||||
|
" {val:d, count:1, in_books:1}," +
|
||||||
|
" {val:e, count:1, in_books:1}," +
|
||||||
|
" {val:f, count:1, in_books:1}" +
|
||||||
|
" ]}" +
|
||||||
|
"}"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue