LUCENE-5522: FacetConfig doesn't add drill-down terms for facet associations

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1576790 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Shai Erera 2014-03-12 15:52:54 +00:00
parent 3b67b17493
commit 938d06854f
5 changed files with 64 additions and 0 deletions

View File

@ -169,6 +169,9 @@ Bug fixes
* LUCENE-5502: Fixed TermsFilter.equals that could return true for different * LUCENE-5502: Fixed TermsFilter.equals that could return true for different
filters. (Igor Motov via Adrien Grand) filters. (Igor Motov via Adrien Grand)
* LUCENE-5522: FacetsConfig didn't add drill-down terms for association facet
fields labels. (Shai Erera)
Test Framework Test Framework
* LUCENE-5449: Rename _TestUtil and _TestHelper to remove the leading _. * LUCENE-5449: Rename _TestUtil and _TestHelper to remove the leading _.

View File

@ -23,6 +23,7 @@ import java.util.List;
import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
import org.apache.lucene.document.Document; import org.apache.lucene.document.Document;
import org.apache.lucene.facet.DrillDownQuery;
import org.apache.lucene.facet.FacetResult; import org.apache.lucene.facet.FacetResult;
import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.Facets;
import org.apache.lucene.facet.FacetsCollector; import org.apache.lucene.facet.FacetsCollector;
@ -116,12 +117,43 @@ public class AssociationsFacetsExample {
return results; return results;
} }
/** User drills down on 'tags/solr'. */
private FacetResult drillDown() throws IOException {
DirectoryReader indexReader = DirectoryReader.open(indexDir);
IndexSearcher searcher = new IndexSearcher(indexReader);
TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir);
// Passing no baseQuery means we drill down on all
// documents ("browse only"):
DrillDownQuery q = new DrillDownQuery(config);
// Now user drills down on Publish Date/2010:
q.add("tags", "solr");
FacetsCollector fc = new FacetsCollector();
FacetsCollector.search(searcher, q, 10, fc);
// Retrieve results
Facets facets = new TaxonomyFacetSumFloatAssociations("$genre", taxoReader, config, fc);
FacetResult result = facets.getTopChildren(10, "genre");
indexReader.close();
taxoReader.close();
return result;
}
/** Runs summing association example. */ /** Runs summing association example. */
public List<FacetResult> runSumAssociations() throws IOException { public List<FacetResult> runSumAssociations() throws IOException {
index(); index();
return sumAssociations(); return sumAssociations();
} }
/** Runs the drill-down example. */
public FacetResult runDrillDown() throws IOException {
index();
return drillDown();
}
/** Runs the sum int/float associations examples and prints the results. */ /** Runs the sum int/float associations examples and prints the results. */
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
System.out.println("Sum associations example:"); System.out.println("Sum associations example:");

View File

@ -32,4 +32,11 @@ public class TestAssociationsFacetsExample extends LuceneTestCase {
assertEquals("dim=tags path=[] value=-1 childCount=2\n lucene (4)\n solr (2)\n", res.get(0).toString()); assertEquals("dim=tags path=[] value=-1 childCount=2\n lucene (4)\n solr (2)\n", res.get(0).toString());
assertEquals("dim=genre path=[] value=-1.0 childCount=2\n computing (1.62)\n software (0.34)\n", res.get(1).toString()); assertEquals("dim=genre path=[] value=-1.0 childCount=2\n computing (1.62)\n software (0.34)\n", res.get(1).toString());
} }
@Test
public void testDrillDown() throws Exception {
FacetResult result = new AssociationsFacetsExample().runDrillDown();
assertEquals("dim=genre path=[] value=-1.0 childCount=2\n computing (0.75)\n software (0.34)\n", result.toString());
}
} }

View File

@ -403,6 +403,12 @@ public class FacetsConfig {
} }
System.arraycopy(field.assoc.bytes, field.assoc.offset, bytes, upto, field.assoc.length); System.arraycopy(field.assoc.bytes, field.assoc.offset, bytes, upto, field.assoc.length);
upto += field.assoc.length; upto += field.assoc.length;
// Drill down:
FacetLabel cp = new FacetLabel(field.dim, field.path);
for (int i = 1; i <= cp.length; i++) {
doc.add(new StringField(indexFieldName, pathToString(cp.components, i), Field.Store.NO));
}
} }
doc.add(new BinaryDocValuesField(indexFieldName, new BytesRef(bytes, 0, upto))); doc.add(new BinaryDocValuesField(indexFieldName, new BytesRef(bytes, 0, upto)));
} }

View File

@ -19,6 +19,7 @@ package org.apache.lucene.facet.taxonomy;
import org.apache.lucene.document.Document; import org.apache.lucene.document.Document;
import org.apache.lucene.facet.DrillDownQuery;
import org.apache.lucene.facet.FacetTestCase; import org.apache.lucene.facet.FacetTestCase;
import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.Facets;
import org.apache.lucene.facet.FacetsCollector; import org.apache.lucene.facet.FacetsCollector;
@ -223,4 +224,19 @@ public class TestTaxonomyFacetAssociations extends FacetTestCase {
} }
IOUtils.close(writer, taxoWriter, dir, taxoDir); IOUtils.close(writer, taxoWriter, dir, taxoDir);
} }
public void testIntSumAssociationDrillDown() throws Exception {
FacetsCollector fc = new FacetsCollector();
IndexSearcher searcher = newSearcher(reader);
DrillDownQuery q = new DrillDownQuery(config);
q.add("int", "b");
searcher.search(q, fc);
Facets facets = new TaxonomyFacetSumIntAssociations("$facets.int", taxoReader, config, fc);
assertEquals("dim=int path=[] value=-1 childCount=2\n b (150)\n a (100)\n", facets.getTopChildren(10, "int").toString());
assertEquals("Wrong count for category 'a'!", 100, facets.getSpecificValue("int", "a").intValue());
assertEquals("Wrong count for category 'b'!", 150, facets.getSpecificValue("int", "b").intValue());
}
} }