public virtual void TestOpenIfChangedNoChangesButSegmentMerges() { // test openIfChanged() when the taxonomy hasn't really changed, but segments // were merged. The NRT reader will be reopened, and ParentArray used to assert // that the new reader contains more ordinals than were given from the old // TaxReader version Directory dir = NewDirectory(); // hold onto IW to forceMerge // note how we don't close it, since DTW will close it. var iw = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random)).SetMergePolicy(new LogByteSizeMergePolicy())); // LUCENENET: We need to set the index writer before the constructor of the base class is called // because the DirectoryTaxonomyWriter class constructor is the consumer of the OpenIndexWriter method. // The only option seems to be to set it statically before creating the instance. DirectoryTaxonomyWriterAnonymousInnerClassHelper3.iw = iw; DirectoryTaxonomyWriter writer = new DirectoryTaxonomyWriterAnonymousInnerClassHelper3(dir); // add a category so that the following DTR open will cause a flush and // a new segment will be created writer.AddCategory(new FacetLabel("a")); var reader = new DirectoryTaxonomyReader(writer); Assert.AreEqual(2, reader.Count); Assert.AreEqual(2, reader.ParallelTaxonomyArrays.Parents.Length); // merge all the segments so that NRT reader thinks there's a change iw.ForceMerge(1); // now calling openIfChanged should trip on the wrong assert in ParetArray's ctor var newtr = TaxonomyReader.OpenIfChanged(reader); Assert.IsNotNull(newtr); reader.Dispose(); reader = newtr; Assert.AreEqual(2, reader.Count); Assert.AreEqual(2, reader.ParallelTaxonomyArrays.Parents.Length); reader.Dispose(); writer.Dispose(); dir.Dispose(); }
public virtual void TestOpenIfChangedNoChangesButSegmentMerges() { // test openIfChanged() when the taxonomy hasn't really changed, but segments // were merged. The NRT reader will be reopened, and ParentArray used to assert // that the new reader contains more ordinals than were given from the old // TaxReader version Directory dir = NewDirectory(); // hold onto IW to forceMerge // note how we don't close it, since DTW will close it. var iw = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergePolicy(new LogByteSizeMergePolicy())); DirectoryTaxonomyWriter writer = new DirectoryTaxonomyWriterAnonymousInnerClassHelper3(this, dir, iw); // add a category so that the following DTR open will cause a flush and // a new segment will be created writer.AddCategory(new FacetLabel("a")); var reader = new DirectoryTaxonomyReader(writer); Assert.AreEqual(2, reader.Size); Assert.AreEqual(2, reader.ParallelTaxonomyArrays.Parents().Length); // merge all the segments so that NRT reader thinks there's a change iw.ForceMerge(1); // now calling openIfChanged should trip on the wrong assert in ParetArray's ctor var newtr = TaxonomyReader.OpenIfChanged(reader); Assert.NotNull(newtr); reader.Dispose(); reader = newtr; Assert.AreEqual(2, reader.Size); Assert.AreEqual(2, reader.ParallelTaxonomyArrays.Parents().Length); reader.Dispose(); writer.Dispose(); dir.Dispose(); }