public virtual void TestAddEmpty() { Directory dest = NewDirectory(); var destTW = new DirectoryTaxonomyWriter(dest); destTW.AddCategory(new FacetLabel("Author", "Rob Pike")); destTW.AddCategory(new FacetLabel("Aardvarks", "Bob")); destTW.Commit(); Directory src = NewDirectory(); (new DirectoryTaxonomyWriter(src)).Dispose(); // create an empty taxonomy OrdinalMap map = randomOrdinalMap(); destTW.AddTaxonomy(src, map); destTW.Dispose(); validate(dest, src, map); IOUtils.Close(dest, src); }
public virtual void TestCommitUserData() { // Verifies taxonomy commit data Directory dir = NewDirectory(); var taxoWriter = new DirectoryTaxonomyWriter(dir, OpenMode.CREATE_OR_APPEND, NO_OP_CACHE); taxoWriter.AddCategory(new FacetLabel("a")); taxoWriter.AddCategory(new FacetLabel("b")); IDictionary<string, string> userCommitData = new Dictionary<string, string>(); userCommitData["testing"] = "1 2 3"; taxoWriter.CommitData = userCommitData; taxoWriter.Dispose(); var r = DirectoryReader.Open(dir); Assert.AreEqual(3, r.NumDocs, "2 categories plus root should have been committed to the underlying directory"); var readUserCommitData = r.IndexCommit.UserData; Assert.True("1 2 3".Equals(readUserCommitData["testing"]), "wrong value extracted from commit data"); Assert.NotNull(DirectoryTaxonomyWriter.INDEX_EPOCH + " not found in commitData", readUserCommitData[DirectoryTaxonomyWriter.INDEX_EPOCH]); r.Dispose(); // open DirTaxoWriter again and commit, INDEX_EPOCH should still exist // in the commit data, otherwise DirTaxoReader.refresh() might not detect // that the taxonomy index has been recreated. taxoWriter = new DirectoryTaxonomyWriter(dir, OpenMode.CREATE_OR_APPEND, NO_OP_CACHE); taxoWriter.AddCategory(new FacetLabel("c")); // add a category so that commit will happen taxoWriter.CommitData = new Dictionary<string, string>() { {"just", "data"} }; taxoWriter.Commit(); // verify taxoWriter.getCommitData() Assert.NotNull(DirectoryTaxonomyWriter.INDEX_EPOCH + " not found in taoxWriter.commitData", taxoWriter.CommitData[DirectoryTaxonomyWriter.INDEX_EPOCH]); taxoWriter.Dispose(); r = DirectoryReader.Open(dir); readUserCommitData = r.IndexCommit.UserData; Assert.NotNull(DirectoryTaxonomyWriter.INDEX_EPOCH + " not found in commitData", readUserCommitData[DirectoryTaxonomyWriter.INDEX_EPOCH]); r.Dispose(); dir.Dispose(); }
public virtual void TestReplaceTaxoWithLargeTaxonomy() { var srcTaxoDir = NewDirectory(); var targetTaxoDir = NewDirectory(); // build source, large, taxonomy DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(srcTaxoDir); int ord = taxoWriter.AddCategory(new FacetLabel("A", "1", "1", "1", "1", "1", "1")); taxoWriter.Dispose(); taxoWriter = new DirectoryTaxonomyWriter(targetTaxoDir); int ordinal = taxoWriter.AddCategory(new FacetLabel("B", "1")); Assert.AreEqual(1, taxoWriter.GetParent(ordinal)); // call getParent to initialize taxoArrays taxoWriter.Commit(); taxoWriter.ReplaceTaxonomy(srcTaxoDir); Assert.AreEqual(ord - 1, taxoWriter.GetParent(ord)); taxoWriter.Dispose(); srcTaxoDir.Dispose(); targetTaxoDir.Dispose(); }
public virtual void TestCommit() { // Verifies that nothing is committed to the underlying Directory, if // commit() wasn't called. Directory dir = NewDirectory(); var ltw = new DirectoryTaxonomyWriter(dir, OpenMode.CREATE_OR_APPEND, NO_OP_CACHE); Assert.False(DirectoryReader.IndexExists(dir)); ltw.Commit(); // first commit, so that an index will be created ltw.AddCategory(new FacetLabel("a")); IndexReader r = DirectoryReader.Open(dir); Assert.AreEqual(1, r.NumDocs, "No categories should have been committed to the underlying directory"); r.Dispose(); ltw.Dispose(); dir.Dispose(); }
public virtual void TestReplaceTaxonomy() { Directory input = NewDirectory(); var taxoWriter = new DirectoryTaxonomyWriter(input); int ordA = taxoWriter.AddCategory(new FacetLabel("a")); taxoWriter.Dispose(); Directory dir = NewDirectory(); taxoWriter = new DirectoryTaxonomyWriter(dir); int ordB = taxoWriter.AddCategory(new FacetLabel("b")); taxoWriter.AddCategory(new FacetLabel("c")); taxoWriter.Commit(); long origEpoch = getEpoch(dir); // replace the taxonomy with the input one taxoWriter.ReplaceTaxonomy(input); // LUCENE-4633: make sure that category "a" is not added again in any case taxoWriter.AddTaxonomy(input, new MemoryOrdinalMap()); Assert.AreEqual(2, taxoWriter.Count, "no categories should have been added"); // root + 'a' Assert.AreEqual(ordA, taxoWriter.AddCategory(new FacetLabel("a")), "category 'a' received new ordinal?"); // add the same category again -- it should not receive the same ordinal ! int newOrdB = taxoWriter.AddCategory(new FacetLabel("b")); Assert.AreNotSame(ordB, newOrdB, "new ordinal cannot be the original ordinal"); Assert.AreEqual(2, newOrdB, "ordinal should have been 2 since only one category was added by replaceTaxonomy"); taxoWriter.Dispose(); long newEpoch = getEpoch(dir); Assert.True(origEpoch < newEpoch, "index epoch should have been updated after replaceTaxonomy"); dir.Dispose(); input.Dispose(); }
public virtual void TestPrepareCommitNoEmptyCommits() { // LUCENE-4972: DTW used to create empty commits even if no changes were made Directory dir = NewDirectory(); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(dir); taxoWriter.AddCategory(new FacetLabel("a")); taxoWriter.PrepareCommit(); taxoWriter.Commit(); long gen1 = SegmentInfos.GetLastCommitGeneration(dir); taxoWriter.PrepareCommit(); taxoWriter.Commit(); long gen2 = SegmentInfos.GetLastCommitGeneration(dir); Assert.AreEqual(gen1, gen2, "empty commit should not have changed the index"); taxoWriter.Dispose(); dir.Dispose(); }
private void TouchTaxo(DirectoryTaxonomyWriter taxoWriter, FacetLabel cp) { taxoWriter.AddCategory(cp); taxoWriter.CommitData = new Dictionary<string, string>() { {"just", "data"} }; taxoWriter.Commit(); }
public virtual void TestOpenIfChangedReuse() { // test the reuse of data from the old DTR instance foreach (bool nrt in new bool[] { false, true }) { Directory dir = NewDirectory(); DirectoryTaxonomyWriter writer = new DirectoryTaxonomyWriter(dir); FacetLabel cp_a = new FacetLabel("a"); writer.AddCategory(cp_a); if (!nrt) { writer.Commit(); } DirectoryTaxonomyReader r1 = nrt ? new DirectoryTaxonomyReader(writer) : new DirectoryTaxonomyReader(dir); // fill r1's caches Assert.AreEqual(1, r1.GetOrdinal(cp_a)); Assert.AreEqual(cp_a, r1.GetPath(1)); FacetLabel cp_b = new FacetLabel("b"); writer.AddCategory(cp_b); if (!nrt) { writer.Commit(); } DirectoryTaxonomyReader r2 = TaxonomyReader.OpenIfChanged(r1); Assert.NotNull(r2); // add r2's categories to the caches Assert.AreEqual(2, r2.GetOrdinal(cp_b)); Assert.AreEqual(cp_b, r2.GetPath(2)); // check that r1 doesn't see cp_b Assert.AreEqual(TaxonomyReader.INVALID_ORDINAL, r1.GetOrdinal(cp_b)); Assert.Null(r1.GetPath(2)); (r1).Dispose(); (r2).Dispose(); writer.Dispose(); dir.Dispose(); } }
public virtual void TestOpenIfChangedResult() { Directory dir = null; DirectoryTaxonomyWriter ltw = null; DirectoryTaxonomyReader ltr = null; try { dir = NewDirectory(); ltw = new DirectoryTaxonomyWriter(dir); ltw.AddCategory(new FacetLabel("a")); ltw.Commit(); ltr = new DirectoryTaxonomyReader(dir); Assert.Null(TaxonomyReader.OpenIfChanged(ltr), "Nothing has changed"); ltw.AddCategory(new FacetLabel("b")); ltw.Commit(); DirectoryTaxonomyReader newtr = TaxonomyReader.OpenIfChanged(ltr); Assert.NotNull(newtr, "changes were committed"); Assert.Null(TaxonomyReader.OpenIfChanged(newtr), "Nothing has changed"); (newtr).Dispose(); } finally { IOUtils.Close(ltw, ltr, dir); } }
public virtual void TestOpenIfChangedReplaceTaxonomy() { // test openIfChanged when replaceTaxonomy is called, which is equivalent to recreate // only can work with NRT as well Directory src = NewDirectory(); DirectoryTaxonomyWriter w = new DirectoryTaxonomyWriter(src); FacetLabel cp_b = new FacetLabel("b"); w.AddCategory(cp_b); w.Dispose(); foreach (bool nrt in new bool[] { false, true }) { Directory dir = NewDirectory(); var writer = new DirectoryTaxonomyWriter(dir); FacetLabel cp_a = new FacetLabel("a"); writer.AddCategory(cp_a); if (!nrt) { writer.Commit(); } DirectoryTaxonomyReader r1 = nrt ? new DirectoryTaxonomyReader(writer) : new DirectoryTaxonomyReader(dir); // fill r1's caches Assert.AreEqual(1, r1.GetOrdinal(cp_a)); Assert.AreEqual(cp_a, r1.GetPath(1)); // now replace taxonomy writer.ReplaceTaxonomy(src); if (!nrt) { writer.Commit(); } DirectoryTaxonomyReader r2 = TaxonomyReader.OpenIfChanged(r1); Assert.NotNull(r2); // fill r2's caches Assert.AreEqual(1, r2.GetOrdinal(cp_b)); Assert.AreEqual(cp_b, r2.GetPath(1)); // check that r1 doesn't see cp_b Assert.AreEqual(TaxonomyReader.INVALID_ORDINAL, r1.GetOrdinal(cp_b)); Assert.AreEqual(cp_a, r1.GetPath(1)); // check that r2 doesn't see cp_a Assert.AreEqual(TaxonomyReader.INVALID_ORDINAL, r2.GetOrdinal(cp_a)); Assert.AreEqual(cp_b, r2.GetPath(1)); (r2).Dispose(); (r1).Dispose(); writer.Dispose(); dir.Dispose(); } src.Dispose(); }
public virtual void TestOpenIfChangedAndRefCount() { Directory dir = new RAMDirectory(); // no need for random directories here var taxoWriter = new DirectoryTaxonomyWriter(dir); taxoWriter.AddCategory(new FacetLabel("a")); taxoWriter.Commit(); var taxoReader = new DirectoryTaxonomyReader(dir); Assert.AreEqual(1, taxoReader.RefCount, "wrong refCount"); taxoReader.IncRef(); Assert.AreEqual(2, taxoReader.RefCount, "wrong refCount"); taxoWriter.AddCategory(new FacetLabel("a", "b")); taxoWriter.Commit(); var newtr = TaxonomyReader.OpenIfChanged(taxoReader); Assert.NotNull(newtr); taxoReader.Dispose(); taxoReader = newtr; Assert.AreEqual(1, taxoReader.RefCount, "wrong refCount"); taxoWriter.Dispose(); taxoReader.Dispose(); dir.Dispose(); }