package com.browseengine.bobo.facets.filter;
import java.io.IOException;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
import com.browseengine.bobo.api.BoboSegmentReader;
import com.browseengine.bobo.docidset.NotDocIdSet;
import com.browseengine.bobo.docidset.RandomAccessDocIdSet;
public class RandomAccessNotFilter extends RandomAccessFilter {
protected final RandomAccessFilter _innerFilter;
public RandomAccessNotFilter(RandomAccessFilter innerFilter) {
_innerFilter = innerFilter;
}
@Override
public double getFacetSelectivity(BoboSegmentReader reader) {
double selectivity = _innerFilter.getFacetSelectivity(reader);
selectivity = selectivity > 0.999 ? 0.0 : (1 - selectivity);
return selectivity;
}
@Override
public RandomAccessDocIdSet getRandomAccessDocIdSet(BoboSegmentReader reader) throws IOException {
final RandomAccessDocIdSet innerDocIdSet = _innerFilter.getRandomAccessDocIdSet(reader);
final DocIdSet notInnerDocIdSet = new NotDocIdSet(innerDocIdSet, reader.maxDoc());
return new RandomAccessDocIdSet() {
@Override
public boolean get(int docId) {
return !innerDocIdSet.get(docId);
}
@Override
public DocIdSetIterator iterator() throws IOException {
return notInnerDocIdSet.iterator();
}
};
}
}