LUCENE-5339: switch to DocumentBuilder.build instead of FacetIndexWriter

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene5339@1543530 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael McCandless 2013-11-19 18:35:54 +00:00
parent d815a3608b
commit 1accec983e
10 changed files with 92 additions and 85 deletions

1
TODO
View File

@ -2,6 +2,7 @@ nocommit this!
TODO TODO
- associations - associations
- can we do index time detection of invalid mixing?
- cutover taxo writer/reader to pathToString/stringToPath - cutover taxo writer/reader to pathToString/stringToPath
- wrap an IW instead of extending one? or, FacetDocument? - wrap an IW instead of extending one? or, FacetDocument?
- re-enable ALL_BUT_DIM somehow? - re-enable ALL_BUT_DIM somehow?

View File

@ -42,25 +42,21 @@ import org.apache.lucene.util.ArrayUtil;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IntsRef; import org.apache.lucene.util.IntsRef;
public class FacetIndexWriter extends IndexWriter { /** Pass the {@link #Document} to index to {@link #build},
* to translate any added {@link FacetField}s into
* indexable and storable fields. It's safe to share a
* single instance of this across multiple threads. */
public class DocumentBuilder {
private final TaxonomyWriter taxoWriter; private final TaxonomyWriter taxoWriter;
private final FacetsConfig config; private final FacetsConfig config;
public FacetIndexWriter(Directory d, IndexWriterConfig conf, TaxonomyWriter taxoWriter, FacetsConfig config) throws IOException { public DocumentBuilder(TaxonomyWriter taxoWriter, FacetsConfig config) {
super(d, conf);
this.taxoWriter = taxoWriter; this.taxoWriter = taxoWriter;
this.config = config; this.config = config;
} }
// nocommit maybe we could somehow "own" TaxonomyWriter public IndexDocument build(IndexDocument doc) throws IOException {
// too? commit it in commit, close it in close, etc?
// nocommit also updateDocument, addDocument, addDocuments
@Override
public void addDocument(final IndexDocument doc) throws IOException {
// Find all FacetFields, collated by the actual field: // Find all FacetFields, collated by the actual field:
Map<String,List<FacetField>> byField = new HashMap<String,List<FacetField>>(); Map<String,List<FacetField>> byField = new HashMap<String,List<FacetField>>();
@ -137,7 +133,7 @@ public class FacetIndexWriter extends IndexWriter {
//System.out.println("all indexed: " + allIndexedFields); //System.out.println("all indexed: " + allIndexedFields);
//System.out.println("all stored: " + allStoredFields); //System.out.println("all stored: " + allStoredFields);
super.addDocument(new IndexDocument() { return new IndexDocument() {
@Override @Override
public Iterable<IndexableField> indexableFields() { public Iterable<IndexableField> indexableFields() {
return allIndexedFields; return allIndexedFields;
@ -147,7 +143,7 @@ public class FacetIndexWriter extends IndexWriter {
public Iterable<StorableField> storableFields() { public Iterable<StorableField> storableFields() {
return allStoredFields; return allStoredFields;
} }
}); };
} }
private void processFacetFields(Map<String,List<FacetField>> byField, List<Field> addedIndexedFields, List<Field> addedStoredFields) throws IOException { private void processFacetFields(Map<String,List<FacetField>> byField, List<Field> addedIndexedFields, List<Field> addedStoredFields) throws IOException {
@ -248,10 +244,9 @@ public class FacetIndexWriter extends IndexWriter {
} }
} }
// nocommit open this up /** Encodes ordinals into a BytesRef; expert: subclass can
/** We can open this up if/when we really need * override this to change encoding. */
* pluggability on the encoding. */ protected BytesRef dedupAndEncode(IntsRef ordinals) {
private final BytesRef dedupAndEncode(IntsRef ordinals) {
Arrays.sort(ordinals.ints, ordinals.offset, ordinals.length); Arrays.sort(ordinals.ints, ordinals.offset, ordinals.length);
byte[] bytes = new byte[5*ordinals.length]; byte[] bytes = new byte[5*ordinals.length];
int lastOrd = -1; int lastOrd = -1;
@ -298,7 +293,7 @@ public class FacetIndexWriter extends IndexWriter {
return new BytesRef(bytes, 0, upto); return new BytesRef(bytes, 0, upto);
} }
// nocommit move these constants / methods to Util? // nocommit move all of this to Util?
// Joins the path components together: // Joins the path components together:
private static final char DELIM_CHAR = '\u001F'; private static final char DELIM_CHAR = '\u001F';
@ -367,4 +362,4 @@ public class FacetIndexWriter extends IndexWriter {
assert !lastEscape; assert !lastEscape;
return parts.toArray(new String[parts.size()]); return parts.toArray(new String[parts.size()]);
} }
} }

View File

@ -53,7 +53,7 @@ import org.apache.lucene.search.TermQuery;
public final class SimpleDrillDownQuery extends Query { public final class SimpleDrillDownQuery extends Query {
private static Term term(String field, String dim, String[] path) { private static Term term(String field, String dim, String[] path) {
return new Term(field, FacetIndexWriter.pathToString(dim, path)); return new Term(field, FacetDocument.pathToString(dim, path));
} }
private final FacetsConfig config; private final FacetsConfig config;

View File

@ -230,7 +230,7 @@ public class SortedSetDocValuesFacetCounts extends Facets {
throw new IllegalArgumentException("path must be length=1"); throw new IllegalArgumentException("path must be length=1");
} }
int ord = (int) dv.lookupTerm(new BytesRef(FacetIndexWriter.pathToString(dim, path))); int ord = (int) dv.lookupTerm(new BytesRef(FacetDocument.pathToString(dim, path)));
if (ord < 0) { if (ord < 0) {
return -1; return -1;
} }

View File

@ -110,7 +110,7 @@ public final class SortedSetDocValuesReaderState {
// support arbitrary hierarchy: // support arbitrary hierarchy:
for(int ord=0;ord<valueCount;ord++) { for(int ord=0;ord<valueCount;ord++) {
dv.lookupOrd(ord, spare); dv.lookupOrd(ord, spare);
String[] components = FacetIndexWriter.stringToPath(spare.utf8ToString()); String[] components = FacetDocument.stringToPath(spare.utf8ToString());
if (components.length != 2) { if (components.length != 2) {
throw new IllegalArgumentException("this class can only handle 2 level hierarchy (dim/value); got: " + Arrays.toString(components) + " " + spare.utf8ToString()); throw new IllegalArgumentException("this class can only handle 2 level hierarchy (dim/value); got: " + Arrays.toString(components) + " " + spare.utf8ToString());
} }

View File

@ -89,35 +89,36 @@ public class TestSimpleDrillSideways extends FacetTestCase {
FacetsConfig config = new FacetsConfig(); FacetsConfig config = new FacetsConfig();
config.setHierarchical("Publish Date"); config.setHierarchical("Publish Date");
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), taxoWriter, config); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, config);
Document doc = new Document(); Document doc = new Document();
doc.add(new FacetField("Author", "Bob")); doc.add(new FacetField("Author", "Bob"));
doc.add(new FacetField("Publish Date", "2010", "10", "15")); doc.add(new FacetField("Publish Date", "2010", "10", "15"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new FacetField("Author", "Lisa")); doc.add(new FacetField("Author", "Lisa"));
doc.add(new FacetField("Publish Date", "2010", "10", "20")); doc.add(new FacetField("Publish Date", "2010", "10", "20"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new FacetField("Author", "Lisa")); doc.add(new FacetField("Author", "Lisa"));
doc.add(new FacetField("Publish Date", "2012", "1", "1")); doc.add(new FacetField("Publish Date", "2012", "1", "1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new FacetField("Author", "Susan")); doc.add(new FacetField("Author", "Susan"));
doc.add(new FacetField("Publish Date", "2012", "1", "7")); doc.add(new FacetField("Publish Date", "2012", "1", "7"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new FacetField("Author", "Frank")); doc.add(new FacetField("Author", "Frank"));
doc.add(new FacetField("Publish Date", "1999", "5", "5")); doc.add(new FacetField("Publish Date", "1999", "5", "5"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
//System.out.println("searcher=" + searcher); //System.out.println("searcher=" + searcher);

View File

@ -46,24 +46,25 @@ public class TestSortedSetDocValuesFacets extends FacetTestCase {
Directory dir = newDirectory(); Directory dir = newDirectory();
FacetsConfig config = new FacetsConfig(); FacetsConfig config = new FacetsConfig();
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), null, config); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
FacetDocument facetDoc = new FacetDocument(null, config);
Document doc = new Document(); Document doc = new Document();
doc.add(new SortedSetDocValuesFacetField("a", "foo")); doc.add(new SortedSetDocValuesFacetField("a", "foo"));
doc.add(new SortedSetDocValuesFacetField("a", "bar")); doc.add(new SortedSetDocValuesFacetField("a", "bar"));
doc.add(new SortedSetDocValuesFacetField("a", "zoo")); doc.add(new SortedSetDocValuesFacetField("a", "zoo"));
doc.add(new SortedSetDocValuesFacetField("b", "baz")); doc.add(new SortedSetDocValuesFacetField("b", "baz"));
writer.addDocument(doc); writer.addDocument(facetDoc.build(doc));
if (random().nextBoolean()) { if (random().nextBoolean()) {
writer.commit(); writer.commit();
} }
doc = new Document(); doc = new Document();
doc.add(new SortedSetDocValuesFacetField("a", "foo")); doc.add(new SortedSetDocValuesFacetField("a", "foo"));
writer.addDocument(doc); writer.addDocument(facetDoc.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// Per-top-reader state: // Per-top-reader state:
@ -94,24 +95,25 @@ public class TestSortedSetDocValuesFacets extends FacetTestCase {
assumeTrue("Test requires SortedSetDV support", defaultCodecSupportsSortedSet()); assumeTrue("Test requires SortedSetDV support", defaultCodecSupportsSortedSet());
Directory dir = newDirectory(); Directory dir = newDirectory();
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), null, new FacetsConfig()); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(null, new FacetsConfig());
Document doc = new Document(); Document doc = new Document();
doc.add(new SortedSetDocValuesFacetField("a", "foo")); doc.add(new SortedSetDocValuesFacetField("a", "foo"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
IndexReader r = DirectoryReader.open(writer, true); IndexReader r = writer.getReader();
SortedSetDocValuesReaderState state = new SortedSetDocValuesReaderState(r); SortedSetDocValuesReaderState state = new SortedSetDocValuesReaderState(r);
doc = new Document(); doc = new Document();
doc.add(new SortedSetDocValuesFacetField("a", "bar")); doc.add(new SortedSetDocValuesFacetField("a", "bar"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new SortedSetDocValuesFacetField("a", "baz")); doc.add(new SortedSetDocValuesFacetField("a", "baz"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
SimpleFacetsCollector c = new SimpleFacetsCollector(); SimpleFacetsCollector c = new SimpleFacetsCollector();
@ -135,11 +137,12 @@ public class TestSortedSetDocValuesFacets extends FacetTestCase {
assumeTrue("Test requires SortedSetDV support", defaultCodecSupportsSortedSet()); assumeTrue("Test requires SortedSetDV support", defaultCodecSupportsSortedSet());
Directory dir = newDirectory(); Directory dir = newDirectory();
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), null, new FacetsConfig()); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(null, new FacetsConfig());
Document doc = new Document(); Document doc = new Document();
doc.add(new SortedSetDocValuesFacetField("a", "foo1")); doc.add(new SortedSetDocValuesFacetField("a", "foo1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
if (random().nextBoolean()) { if (random().nextBoolean()) {
writer.commit(); writer.commit();
@ -148,7 +151,7 @@ public class TestSortedSetDocValuesFacets extends FacetTestCase {
doc = new Document(); doc = new Document();
doc.add(new SortedSetDocValuesFacetField("a", "foo2")); doc.add(new SortedSetDocValuesFacetField("a", "foo2"));
doc.add(new SortedSetDocValuesFacetField("b", "bar1")); doc.add(new SortedSetDocValuesFacetField("b", "bar1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
if (random().nextBoolean()) { if (random().nextBoolean()) {
writer.commit(); writer.commit();
@ -158,10 +161,10 @@ public class TestSortedSetDocValuesFacets extends FacetTestCase {
doc.add(new SortedSetDocValuesFacetField("a", "foo3")); doc.add(new SortedSetDocValuesFacetField("a", "foo3"));
doc.add(new SortedSetDocValuesFacetField("b", "bar2")); doc.add(new SortedSetDocValuesFacetField("b", "bar2"));
doc.add(new SortedSetDocValuesFacetField("c", "baz1")); doc.add(new SortedSetDocValuesFacetField("c", "baz1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// Per-top-reader state: // Per-top-reader state:

View File

@ -56,7 +56,7 @@ public class TestTaxonomyFacetAssociations extends FacetTestCase {
private static final FacetLabel afloat = new FacetLabel("float", "a"); private static final FacetLabel afloat = new FacetLabel("float", "a");
private static final FacetLabel bfloat = new FacetLabel("float", "b"); private static final FacetLabel bfloat = new FacetLabel("float", "b");
private static final FacetsConfig config = new FacetsConfig(); private static final FacetsConfig config = new FacetsConfig();
@BeforeClass @BeforeClass
public static void beforeClass() throws Exception { public static void beforeClass() throws Exception {
dir = newDirectory(); dir = newDirectory();
@ -69,8 +69,8 @@ public class TestTaxonomyFacetAssociations extends FacetTestCase {
config.setIndexFieldName("int", "$facets.int"); config.setIndexFieldName("int", "$facets.int");
config.setIndexFieldName("float", "$facets.float"); config.setIndexFieldName("float", "$facets.float");
IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
IndexWriter writer = new FacetIndexWriter(dir, iwc, taxoWriter, config); DocumentBuilder builder = new DocumentBuilder(taxoWriter, config);
// index documents, 50% have only 'b' and all have 'a' // index documents, 50% have only 'b' and all have 'a'
for (int i = 0; i < 110; i++) { for (int i = 0; i < 110; i++) {
@ -85,11 +85,11 @@ public class TestTaxonomyFacetAssociations extends FacetTestCase {
doc.add(new AssociationFacetField(0.2f, "float", "b")); doc.add(new AssociationFacetField(0.2f, "float", "b"));
} }
} }
writer.addDocument(doc); writer.addDocument(builder.build(doc));
} }
taxoWriter.close(); taxoWriter.close();
reader = DirectoryReader.open(writer, true); reader = writer.getReader();
writer.close(); writer.close();
taxoReader = new DirectoryTaxonomyReader(taxoDir); taxoReader = new DirectoryTaxonomyReader(taxoDir);
} }

View File

@ -61,35 +61,36 @@ public class TestTaxonomyFacetCounts extends FacetTestCase {
FacetsConfig config = new FacetsConfig(); FacetsConfig config = new FacetsConfig();
config.setHierarchical("Publish Date"); config.setHierarchical("Publish Date");
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), taxoWriter, config); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, config);
Document doc = new Document(); Document doc = new Document();
doc.add(new FacetField("Author", "Bob")); doc.add(new FacetField("Author", "Bob"));
doc.add(new FacetField("Publish Date", "2010", "10", "15")); doc.add(new FacetField("Publish Date", "2010", "10", "15"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new FacetField("Author", "Lisa")); doc.add(new FacetField("Author", "Lisa"));
doc.add(new FacetField("Publish Date", "2010", "10", "20")); doc.add(new FacetField("Publish Date", "2010", "10", "20"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new FacetField("Author", "Lisa")); doc.add(new FacetField("Author", "Lisa"));
doc.add(new FacetField("Publish Date", "2012", "1", "1")); doc.add(new FacetField("Publish Date", "2012", "1", "1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new FacetField("Author", "Susan")); doc.add(new FacetField("Author", "Susan"));
doc.add(new FacetField("Publish Date", "2012", "1", "7")); doc.add(new FacetField("Publish Date", "2012", "1", "7"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new FacetField("Author", "Frank")); doc.add(new FacetField("Author", "Frank"));
doc.add(new FacetField("Publish Date", "1999", "5", "5")); doc.add(new FacetField("Publish Date", "1999", "5", "5"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// NRT open // NRT open
@ -147,11 +148,12 @@ public class TestTaxonomyFacetCounts extends FacetTestCase {
// main index: // main index:
DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE);
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), taxoWriter, new FacetsConfig()); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, new FacetsConfig());
Document doc = new Document(); Document doc = new Document();
doc.add(new FacetField("a", "foo1")); doc.add(new FacetField("a", "foo1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
if (random().nextBoolean()) { if (random().nextBoolean()) {
writer.commit(); writer.commit();
@ -160,7 +162,7 @@ public class TestTaxonomyFacetCounts extends FacetTestCase {
doc = new Document(); doc = new Document();
doc.add(new FacetField("a", "foo2")); doc.add(new FacetField("a", "foo2"));
doc.add(new FacetField("b", "bar1")); doc.add(new FacetField("b", "bar1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
if (random().nextBoolean()) { if (random().nextBoolean()) {
writer.commit(); writer.commit();
@ -170,10 +172,10 @@ public class TestTaxonomyFacetCounts extends FacetTestCase {
doc.add(new FacetField("a", "foo3")); doc.add(new FacetField("a", "foo3"));
doc.add(new FacetField("b", "bar2")); doc.add(new FacetField("b", "bar2"));
doc.add(new FacetField("c", "baz1")); doc.add(new FacetField("c", "baz1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// NRT open // NRT open
@ -209,14 +211,15 @@ public class TestTaxonomyFacetCounts extends FacetTestCase {
FacetsConfig config = new FacetsConfig(); FacetsConfig config = new FacetsConfig();
config.setIndexFieldName("a", "$facets2"); config.setIndexFieldName("a", "$facets2");
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), taxoWriter, config); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, config);
Document doc = new Document(); Document doc = new Document();
doc.add(new FacetField("a", "foo1")); doc.add(new FacetField("a", "foo1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// NRT open // NRT open
@ -280,12 +283,13 @@ public class TestTaxonomyFacetCounts extends FacetTestCase {
} }
}); });
TaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE); TaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE);
IndexWriter writer = new FacetIndexWriter(dir, iwc, taxoWriter, new FacetsConfig()); RandomIndexWriter writer = new RandomIndexWriter(random(), dir, iwc);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, new FacetsConfig());
Document doc = new Document(); Document doc = new Document();
doc.add(newTextField("field", "text", Field.Store.NO)); doc.add(newTextField("field", "text", Field.Store.NO));
doc.add(new FacetField("a", "path")); doc.add(new FacetField("a", "path"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
writer.close(); writer.close();
taxoWriter.close(); taxoWriter.close();
dir.close(); dir.close();
@ -296,20 +300,20 @@ public class TestTaxonomyFacetCounts extends FacetTestCase {
Directory dir = newDirectory(); Directory dir = newDirectory();
Directory taxoDir = newDirectory(); Directory taxoDir = newDirectory();
DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE);
IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
FacetsConfig config = new FacetsConfig(); FacetsConfig config = new FacetsConfig();
config.setHierarchical("a"); config.setHierarchical("a");
config.setMultiValued("a"); config.setMultiValued("a");
IndexWriter writer = new FacetIndexWriter(dir, iwc, taxoWriter, config); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, config);
Document doc = new Document(); Document doc = new Document();
doc.add(newTextField("field", "text", Field.Store.NO)); doc.add(newTextField("field", "text", Field.Store.NO));
doc.add(new FacetField("a", "path", "x")); doc.add(new FacetField("a", "path", "x"));
doc.add(new FacetField("a", "path", "y")); doc.add(new FacetField("a", "path", "y"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// NRT open // NRT open

View File

@ -63,37 +63,38 @@ public class TestTaxonomyFacetSumValueSource extends FacetTestCase {
// main index: // main index:
DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE);
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), taxoWriter, new FacetsConfig()); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, new FacetsConfig());
// Reused across documents, to add the necessary facet // Reused across documents, to add the necessary facet
// fields: // fields:
Document doc = new Document(); Document doc = new Document();
doc.add(new IntField("num", 10, Field.Store.NO)); doc.add(new IntField("num", 10, Field.Store.NO));
doc.add(new FacetField("Author", "Bob")); doc.add(new FacetField("Author", "Bob"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new IntField("num", 20, Field.Store.NO)); doc.add(new IntField("num", 20, Field.Store.NO));
doc.add(new FacetField("Author", "Lisa")); doc.add(new FacetField("Author", "Lisa"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new IntField("num", 30, Field.Store.NO)); doc.add(new IntField("num", 30, Field.Store.NO));
doc.add(new FacetField("Author", "Lisa")); doc.add(new FacetField("Author", "Lisa"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new IntField("num", 40, Field.Store.NO)); doc.add(new IntField("num", 40, Field.Store.NO));
doc.add(new FacetField("Author", "Susan")); doc.add(new FacetField("Author", "Susan"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
doc = new Document(); doc = new Document();
doc.add(new IntField("num", 45, Field.Store.NO)); doc.add(new IntField("num", 45, Field.Store.NO));
doc.add(new FacetField("Author", "Frank")); doc.add(new FacetField("Author", "Frank"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// NRT open // NRT open
@ -129,12 +130,13 @@ public class TestTaxonomyFacetSumValueSource extends FacetTestCase {
// main index: // main index:
DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE);
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), taxoWriter, new FacetsConfig()); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, new FacetsConfig());
Document doc = new Document(); Document doc = new Document();
doc.add(new IntField("num", 10, Field.Store.NO)); doc.add(new IntField("num", 10, Field.Store.NO));
doc.add(new FacetField("a", "foo1")); doc.add(new FacetField("a", "foo1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
if (random().nextBoolean()) { if (random().nextBoolean()) {
writer.commit(); writer.commit();
@ -144,7 +146,7 @@ public class TestTaxonomyFacetSumValueSource extends FacetTestCase {
doc.add(new IntField("num", 20, Field.Store.NO)); doc.add(new IntField("num", 20, Field.Store.NO));
doc.add(new FacetField("a", "foo2")); doc.add(new FacetField("a", "foo2"));
doc.add(new FacetField("b", "bar1")); doc.add(new FacetField("b", "bar1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
if (random().nextBoolean()) { if (random().nextBoolean()) {
writer.commit(); writer.commit();
@ -155,10 +157,10 @@ public class TestTaxonomyFacetSumValueSource extends FacetTestCase {
doc.add(new FacetField("a", "foo3")); doc.add(new FacetField("a", "foo3"));
doc.add(new FacetField("b", "bar2")); doc.add(new FacetField("b", "bar2"));
doc.add(new FacetField("c", "baz1")); doc.add(new FacetField("c", "baz1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// NRT open // NRT open
@ -196,15 +198,16 @@ public class TestTaxonomyFacetSumValueSource extends FacetTestCase {
FacetsConfig config = new FacetsConfig(); FacetsConfig config = new FacetsConfig();
config.setIndexFieldName("a", "$facets2"); config.setIndexFieldName("a", "$facets2");
IndexWriter writer = new FacetIndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())), taxoWriter, config); RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
DocumentBuilder builder = new DocumentBuilder(taxoWriter, config);
Document doc = new Document(); Document doc = new Document();
doc.add(new IntField("num", 10, Field.Store.NO)); doc.add(new IntField("num", 10, Field.Store.NO));
doc.add(new FacetField("a", "foo1")); doc.add(new FacetField("a", "foo1"));
writer.addDocument(doc); writer.addDocument(builder.build(doc));
// NRT open // NRT open
IndexSearcher searcher = newSearcher(DirectoryReader.open(writer, true)); IndexSearcher searcher = newSearcher(writer.getReader());
writer.close(); writer.close();
// NRT open // NRT open