Package org.apache.lucene.facet.index
Class FacetsPayloadProcessorProvider
- java.lang.Object
-
- org.apache.lucene.index.PayloadProcessorProvider
-
- org.apache.lucene.facet.index.FacetsPayloadProcessorProvider
-
public class FacetsPayloadProcessorProvider extends PayloadProcessorProvider
APayloadProcessorProvider
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 anDirectoryTaxonomyWriter.OrdinalMap
which maps the 'old' payloads to the 'new' ones. You can use that map to re-map the payloads which contain the facets information (ordinals) either before or while merging the indexes.For re-mapping the ordinals before you merge the indexes, do the following:
// merge the old taxonomy with the new one. OrdinalMap map = LuceneTaxonomyWriter.addTaxonomies(); int[] ordmap = map.getMap(); // re-map the ordinals on the old directory. Directory oldDir; FacetsPayloadProcessorProvider fppp = new FacetsPayloadProcessorProvider( oldDir, ordmap); IndexWriterConfig conf = new IndexWriterConfig(VER, ANALYZER); conf.setMergePolicy(new ForceOptimizeMergePolicy()); IndexWriter writer = new IndexWriter(oldDir, conf); writer.setPayloadProcessorProvider(fppp); writer.forceMerge(1); writer.close(); // merge that directory with the new index. IndexWriter newWriter; // opened on the 'new' Directory newWriter.addIndexes(oldDir); newWriter.commit();
For re-mapping the ordinals during index merge, do the following:// merge the old taxonomy with the new one. OrdinalMap map = LuceneTaxonomyWriter.addTaxonomies(); int[] ordmap = map.getMap(); // Add the index and re-map ordinals on the go IndexReader r = IndexReader.open(oldDir); IndexWriterConfig conf = new IndexWriterConfig(VER, ANALYZER); IndexWriter writer = new IndexWriter(newDir, conf); writer.setPayloadProcessorProvider(fppp); writer.addIndexes(r); writer.commit();
NOTE: while the second example looks simpler, IndexWriter may trigger a long merge due to addIndexes. The first example avoids this perhaps unneeded merge, as well as can be done separately (e.g. on another node) before the index is merged.
- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FacetsPayloadProcessorProvider.FacetsDirPayloadProcessor
static class
FacetsPayloadProcessorProvider.FacetsPayloadProcessor
A PayloadProcessor for updating facets ordinal references, based on an ordinal map-
Nested classes/interfaces inherited from class org.apache.lucene.index.PayloadProcessorProvider
PayloadProcessorProvider.DirPayloadProcessor, PayloadProcessorProvider.PayloadProcessor, PayloadProcessorProvider.ReaderPayloadProcessor
-
-
Constructor Summary
Constructors Constructor Description FacetsPayloadProcessorProvider(Directory dir, int[] ordinalMap, FacetIndexingParams indexingParams)
Construct FacetsPayloadProcessorProvider with FacetIndexingParams
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description PayloadProcessorProvider.ReaderPayloadProcessor
getReaderProcessor(IndexReader reader)
Returns aPayloadProcessorProvider.ReaderPayloadProcessor
for the givenDirectory
, through whichPayloadProcessorProvider.PayloadProcessor
s can be obtained for eachTerm
, ornull
if none should be used.-
Methods inherited from class org.apache.lucene.index.PayloadProcessorProvider
getDirProcessor
-
-
-
-
Constructor Detail
-
FacetsPayloadProcessorProvider
public FacetsPayloadProcessorProvider(Directory dir, int[] ordinalMap, FacetIndexingParams indexingParams)
Construct FacetsPayloadProcessorProvider with FacetIndexingParams- Parameters:
dir
- theDirectory
containing the segments to updateordinalMap
- an array mapping previous facets ordinals to new onesindexingParams
- the facets indexing parameters
-
-
Method Detail
-
getReaderProcessor
public PayloadProcessorProvider.ReaderPayloadProcessor getReaderProcessor(IndexReader reader) throws IOException
Description copied from class:PayloadProcessorProvider
Returns aPayloadProcessorProvider.ReaderPayloadProcessor
for the givenDirectory
, through whichPayloadProcessorProvider.PayloadProcessor
s can be obtained for eachTerm
, ornull
if none should be used. You should override this method, notPayloadProcessorProvider.getDirProcessor(org.apache.lucene.store.Directory)
.- Overrides:
getReaderProcessor
in classPayloadProcessorProvider
- Throws:
IOException
-
-