private void doTestReadRecreatedTaxonomy(Random random, boolean closeReader) throws Exception { Directory dir = null; TaxonomyWriter tw = null; TaxonomyReader tr = null; // prepare a few categories int n = 10; FacetLabel[] cp = new FacetLabel[n]; for (int i = 0; i < n; i++) { cp[i] = new FacetLabel("a", Integer.toString(i)); } try { dir = newDirectory(); tw = new DirectoryTaxonomyWriter(dir); tw.addCategory(new FacetLabel("a")); tw.close(); tr = new DirectoryTaxonomyReader(dir); int baseNumCategories = tr.getSize(); for (int i = 0; i < n; i++) { int k = random.nextInt(n); tw = new DirectoryTaxonomyWriter(dir, OpenMode.CREATE); for (int j = 0; j <= k; j++) { tw.addCategory(cp[j]); } tw.close(); if (closeReader) { tr.close(); tr = new DirectoryTaxonomyReader(dir); } else { TaxonomyReader newtr = TaxonomyReader.openIfChanged(tr); assertNotNull(newtr); tr.close(); tr = newtr; } assertEquals( "Wrong #categories in taxonomy (i=" + i + ", k=" + k + ")", baseNumCategories + 1 + k, tr.getSize()); } } finally { IOUtils.close(tr, tw, dir); } }
@BeforeClass public static void beforeClassDrillDownQueryTest() throws Exception { dir = newDirectory(); Random r = random(); RandomIndexWriter writer = new RandomIndexWriter( r, dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(r, MockTokenizer.KEYWORD, false))); taxoDir = newDirectory(); TaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir); config = new FacetsConfig(); // Randomize the per-dim config: config.setHierarchical("a", random().nextBoolean()); config.setMultiValued("a", random().nextBoolean()); if (random().nextBoolean()) { config.setIndexFieldName("a", "$a"); } config.setRequireDimCount("a", true); config.setHierarchical("b", random().nextBoolean()); config.setMultiValued("b", random().nextBoolean()); if (random().nextBoolean()) { config.setIndexFieldName("b", "$b"); } config.setRequireDimCount("b", true); for (int i = 0; i < 100; i++) { Document doc = new Document(); if (i % 2 == 0) { // 50 doc.add(new TextField("content", "foo", Field.Store.NO)); } if (i % 3 == 0) { // 33 doc.add(new TextField("content", "bar", Field.Store.NO)); } if (i % 4 == 0) { // 25 if (r.nextBoolean()) { doc.add(new FacetField("a", "1")); } else { doc.add(new FacetField("a", "2")); } } if (i % 5 == 0) { // 20 doc.add(new FacetField("b", "1")); } writer.addDocument(config.build(taxoWriter, doc)); } taxoWriter.close(); reader = writer.getReader(); writer.close(); taxo = new DirectoryTaxonomyReader(taxoDir); }