@Override public RandomAccessDocIdSet getRandomAccessDocIdSet(BoboIndexReader reader) throws IOException { RandomAccessDocIdSet innerDocSet = _facetFilter.getRandomAccessDocIdSet(reader); if (innerDocSet == EmptyDocIdSet.getInstance()) { return innerDocSet; } FacetDataCache dataCache = _facetDataCacheBuilder.build(reader); int totalCount = reader.maxDoc(); TermValueList valArray = dataCache.valArray; int freqCount = 0; ArrayList<String> validVals = new ArrayList<String>(_valSet.size()); for (String val : _valSet) { int idx = valArray.indexOf(val); if (idx >= 0) { validVals.add(valArray.get(idx)); // get and format the value freqCount += dataCache.freqs[idx]; } } if (validVals.size() == 0) { return EmptyDocIdSet.getInstance(); } // takeComplement is only used to choose between TermListRandomAccessDocIdSet and innerDocSet int validFreqCount = _takeComplement ? (totalCount - freqCount) : freqCount; if (_facetDataCacheBuilder.getName() != null && ((validFreqCount << 1) < totalCount)) { return new TermListRandomAccessDocIdSet( _facetDataCacheBuilder.getName(), innerDocSet, validVals, reader); } else { return innerDocSet; } }
public double getFacetSelectivity(BoboIndexReader reader) { double selectivity = _facetFilter.getFacetSelectivity(reader); if (_takeComplement) return 1.0 - selectivity; return selectivity; }