public class OrdinalMappingAtomicReader extends FilterAtomicReader
FilterAtomicReader
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<AtomicReaderContext> leaves = reader.leaves(); AtomicReader wrappedLeaves[] = new AtomicReader[leaves.size()]; for (int i = 0; i < leaves.size(); i++) { wrappedLeaves[i] = new OrdinalMappingAtomicReader(leaves.get(i).reader(), ordmap); } writer.addIndexes(new MultiReader(wrappedLeaves)); writer.commit();
FilterAtomicReader.FilterDocsAndPositionsEnum, FilterAtomicReader.FilterDocsEnum, FilterAtomicReader.FilterFields, FilterAtomicReader.FilterTerms, FilterAtomicReader.FilterTermsEnum
AtomicReader.CoreClosedListener
IndexReader.ReaderClosedListener
in
Constructor and Description |
---|
OrdinalMappingAtomicReader(AtomicReader in,
int[] ordinalMap,
FacetsConfig srcConfig)
Wraps an AtomicReader, mapping ordinals according to the ordinalMap, using
the provided
FacetsConfig which was used to build the wrapped
reader. |
Modifier and Type | Method and Description |
---|---|
protected BytesRef |
encode(IntsRef ordinals)
Expert: encodes category ordinals into a BytesRef.
|
BinaryDocValues |
getBinaryDocValues(String field) |
protected OrdinalsReader |
getOrdinalsReader(String field)
Expert: override in case you used custom encoding for the categories under
this field.
|
addCoreClosedListener, checkIntegrity, doClose, document, fields, getDocsWithField, getFieldInfos, getLiveDocs, getNormValues, getNumericDocValues, getSortedDocValues, getSortedNumericDocValues, getSortedSetDocValues, getTermVectors, maxDoc, numDocs, removeCoreClosedListener, toString, unwrap
addCoreClosedListenerAsReaderClosedListener, docFreq, getContext, getDocCount, getSumDocFreq, getSumTotalTermFreq, hasNorms, removeCoreClosedListenerAsReaderClosedListener, termDocsEnum, termPositionsEnum, terms, totalTermFreq
addReaderClosedListener, close, decRef, document, document, ensureOpen, equals, getCombinedCoreAndDeletesKey, getCoreCacheKey, getRefCount, getTermVector, hasDeletions, hashCode, incRef, leaves, numDeletedDocs, open, open, open, open, open, registerParentReader, removeReaderClosedListener, tryIncRef
public OrdinalMappingAtomicReader(AtomicReader in, int[] ordinalMap, FacetsConfig srcConfig)
FacetsConfig
which was used to build the wrapped
reader.protected BytesRef encode(IntsRef ordinals)
protected OrdinalsReader getOrdinalsReader(String field)
public BinaryDocValues getBinaryDocValues(String field) throws IOException
getBinaryDocValues
in class FilterAtomicReader
IOException
Copyright © 2000-2014 Apache Software Foundation. All Rights Reserved.