mirror of https://github.com/apache/lucene.git
#35823 - Paul Elschots fix for BooleanScorer2 causing ArrayIndexOutOfBoundsException
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@220228 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3227a9dfb8
commit
7dd3e02a1a
|
@ -99,12 +99,17 @@ class BooleanScorer2 extends Scorer {
|
|||
/** Count a scorer as a single match. */
|
||||
private class SingleMatchScorer extends Scorer {
|
||||
private Scorer scorer;
|
||||
private int lastScoredDoc = -1;
|
||||
|
||||
SingleMatchScorer(Scorer scorer) {
|
||||
super(scorer.getSimilarity());
|
||||
this.scorer = scorer;
|
||||
}
|
||||
public float score() throws IOException {
|
||||
if (doc() > lastScoredDoc) {
|
||||
lastScoredDoc = doc();
|
||||
coordinator.nrMatchers++;
|
||||
}
|
||||
return scorer.score();
|
||||
}
|
||||
public int doc() {
|
||||
|
@ -125,8 +130,12 @@ class BooleanScorer2 extends Scorer {
|
|||
// each scorer from the list counted as a single matcher
|
||||
{
|
||||
return new DisjunctionSumScorer(scorers) {
|
||||
private int lastScoredDoc = -1;
|
||||
public float score() throws IOException {
|
||||
coordinator.nrMatchers += nrMatchers;
|
||||
if (doc() > lastScoredDoc) {
|
||||
lastScoredDoc = doc();
|
||||
coordinator.nrMatchers += super.nrMatchers;
|
||||
}
|
||||
return super.score();
|
||||
}
|
||||
};
|
||||
|
@ -139,8 +148,13 @@ class BooleanScorer2 extends Scorer {
|
|||
{
|
||||
final int requiredNrMatchers = requiredScorers.size();
|
||||
ConjunctionScorer cs = new ConjunctionScorer(defaultSimilarity) {
|
||||
private int lastScoredDoc = -1;
|
||||
|
||||
public float score() throws IOException {
|
||||
if (doc() > lastScoredDoc) {
|
||||
lastScoredDoc = doc();
|
||||
coordinator.nrMatchers += requiredNrMatchers;
|
||||
}
|
||||
// All scorers match, so defaultSimilarity super.score() always has 1 as
|
||||
// the coordination factor.
|
||||
// Therefore the sum of the scores of the requiredScorers
|
||||
|
|
Loading…
Reference in New Issue