Index: lucene/CHANGES.txt =================================================================== --- lucene/CHANGES.txt (revision 1465323) +++ lucene/CHANGES.txt (working copy) @@ -225,6 +225,9 @@ * LUCENE-4877: Throw exception for invalid arguments in analysis factories. (Steve Rowe, Uwe Schindler, Robert Muir) +* LUCENE-4913: FacetResultNode.ordinal was always 0 for ALL_PARENTS + when all children are returned (Mike McCandless) + Documentation * LUCENE-4841: Added example SimpleSortedSetFacetsExample to show how Index: lucene/facet/src/java/org/apache/lucene/facet/search/FloatFacetResultsHandler.java =================================================================== --- lucene/facet/src/java/org/apache/lucene/facet/search/FloatFacetResultsHandler.java (revision 1465323) +++ lucene/facet/src/java/org/apache/lucene/facet/search/FloatFacetResultsHandler.java (working copy) @@ -66,9 +66,8 @@ while (ordinal != TaxonomyReader.INVALID_ORDINAL) { float value = values[ordinal]; if (value > 0) { - FacetResultNode node = new FacetResultNode(); + FacetResultNode node = new FacetResultNode(ordinal, value); node.label = taxonomyReader.getPath(ordinal); - node.value = value; nodes.add(node); } ordinal = siblings[ordinal]; Index: lucene/facet/src/java/org/apache/lucene/facet/search/IntFacetResultsHandler.java =================================================================== --- lucene/facet/src/java/org/apache/lucene/facet/search/IntFacetResultsHandler.java (revision 1465323) +++ lucene/facet/src/java/org/apache/lucene/facet/search/IntFacetResultsHandler.java (working copy) @@ -65,9 +65,8 @@ while (ordinal != TaxonomyReader.INVALID_ORDINAL) { int value = values[ordinal]; if (value > 0) { - FacetResultNode node = new FacetResultNode(); + FacetResultNode node = new FacetResultNode(ordinal, value); node.label = taxonomyReader.getPath(ordinal); - node.value = value; nodes.add(node); } ordinal = siblings[ordinal]; Index: lucene/facet/src/test/org/apache/lucene/facet/search/TestDemoFacets.java =================================================================== --- lucene/facet/src/test/org/apache/lucene/facet/search/TestDemoFacets.java (revision 1465323) +++ lucene/facet/src/test/org/apache/lucene/facet/search/TestDemoFacets.java (working copy) @@ -203,7 +203,7 @@ FacetSearchParams fsp = new FacetSearchParams(fip, new CountFacetRequest(new CategoryPath("a", '/'), 10)); - // Aggregatses the facet counts: + // Aggregate the facet counts: FacetsCollector c = FacetsCollector.create(fsp, searcher.getIndexReader(), taxoReader); // MatchAllDocsQuery is for "browsing" (counts facets @@ -215,6 +215,11 @@ assertEquals(1, results.size()); assertEquals(1, (int) results.get(0).getFacetResultNode().value); + // LUCENE-4913: + for(FacetResultNode childNode : results.get(0).getFacetResultNode().subResults) { + assertTrue(childNode.ordinal != 0); + } + searcher.getIndexReader().close(); taxoReader.close(); dir.close(); Index: lucene/facet/src/test/org/apache/lucene/facet/search/TestFacetsCollector.java =================================================================== --- lucene/facet/src/test/org/apache/lucene/facet/search/TestFacetsCollector.java (revision 1465323) +++ lucene/facet/src/test/org/apache/lucene/facet/search/TestFacetsCollector.java (working copy) @@ -304,4 +304,49 @@ IOUtils.close(taxo, taxoDir, r, indexDir); } + @Test + public void testParentOrdinal() throws Exception { + // LUCENE-4913: root ordinal was always 0 when all children were requested + Directory indexDir = newDirectory(); + Directory taxoDir = newDirectory(); + + TaxonomyWriter taxonomyWriter = new DirectoryTaxonomyWriter(taxoDir); + IndexWriter iw = new IndexWriter(indexDir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()))); + + FacetFields facetFields = new FacetFields(taxonomyWriter); + Document doc = new Document(); + facetFields.addFields(doc, Arrays.asList(new CategoryPath("a/1", '/'))); + iw.addDocument(doc); + taxonomyWriter.close(); + iw.close(); + + DirectoryReader r = DirectoryReader.open(indexDir); + DirectoryTaxonomyReader taxo = new DirectoryTaxonomyReader(taxoDir); + + // assert IntFacetResultHandler + FacetSearchParams fsp = new FacetSearchParams(new CountFacetRequest(new CategoryPath("a"), 10)); + FacetsAccumulator fa = random().nextBoolean() ? new FacetsAccumulator(fsp, r, taxo) : new StandardFacetsAccumulator(fsp, r, taxo); + FacetsCollector fc = FacetsCollector.create(fa); + new IndexSearcher(r).search(new MatchAllDocsQuery(), fc); + assertTrue("invalid ordinal for child node: 0", 0 != fc.getFacetResults().get(0).getFacetResultNode().subResults.get(0).ordinal); + + // assert IntFacetResultHandler + fsp = new FacetSearchParams(new SumScoreFacetRequest(new CategoryPath("a"), 10)); + if (random().nextBoolean()) { + fa = new FacetsAccumulator(fsp, r, taxo) { + @Override + public FacetsAggregator getAggregator() { + return new SumScoreFacetsAggregator(); + } + }; + } else { + fa = new StandardFacetsAccumulator(fsp, r, taxo); + } + fc = FacetsCollector.create(fa); + new IndexSearcher(r).search(new MatchAllDocsQuery(), fc); + assertTrue("invalid ordinal for child node: 0", 0 != fc.getFacetResults().get(0).getFacetResultNode().subResults.get(0).ordinal); + + IOUtils.close(taxo, taxoDir, r, indexDir); + } + }