Aggregations: Take the 'from' into account when getting a fetched hit (InternalSearchHit). Hits before the 'from' are included in each shard result.
This commit is contained in:
parent
9c98bb3554
commit
760cee7c24
|
@ -18,7 +18,10 @@
|
|||
*/
|
||||
package org.elasticsearch.search.aggregations.bucket.tophits;
|
||||
|
||||
import org.apache.lucene.search.*;
|
||||
import org.apache.lucene.search.ScoreDoc;
|
||||
import org.apache.lucene.search.Sort;
|
||||
import org.apache.lucene.search.TopDocs;
|
||||
import org.apache.lucene.search.TopFieldDocs;
|
||||
import org.elasticsearch.ExceptionsHelper;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
|
@ -110,7 +113,11 @@ public class InternalTopHits extends InternalAggregation implements TopHits, ToX
|
|||
InternalSearchHit[] hits = new InternalSearchHit[reducedTopDocs.scoreDocs.length];
|
||||
for (int i = 0; i < reducedTopDocs.scoreDocs.length; i++) {
|
||||
ScoreDoc scoreDoc = reducedTopDocs.scoreDocs[i];
|
||||
hits[i] = (InternalSearchHit) shardHits[scoreDoc.shardIndex].getAt(tracker[scoreDoc.shardIndex]++);
|
||||
int position;
|
||||
do {
|
||||
position = tracker[scoreDoc.shardIndex]++;
|
||||
} while (shardDocs[scoreDoc.shardIndex].scoreDocs[position] != scoreDoc);
|
||||
hits[i] = (InternalSearchHit) shardHits[scoreDoc.shardIndex].getAt(position);
|
||||
}
|
||||
return new InternalTopHits(name, new InternalSearchHits(hits, reducedTopDocs.totalHits, reducedTopDocs.getMaxScore()));
|
||||
} catch (IOException e) {
|
||||
|
|
|
@ -209,6 +209,7 @@ public class TopHitsTests extends ElasticsearchIntegrationTest {
|
|||
assertThat(hits.totalHits(), equalTo(controlHits.totalHits()));
|
||||
assertThat(hits.getHits().length, equalTo(controlHits.getHits().length));
|
||||
for (int i = 0; i < hits.getHits().length; i++) {
|
||||
logger.info(i + ": top_hits: [" + hits.getAt(i).id() + "][" + hits.getAt(i).sortValues()[0] + "] control: [" + controlHits.getAt(i).id() + "][" + controlHits.getAt(i).sortValues()[0] + "]");
|
||||
assertThat(hits.getAt(i).id(), equalTo(controlHits.getAt(i).id()));
|
||||
assertThat(hits.getAt(i).sortValues()[0], equalTo(controlHits.getAt(i).sortValues()[0]));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue