package org.apache.lucene.search;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.Term;
public class SecondOrderWeight extends Weight {
private static final long serialVersionUID = 1999318155593404879L;
private final Weight innerWeight;
private SecondOrderCollector secondOrderCollector;
public SecondOrderWeight(Weight weight,
SecondOrderCollector collector) throws IOException {
super(weight.getQuery());
this.innerWeight = weight;
this.secondOrderCollector = collector;
}
@Override
public float getValueForNormalization() throws IOException {
return innerWeight.getValueForNormalization();
}
@Override
public void normalize(float norm, float topLevelBoost) {
innerWeight.normalize(norm, topLevelBoost);
}
@Override
public Scorer scorer(LeafReaderContext context) throws IOException {
int docBase = context.docBase;
int maxRange = docBase + context.reader().maxDoc();
List<CollectorDoc> hits = secondOrderCollector.getSubReaderResults(docBase, maxRange);
if (hits == null || hits.size() == 0) return null;
return new SecondOrderListOfDocsScorer(innerWeight, hits, docBase);
}
@Override
public void extractTerms(Set<Term> terms) {
innerWeight.extractTerms(terms);
}
@Override
public Explanation explain(LeafReaderContext context, int doc) throws IOException {
return Explanation.match(0.0f, "nested, result of", innerWeight.explain(context, doc));
}
}