Class OrdinalMappingLeafReader

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class OrdinalMappingLeafReader
    extends FilterLeafReader
    A FilterLeafReader for updating facets ordinal references, based on an ordinal map. You should use this code in conjunction with merging taxonomies - after you merge taxonomies, you receive an DirectoryTaxonomyWriter.OrdinalMap which maps the 'old' ordinals to the 'new' ones. You can use that map to re-map the doc values which contain the facets information (ordinals) either before or while merging the indexes.

    For re-mapping the ordinals during index merge, do the following:

     // merge the old taxonomy with the new one.
     OrdinalMap map = new MemoryOrdinalMap();
     DirectoryTaxonomyWriter.addTaxonomy(srcTaxoDir, map);
     int[] ordmap = map.getMap();
    
     // Add the index and re-map ordinals on the go
     DirectoryReader reader = DirectoryReader.open(oldDir);
     IndexWriterConfig conf = new IndexWriterConfig(VER, ANALYZER);
     IndexWriter writer = new IndexWriter(newDir, conf);
     List<LeafReaderContext> leaves = reader.leaves();
     LeafReader wrappedLeaves[] = new LeafReader[leaves.size()];
     for (int i = 0; i < leaves.size(); i++) {
       wrappedLeaves[i] = new OrdinalMappingLeafReader(leaves.get(i).reader(), ordmap);
     }
     writer.addIndexes(new MultiReader(wrappedLeaves));
     writer.commit();
     
    WARNING: This API is experimental and might change in incompatible ways in the next release.