* this method is not synced.
*/
public static OpenBitSet getPrimeDocBitSet(Term primeDocTerm, IndexReader reader) throws IOException {
Object key = reader.getCoreCacheKey();
final Map<Object, OpenBitSet> primeDocMap = getPrimeDocMap(primeDocTerm);
OpenBitSet bitSet = primeDocMap.get(key);
if (bitSet == null) {
reader.addReaderClosedListener(new ReaderClosedListener() {
@Override
public void onClose(IndexReader reader) {
Object key = reader.getCoreCacheKey();
LOG.debug("Current size [" + primeDocMap.size() + "] Prime Doc BitSet removing for segment [" + reader + "]");
primeDocMap.remove(key);
}
});
LOG.debug("Prime Doc BitSet missing for segment [" + reader + "] current size [" + primeDocMap.size() + "]");
final OpenBitSet bs = new OpenBitSet(reader.maxDoc());
primeDocMap.put(key, bs);
IndexSearcher searcher = new IndexSearcher(reader);
searcher.search(new TermQuery(primeDocTerm), new Collector() {
@Override
public void setScorer(Scorer scorer) throws IOException {
}
@Override
public void setNextReader(AtomicReaderContext atomicReaderContext) throws IOException {
}
@Override
public void collect(int doc) throws IOException {
bs.set(doc);
}
@Override
public boolean acceptsDocsOutOfOrder() {
return false;