|
30 | 30 | import org.apache.lucene.document.NumericDocValuesField; |
31 | 31 | import org.apache.lucene.index.CorruptIndexException; |
32 | 32 | import org.apache.lucene.index.DirectoryReader; |
| 33 | +import org.apache.lucene.index.FilterDirectoryReader; |
33 | 34 | import org.apache.lucene.index.FilterLeafReader; |
34 | 35 | import org.apache.lucene.index.IndexCommit; |
35 | 36 | import org.apache.lucene.index.IndexFileNames; |
@@ -833,6 +834,58 @@ public int length() { |
833 | 834 | }; |
834 | 835 | } |
835 | 836 |
|
| 837 | + /** |
| 838 | + * Wraps a directory reader to include all live docs. |
| 839 | + * The wrapped reader can be used to query all documents. |
| 840 | + * |
| 841 | + * @param in the input directory reader |
| 842 | + * @return the wrapped reader |
| 843 | + */ |
| 844 | + public static DirectoryReader wrapAllDocsLive(DirectoryReader in) throws IOException { |
| 845 | + return new DirectoryReaderWithAllLiveDocs(in); |
| 846 | + } |
| 847 | + |
| 848 | + private static final class DirectoryReaderWithAllLiveDocs extends FilterDirectoryReader { |
| 849 | + static final class SubReaderWithAllLiveDocs extends FilterLeafReader { |
| 850 | + SubReaderWithAllLiveDocs(LeafReader in) { |
| 851 | + super(in); |
| 852 | + } |
| 853 | + @Override |
| 854 | + public Bits getLiveDocs() { |
| 855 | + return null; |
| 856 | + } |
| 857 | + @Override |
| 858 | + public int numDocs() { |
| 859 | + return maxDoc(); |
| 860 | + } |
| 861 | + @Override |
| 862 | + public CacheHelper getCoreCacheHelper() { |
| 863 | + return in.getCoreCacheHelper(); |
| 864 | + } |
| 865 | + @Override |
| 866 | + public CacheHelper getReaderCacheHelper() { |
| 867 | + return null; // Modifying liveDocs |
| 868 | + } |
| 869 | + } |
| 870 | + DirectoryReaderWithAllLiveDocs(DirectoryReader in) throws IOException { |
| 871 | + super(in, new FilterDirectoryReader.SubReaderWrapper() { |
| 872 | + @Override |
| 873 | + public LeafReader wrap(LeafReader leaf) { |
| 874 | + return new SubReaderWithAllLiveDocs(leaf); |
| 875 | + } |
| 876 | + }); |
| 877 | + } |
| 878 | + @Override |
| 879 | + protected DirectoryReader doWrapDirectoryReader(DirectoryReader in) throws IOException { |
| 880 | + return wrapAllDocsLive(in); |
| 881 | + } |
| 882 | + |
| 883 | + @Override |
| 884 | + public CacheHelper getReaderCacheHelper() { |
| 885 | + return null; // Modifying liveDocs |
| 886 | + } |
| 887 | + } |
| 888 | + |
836 | 889 | /** |
837 | 890 | * Returns a numeric docvalues which can be used to soft-delete documents. |
838 | 891 | */ |
|
0 commit comments