magibney commented on code in PR #1236: URL: https://github.com/apache/solr/pull/1236#discussion_r1047195884
########## solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java: ########## @@ -2203,15 +2203,19 @@ public DocListAndSet getDocListAndSet(Query query, Sort lsort, int offset, int l private DocList constantScoreDocList(int offset, int length, DocSet docs) { final int size = docs.size(); - if (length == 0 || size <= offset) { - return new DocSlice(0, 0, new int[0], null, size, 0f, TotalHits.Relation.EQUAL_TO); - } - final DocIterator iter = docs.iterator(); - for (int i = offset; i > 0; i--) { - iter.nextDoc(); // discard - } - final int returnSize = Math.min(length, size - offset); + + // NOTE: it would be possible to special-case `length == 0 || size <= offset` here + // (returning a DocList backed by an empty array) -- but the cases that would practically + // benefit from doing so would be extremely unusual, and likely pathological: + // 1. length==0 in conjunction with offset>0 (why?) + // 2. specifying offset>size (paging beyond end of results) + // This would require special consideration in dealing with cache handling (and generation + // of the final DocList via `DocSlice.subset(int, int)`), and it's just not worth it. + + final int returnSize = Math.min(offset + length, size); Review Comment: Tangential: I think it would be quite straightforward to add a DocList implementation that could support a backing docs int[] that _doesn't_ cover the whole range (basically how I was incorrectly treating DocSlice). If we did that, it would allow to efficiently support arbitrarily deep offset-based paging over constant-score queries. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org