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. */
|
/** Count a scorer as a single match. */
|
||||||
private class SingleMatchScorer extends Scorer {
|
private class SingleMatchScorer extends Scorer {
|
||||||
private Scorer scorer;
|
private Scorer scorer;
|
||||||
|
private int lastScoredDoc = -1;
|
||||||
|
|
||||||
SingleMatchScorer(Scorer scorer) {
|
SingleMatchScorer(Scorer scorer) {
|
||||||
super(scorer.getSimilarity());
|
super(scorer.getSimilarity());
|
||||||
this.scorer = scorer;
|
this.scorer = scorer;
|
||||||
}
|
}
|
||||||
public float score() throws IOException {
|
public float score() throws IOException {
|
||||||
coordinator.nrMatchers++;
|
if (doc() > lastScoredDoc) {
|
||||||
|
lastScoredDoc = doc();
|
||||||
|
coordinator.nrMatchers++;
|
||||||
|
}
|
||||||
return scorer.score();
|
return scorer.score();
|
||||||
}
|
}
|
||||||
public int doc() {
|
public int doc() {
|
||||||
|
@ -125,8 +130,12 @@ class BooleanScorer2 extends Scorer {
|
||||||
// each scorer from the list counted as a single matcher
|
// each scorer from the list counted as a single matcher
|
||||||
{
|
{
|
||||||
return new DisjunctionSumScorer(scorers) {
|
return new DisjunctionSumScorer(scorers) {
|
||||||
|
private int lastScoredDoc = -1;
|
||||||
public float score() throws IOException {
|
public float score() throws IOException {
|
||||||
coordinator.nrMatchers += nrMatchers;
|
if (doc() > lastScoredDoc) {
|
||||||
|
lastScoredDoc = doc();
|
||||||
|
coordinator.nrMatchers += super.nrMatchers;
|
||||||
|
}
|
||||||
return super.score();
|
return super.score();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -139,8 +148,13 @@ class BooleanScorer2 extends Scorer {
|
||||||
{
|
{
|
||||||
final int requiredNrMatchers = requiredScorers.size();
|
final int requiredNrMatchers = requiredScorers.size();
|
||||||
ConjunctionScorer cs = new ConjunctionScorer(defaultSimilarity) {
|
ConjunctionScorer cs = new ConjunctionScorer(defaultSimilarity) {
|
||||||
|
private int lastScoredDoc = -1;
|
||||||
|
|
||||||
public float score() throws IOException {
|
public float score() throws IOException {
|
||||||
coordinator.nrMatchers += requiredNrMatchers;
|
if (doc() > lastScoredDoc) {
|
||||||
|
lastScoredDoc = doc();
|
||||||
|
coordinator.nrMatchers += requiredNrMatchers;
|
||||||
|
}
|
||||||
// All scorers match, so defaultSimilarity super.score() always has 1 as
|
// All scorers match, so defaultSimilarity super.score() always has 1 as
|
||||||
// the coordination factor.
|
// the coordination factor.
|
||||||
// Therefore the sum of the scores of the requiredScorers
|
// Therefore the sum of the scores of the requiredScorers
|
||||||
|
|
Loading…
Reference in New Issue