public override void Collect(int doc)
{
float score = sc.Score();
lastDoc[0] = doc;
try
{
if (scorer == null)
{
Weight w = q.Weight(s);
scorer = w.Scorer(reader, true, false);
}
int op = order[(opidx[0]++) % order.Length];
// System.out.println(op==skip_op ?
// "skip("+(sdoc[0]+1)+")":"next()");
bool more = op == skip_op
? scorer.Advance(scorer.DocID() + 1) != DocIdSetIterator.NO_MORE_DOCS
: scorer.NextDoc() != DocIdSetIterator.NO_MORE_DOCS;
int scorerDoc = scorer.DocID();
float scorerScore = scorer.Score();
float scorerScore2 = scorer.Score();
float scoreDiff = System.Math.Abs(score - scorerScore);
float scorerDiff = System.Math.Abs(scorerScore2 - scorerScore);
if (!more || doc != scorerDoc || scoreDiff > maxDiff || scorerDiff > maxDiff)
{
System.Text.StringBuilder sbord = new System.Text.StringBuilder();
for (int i = 0; i < order.Length; i++)
sbord.Append(order[i] == skip_op?" skip()":" next()");
throw new System.SystemException("ERROR matching docs:" + "\n\t" + (doc != scorerDoc ? "--> " : "") + "scorerDoc=" +
scorerDoc + "\n\t" + (!more ? "--> " : "") + "tscorer.more=" + more + "\n\t" +
(scoreDiff > maxDiff ? "--> " : "") + "scorerScore=" + scorerScore +
" scoreDiff=" + scoreDiff + " maxDiff=" + maxDiff + "\n\t" +
(scorerDiff > maxDiff ? "--> " : "") + "scorerScore2=" + scorerScore2 +
" scorerDiff=" + scorerDiff + "\n\thitCollector.doc=" + doc + " score=" +
score + "\n\t Scorer=" + scorer + "\n\t Query=" + q + " " +
q.GetType().FullName + "\n\t Searcher=" + s + "\n\t Order=" + sbord +
"\n\t Op=" + (op == skip_op ? " skip()" : " next()"));
}
}
catch (System.IO.IOException e)
{
throw new System.SystemException("", e);
}
}