@SuppressWarnings("unchecked") private static boolean isFiltered(int notAdjustedDocId, IndexReader reader, Filter filter) throws IOException { if (filter == null) { return false; } if (reader instanceof BaseCompositeReader) { BaseCompositeReader<IndexReader> indexReader = (BaseCompositeReader<IndexReader>) reader; List<? extends IndexReader> sequentialSubReaders = BaseCompositeReaderUtil.getSequentialSubReaders(indexReader); int readerIndex = BaseCompositeReaderUtil.readerIndex(indexReader, notAdjustedDocId); int readerBase = BaseCompositeReaderUtil.readerBase(indexReader, readerIndex); int docId = notAdjustedDocId - readerBase; IndexReader orgReader = sequentialSubReaders.get(readerIndex); SegmentReader sReader = AtomicReaderUtil.getSegmentReader(orgReader); if (sReader != null) { SegmentReader segmentReader = (SegmentReader) sReader; DocIdSet docIdSet = filter.getDocIdSet(segmentReader.getContext(), segmentReader.getLiveDocs()); DocIdSetIterator iterator = docIdSet.iterator(); if (iterator == null) { return true; } if (iterator.advance(docId) == docId) { return false; } return true; } throw new RuntimeException("Reader has to be a SegmentReader [" + orgReader + "]"); } else { throw new RuntimeException("Reader has to be a BaseCompositeReader [" + reader + "]"); } }