Interface IndexReader.CacheHelper

  • All Known Implementing Classes:
    FilterDirectoryReader.DelegatingCacheHelper
    Enclosing class:
    IndexReader

    public static interface IndexReader.CacheHelper
    A utility class that gives hooks in order to help build a cache based on the data that is contained in this index.

    Example: cache the number of documents that match a query per reader.

     public class QueryCountCache {
    
       private final Query query;
       private final Map<IndexReader.CacheKey, Integer> counts = new ConcurrentHashMap<>();
    
       // Create a cache of query counts for the given query
       public QueryCountCache(Query query) {
         this.query = query;
       }
    
       // Count the number of matches of the query on the given IndexSearcher
       public int count(IndexSearcher searcher) throws IOException {
         IndexReader.CacheHelper cacheHelper = searcher.getIndexReader().getReaderCacheHelper();
         if (cacheHelper == null) {
           // reader doesn't support caching
           return searcher.count(query);
         } else {
           // make sure the cache entry is cleared when the reader is closed
           cacheHelper.addClosedListener(counts::remove);
           return counts.computeIfAbsent(cacheHelper.getKey(), cacheKey -> {
             try {
               return searcher.count(query);
             } catch (IOException e) {
               throw new UncheckedIOException(e);
             }
           });
         }
       }
    
     }
     
    WARNING: This API is experimental and might change in incompatible ways in the next release.