package querqy.lucene.rewrite;
import org.apache.lucene.index.*;
import org.apache.lucene.search.IndexSearcher;
import java.io.IOException;
/**
* Created by rene on 10/09/2016.
*/
public class StandardDocumentFrequencyAndTermContextProvider extends AbstractDocumentFrequencyAndTermContextProvider {
@Override
protected TermStats doCalculateTermContexts(IndexSearcher searcher) throws IOException {
IndexReaderContext topReaderContext = searcher.getTopReaderContext();
int[] dfs = new int[terms.size()];
TermContext[] contexts = new TermContext[dfs.length];
for (int i = 0; i < dfs.length; i++) {
Term term = terms.get(i);
contexts[i] = new TermContext(topReaderContext);
for (final LeafReaderContext ctx : topReaderContext.leaves()) {
final Fields fields = ctx.reader().fields();
if (fields != null) {
final Terms terms = fields.terms(term.field());
if (terms != null) {
final TermsEnum termsEnum = terms.iterator();
if (termsEnum.seekExact(term.bytes())) {
final TermState termState = termsEnum.termState();
int df = termsEnum.docFreq();
dfs[i] = dfs[i] + df;
contexts[i].register(termState, ctx.ord, df, -1);
}
}
}
}
}
return new TermStats(dfs, contexts, topReaderContext);
}
}