Index: modules/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java =================================================================== --- modules/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java (revision 1206586) +++ modules/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java (working copy) @@ -233,7 +233,10 @@ * etc.
* NOTE: the instance this method returns will be closed upon calling * to {@link #close()}. - * + *
NOTE: internal docids of this index must not be altered. + * For that, categories are never deleted from the taxonomy index. + * In addition, the merge policy in effect must not merge segments out of order. + * * @param directory * the {@link Directory} on top of which an {@link IndexWriter} * should be opened. @@ -245,10 +248,20 @@ // Make sure we use a MergePolicy which merges segments in-order and thus // keeps the doc IDs ordered as well (this is crucial for the taxonomy // index). - IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, + IndexWriterConfig config = createIndexWriterConfig(openMode); + return new IndexWriter(directory, config); + } + + /** + * Create the {@link IndexWriterConfig} that would be used for opening the internal index writer. + *
The merge policy in effect must not merge segments out of order. See + * comment in {@link #openIndexWriter(Directory, OpenMode) openIndexWriter()} for the logic behind this. + * @param openMode see {@link OpenMode} + */ + protected IndexWriterConfig createIndexWriterConfig(OpenMode openMode) { + return new IndexWriterConfig(Version.LUCENE_40, new KeywordAnalyzer()).setOpenMode(openMode).setMergePolicy( new LogByteSizeMergePolicy()); - return new IndexWriter(directory, config); } // Currently overridden by a unit test that verifies that every index we open