You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2013/01/31 04:37:34 UTC

svn commit: r1440839 [1/3] - in /lucene/dev/branches/lucene4547: ./ dev-tools/ dev-tools/idea/lucene/demo/ dev-tools/maven/lucene/demo/ lucene/ lucene/core/ lucene/core/src/java/org/apache/lucene/codecs/compressing/ lucene/core/src/java/org/apache/luce...

Author: rmuir
Date: Thu Jan 31 03:37:31 2013
New Revision: 1440839

URL: http://svn.apache.org/viewvc?rev=1440839&view=rev
Log:
Merged /lucene/dev/trunk:r1439980-1440837

Added:
    lucene/dev/branches/lucene4547/lucene/demo/src/java/org/apache/lucene/demo/facet/
      - copied from r1440837, lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/
    lucene/dev/branches/lucene4547/lucene/demo/src/test/org/apache/lucene/demo/facet/
      - copied from r1440837, lucene/dev/trunk/lucene/demo/src/test/org/apache/lucene/demo/facet/
    lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/params/PerDimensionOrdinalPolicy.java
      - copied unchanged from r1440837, lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/index/params/PerDimensionOrdinalPolicy.java
    lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/util/TaxonomyMergeUtils.java
      - copied unchanged from r1440837, lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/util/TaxonomyMergeUtils.java
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/analysis/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/analysis/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/client/solrj/embedded/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/client/solrj/embedded/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/cloud/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/common/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/common/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/core/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/handler/admin/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/handler/component/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/handler/loader/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/handler/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/highlight/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/highlight/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/internal/csv/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/internal/csv/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/internal/csv/writer/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/internal/csv/writer/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/logging/jul/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/logging/jul/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/logging/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/logging/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/parser/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/parser/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/request/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/response/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/response/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/response/transform/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/response/transform/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/schema/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/function/distance/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/function/distance/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/function/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/function/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/grouping/collector/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/collector/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/grouping/distributed/command/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/distributed/command/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/grouping/distributed/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/distributed/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/grouping/distributed/requestfactory/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/distributed/requestfactory/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/grouping/endresulttransformer/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/endresulttransformer/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/grouping/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/search/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/servlet/cache/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/servlet/cache/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/servlet/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/servlet/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/suggest/fst/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/fst/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/suggest/jaspell/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/jaspell/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/suggest/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/suggest/tst/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/tst/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/plugin/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/plugin/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/stats/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/stats/package.html
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/xslt/package.html
      - copied unchanged from r1440837, lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/xslt/package.html
Removed:
    lucene/dev/branches/lucene4547/lucene/facet/src/examples/
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/example/
Modified:
    lucene/dev/branches/lucene4547/   (props changed)
    lucene/dev/branches/lucene4547/dev-tools/   (props changed)
    lucene/dev/branches/lucene4547/dev-tools/idea/lucene/demo/demo.iml
    lucene/dev/branches/lucene4547/dev-tools/maven/lucene/demo/pom.xml.template
    lucene/dev/branches/lucene4547/lucene/   (props changed)
    lucene/dev/branches/lucene4547/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene4547/lucene/build.xml   (contents, props changed)
    lucene/dev/branches/lucene4547/lucene/core/   (props changed)
    lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
    lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java
    lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java
    lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestPayloadsOnVectors.java
    lucene/dev/branches/lucene4547/lucene/demo/   (props changed)
    lucene/dev/branches/lucene4547/lucene/demo/build.xml
    lucene/dev/branches/lucene4547/lucene/facet/   (props changed)
    lucene/dev/branches/lucene4547/lucene/facet/build.xml
    lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/CountingListBuilder.java
    lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/params/CategoryListParams.java
    lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsCollector.java
    lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/FacetsCollector.java
    lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/StandardFacetsCollector.java
    lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/util/ScoredDocIdsUtils.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestBase.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestUtils.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/OrdinalMappingReaderTest.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/TestFacetsPayloadMigrationReader.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/BaseTestTopK.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsCollectorTest.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestDemoFacets.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestFacetsAccumulatorWithComplement.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestMultipleCategoryLists.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestSameRequestAccumulation.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestScoredDocIdCollector.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestStandardFacetsAccumulator.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestTopKInEachNodeResultHandler.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestTopKResultsHandler.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestTopKResultsHandlerRandom.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestTotalFacetCounts.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestTotalFacetCountsCache.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/sampling/BaseSampleTestTopK.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/sampling/OversampleWithDepthTest.java
    lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyReader.java
    lucene/dev/branches/lucene4547/lucene/site/   (props changed)
    lucene/dev/branches/lucene4547/lucene/site/xsl/index.xsl
    lucene/dev/branches/lucene4547/lucene/test-framework/   (props changed)
    lucene/dev/branches/lucene4547/lucene/test-framework/src/java/org/apache/lucene/analysis/MockCharFilter.java
    lucene/dev/branches/lucene4547/solr/   (props changed)
    lucene/dev/branches/lucene4547/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene4547/solr/build.xml   (contents, props changed)
    lucene/dev/branches/lucene4547/solr/contrib/   (props changed)
    lucene/dev/branches/lucene4547/solr/contrib/extraction/src/test-files/extraction/solr/collection1/conf/schema.xml
    lucene/dev/branches/lucene4547/solr/contrib/extraction/src/test-files/extraction/solr/collection1/conf/solrconfig.xml
    lucene/dev/branches/lucene4547/solr/contrib/langid/src/java/org/apache/solr/update/processor/LanguageIdentifierUpdateProcessor.java
    lucene/dev/branches/lucene4547/solr/contrib/langid/src/test-files/langid/solr/collection1/conf/schema.xml
    lucene/dev/branches/lucene4547/solr/contrib/langid/src/test/org/apache/solr/update/processor/LanguageIdentifierUpdateProcessorFactoryTestCase.java
    lucene/dev/branches/lucene4547/solr/core/   (props changed)
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
    lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/bad_solrconfig.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema-binaryfield.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema-copyfield-test.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema-not-required-unique-key.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema-numeric.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema-replication1.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema-replication2.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema-required-fields.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema-stop-keep.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schema12.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/schemasurround.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-SOLR-749.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy1.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-elevate.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-enableplugin.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-master.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-master3.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-nocache.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-propinject-indexdefault.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-propinject.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-querysender-noquery.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-querysender.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-response-log-component.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave1.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-solcoreproperties.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-spellcheckcomponent.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-termindex.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/crazy-path-to-config.xml
    lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/crazy-path-to-schema.xml
    lucene/dev/branches/lucene4547/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
    lucene/dev/branches/lucene4547/solr/solrj/   (props changed)
    lucene/dev/branches/lucene4547/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema-replication1.xml
    lucene/dev/branches/lucene4547/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml
    lucene/dev/branches/lucene4547/solr/solrj/src/test-files/solrj/solr/collection1/conf/solrconfig-slave1.xml
    lucene/dev/branches/lucene4547/solr/solrj/src/test-files/solrj/solr/crazy-path-to-schema.xml
    lucene/dev/branches/lucene4547/solr/test-framework/   (props changed)
    lucene/dev/branches/lucene4547/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
    lucene/dev/branches/lucene4547/solr/webapp/   (props changed)
    lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/analysis.js
    lucene/dev/branches/lucene4547/solr/webapp/web/js/scripts/app.js

Modified: lucene/dev/branches/lucene4547/dev-tools/idea/lucene/demo/demo.iml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/dev-tools/idea/lucene/demo/demo.iml?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/dev-tools/idea/lucene/demo/demo.iml (original)
+++ lucene/dev/branches/lucene4547/dev-tools/idea/lucene/demo/demo.iml Thu Jan 31 03:37:31 2013
@@ -24,6 +24,7 @@
     </orderEntry>
     <orderEntry type="module" module-name="analysis-common" />
     <orderEntry type="module" module-name="lucene-core" />
+    <orderEntry type="module" module-name="facet" />
     <orderEntry type="module" module-name="queryparser" />
   </component>
 </module>

Modified: lucene/dev/branches/lucene4547/dev-tools/maven/lucene/demo/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/dev-tools/maven/lucene/demo/pom.xml.template?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/dev-tools/maven/lucene/demo/pom.xml.template (original)
+++ lucene/dev/branches/lucene4547/dev-tools/maven/lucene/demo/pom.xml.template Thu Jan 31 03:37:31 2013
@@ -61,6 +61,11 @@
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
+      <artifactId>lucene-facet</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
       <artifactId>lucene-queryparser</artifactId>
       <version>${project.version}</version>
     </dependency>

Modified: lucene/dev/branches/lucene4547/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/CHANGES.txt?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene4547/lucene/CHANGES.txt Thu Jan 31 03:37:31 2013
@@ -61,6 +61,11 @@ Optimizations
 * LUCENE-4690: Performance improvements and non-hashing versions
   of NumericUtils.*ToPrefixCoded() (yonik)
 
+* LUCENE-4715: CategoryListParams.getOrdinalPolicy now allows to return a
+  different OrdinalPolicy per dimension, to better tune how you index
+  facets. Also added OrdinalPolicy.ALL_BUT_DIMENSION. 
+  (Shai Erera, Michael McCandless)
+
 New Features
 
 * LUCENE-4686: New specialized DGapVInt8IntEncoder for facets (now the 
@@ -115,6 +120,9 @@ Bug Fixes
   you have a taxonomy index created with such strings, you should rebuild it.
   (Michael McCandless, Shai Erera)
 
+* LUCENE-4732: Fixed TermsEnum.seekCeil/seekExact on term vectors.
+  (Adrien Grand, Robert Muir)
+
 ======================= Lucene 4.1.0 =======================
 
 Changes in backwards compatibility policy

Modified: lucene/dev/branches/lucene4547/lucene/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/build.xml?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/build.xml (original)
+++ lucene/dev/branches/lucene4547/lucene/build.xml Thu Jan 31 03:37:31 2013
@@ -191,8 +191,7 @@
         <exclude name="analysis/stempel/classes/java/org/egothor/stemmer/Compile.class"/>
         <exclude name="analysis/stempel/classes/java/org/egothor/stemmer/DiffIt.class"/>
         <exclude name="benchmark/**"/>
-        <exclude name="demo/classes/java/org/apache/lucene/demo/IndexFiles.class"/>
-        <exclude name="demo/classes/java/org/apache/lucene/demo/SearchFiles.class"/>
+        <exclude name="demo/classes/java/org/apache/lucene/**"/>
         <exclude name="misc/classes/java/org/apache/lucene/index/CompoundFileExtractor.class"/>
         <exclude name="misc/classes/java/org/apache/lucene/index/IndexSplitter.class"/>
         <exclude name="misc/classes/java/org/apache/lucene/index/MultiPassIndexSplitter.class"/>

Modified: lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java (original)
+++ lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java Thu Jan 31 03:37:31 2013
@@ -832,10 +832,18 @@ public final class CompressingTermVector
         }
       }
       // linear scan
-      do {
-        next();
-      } while (ord < numTerms - 1 && term().compareTo(text) < 0);
-      return term().equals(text) ? SeekStatus.FOUND : SeekStatus.END;
+      while (true) {
+        final BytesRef term = next();
+        if (term == null) {
+          return SeekStatus.END;
+        }
+        final int cmp = term.compareTo(text);
+        if (cmp > 0) {
+          return SeekStatus.NOT_FOUND;
+        } else if (cmp == 0) {
+          return SeekStatus.FOUND;
+        }
+      }
     }
 
     @Override

Modified: lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java (original)
+++ lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java Thu Jan 31 03:37:31 2013
@@ -422,7 +422,7 @@ public class Lucene40TermVectorsReader e
       this.storePayloads = storePayloads;
       nextTerm = 0;
       tvf.seek(tvfFPStart);
-      tvfFP = 1+tvfFPStart;
+      tvfFP = tvfFPStart;
       positions = null;
       startOffsets = null;
       endOffsets = null;

Modified: lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java (original)
+++ lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java Thu Jan 31 03:37:31 2013
@@ -38,6 +38,7 @@ import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.lucene.util.LineFileDocs;
 import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util._TestUtil;
 import org.apache.lucene.util.automaton.AutomatonTestUtil;
 import org.apache.lucene.util.automaton.CompiledAutomaton;
 import org.apache.lucene.util.automaton.RegExp;
@@ -236,11 +237,11 @@ public class TestDuelingCodecs extends L
   private void assertTermsSeeking(Terms leftTerms, Terms rightTerms) throws Exception {
     TermsEnum leftEnum = null;
     TermsEnum rightEnum = null;
-    
+
     // just an upper bound
     int numTests = atLeast(20);
     Random random = random();
-    
+
     // collect this number of terms from the left side
     HashSet<BytesRef> tests = new HashSet<BytesRef>();
     int numPasses = 0;
@@ -264,36 +265,50 @@ public class TestDuelingCodecs extends L
           byte newbytes[] = new byte[term.length+5];
           System.arraycopy(term.bytes, term.offset, newbytes, 5, term.length);
           tests.add(new BytesRef(newbytes, 5, term.length));
+        } else if (code == 3) {
+          switch (random().nextInt(3)) {
+            case 0:
+              tests.add(new BytesRef()); // before the first term
+              break;
+            case 1:
+              tests.add(new BytesRef(new byte[] {(byte) 0xFF, (byte) 0xFF})); // past the last term
+              break;
+            case 2:
+              tests.add(new BytesRef(_TestUtil.randomSimpleString(random()))); // random term
+              break;
+            default:
+              throw new AssertionError();
+          }
         }
       }
       numPasses++;
     }
-    
+
+    rightEnum = rightTerms.iterator(rightEnum);
+
     ArrayList<BytesRef> shuffledTests = new ArrayList<BytesRef>(tests);
     Collections.shuffle(shuffledTests, random);
-    
+
     for (BytesRef b : shuffledTests) {
-      leftEnum = leftTerms.iterator(leftEnum);
-      rightEnum = rightTerms.iterator(rightEnum);
-      
-      assertEquals(info, leftEnum.seekExact(b, false), rightEnum.seekExact(b, false));
-      assertEquals(info, leftEnum.seekExact(b, true), rightEnum.seekExact(b, true));
-      
-      SeekStatus leftStatus;
-      SeekStatus rightStatus;
-      
-      leftStatus = leftEnum.seekCeil(b, false);
-      rightStatus = rightEnum.seekCeil(b, false);
-      assertEquals(info, leftStatus, rightStatus);
-      if (leftStatus != SeekStatus.END) {
-        assertEquals(info, leftEnum.term(), rightEnum.term());
+      if (rarely()) {
+        // reuse the enums
+        leftEnum = leftTerms.iterator(leftEnum);
+        rightEnum = rightTerms.iterator(rightEnum);
       }
-      
-      leftStatus = leftEnum.seekCeil(b, true);
-      rightStatus = rightEnum.seekCeil(b, true);
-      assertEquals(info, leftStatus, rightStatus);
-      if (leftStatus != SeekStatus.END) {
-        assertEquals(info, leftEnum.term(), rightEnum.term());
+
+      final boolean useCache = random().nextBoolean();
+      final boolean seekExact = random().nextBoolean();
+
+      if (seekExact) {
+        assertEquals(info, leftEnum.seekExact(b, useCache), rightEnum.seekExact(b, useCache));
+      } else {
+        SeekStatus leftStatus = leftEnum.seekCeil(b, useCache);
+        SeekStatus rightStatus = rightEnum.seekCeil(b, useCache);
+        assertEquals(info, leftStatus, rightStatus);
+        if (leftStatus != SeekStatus.END) {
+          assertEquals(info, leftEnum.term(), rightEnum.term());
+          assertTermStats(leftEnum, rightEnum);
+        }
       }
     }
   }

Modified: lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestPayloadsOnVectors.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestPayloadsOnVectors.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestPayloadsOnVectors.java (original)
+++ lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/index/TestPayloadsOnVectors.java Thu Jan 31 03:37:31 2013
@@ -251,7 +251,7 @@ public class TestPayloadsOnVectors exten
       for (int i = 0; i < len; ++i) {
         terms[i] = RandomPicks.randomFrom(random(), sampleTerms);
         if (weird) {
-          positionsIncrements[i] = random().nextInt(1 << 18);
+          positionsIncrements[i] = _TestUtil.nextInt(random(), 1, 1 << 18);
           startOffsets[i] = random().nextInt();
           endOffsets[i] = random().nextInt();
         } else if (i == 0) {

Modified: lucene/dev/branches/lucene4547/lucene/demo/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/demo/build.xml?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/demo/build.xml (original)
+++ lucene/dev/branches/lucene4547/lucene/demo/build.xml Thu Jan 31 03:37:31 2013
@@ -33,20 +33,22 @@
    <pathelement path="${analyzers-common.jar}"/>
    <pathelement path="${queryparser.jar}"/>
    <pathelement path="${lucene-core.jar}"/>
+   <pathelement path="${facet.jar}"/>
    <fileset dir="lib"/>
   </path>
 
-  <target name="javadocs" depends="javadocs-analyzers-common,javadocs-queryparser,compile-core">
+  <target name="javadocs" depends="javadocs-analyzers-common,javadocs-queryparser,javadocs-facet,compile-core">
     <!-- we link the example source in the javadocs, as its ref'ed elsewhere -->
     <invoke-module-javadoc linksource="yes">
       <links>
         <link href="../analyzers-common"/>
         <link href="../queryparser"/>
+      	<link href="../facet"/>
       </links>
     </invoke-module-javadoc>
   </target>
 
-  <target name="compile-core" depends="jar-analyzers-common,jar-queryparser,common.compile-core" />
+  <target name="compile-core" depends="jar-analyzers-common,jar-queryparser,jar-facet,common.compile-core" />
 
   <target name="default" depends="jar-core,build-web-demo"/>
 
@@ -63,6 +65,7 @@
       <lib file="${queries.jar}"/>
       <lib file="${queryparser.jar}"/>
       <lib file="${lucene-core.jar}"/>
+      <lib file="${facet.jar}"/>
     </war>
   </target>
   

Modified: lucene/dev/branches/lucene4547/lucene/facet/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/build.xml?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/build.xml (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/build.xml Thu Jan 31 03:37:31 2013
@@ -28,52 +28,6 @@
   
   <import file="../module-build.xml"/>
 
-  <property name="examples.dir" location="src/examples"/>
-
-  <path id="examples.classpath">
-    <path refid="classpath" />
-    <pathelement location="${build.dir}/classes/java" />
-    <pathelement path="${analyzers-common.jar}" />
-  </path>
-
-	<path id="test.classpath">
-    <path refid="test.base.classpath" />
-    <pathelement location="${build.dir}/classes/examples" />
-  </path>
-
-  <path id="classpath">
-    <!-- TODO, cut over tests to MockAnalyzer etc and nuke this dependency -->
-    <pathelement path="${analyzers-common.jar}" />
-    <path refid="base.classpath"/>
-  </path>
-
-  <target name="compile-examples" description="Compiles Facets examples">
-    <compile srcdir="${examples.dir}" destdir="${build.dir}/classes/examples">
-      <classpath refid="examples.classpath" />
-    </compile>
-  </target>
-  
-  <target name="jar-examples" depends="compile-examples">
-    <jarify basedir="${build.dir}/classes/examples" 
-            destfile="${build.dir}/${final.name}-examples.jar" 
-            title="Lucene Search Engine: ${ant.project.name}-examples"
-            manifest.file="${build.dir}/EXAMPLES-MANIFEST.MF">
-      <fileset dir="src/examples" />
-    </jarify>
-  </target>
-
-  <target name="compile-core" depends="jar-analyzers-common,common.compile-core,compile-examples" description="Compiles facet classes" />
-
-  <target name="jar-core" depends="common.jar-core,jar-examples" />
-
-  <target name="javadocs" depends="javadocs-analyzers-common,compile-core">
-    <invoke-module-javadoc>
-      <links>
-        <link href="../analyzers-common"/>
-      </links>
-    </invoke-module-javadoc>
-  </target>
-
   <target name="run-encoding-benchmark" depends="compile-test">
     <java classname="org.apache.lucene.util.encoding.EncodingSpeed" fork="true" failonerror="true">
       <classpath refid="test.classpath" />

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/CountingListBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/CountingListBuilder.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/CountingListBuilder.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/CountingListBuilder.java Thu Jan 31 03:37:31 2013
@@ -3,6 +3,7 @@ package org.apache.lucene.facet.index;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -115,12 +116,12 @@ public class CountingListBuilder impleme
   
   private final OrdinalsEncoder ordinalsEncoder;
   private final TaxonomyWriter taxoWriter;
-  private final OrdinalPolicy ordinalPolicy;
+  private final CategoryListParams clp;
   
   public CountingListBuilder(CategoryListParams categoryListParams, FacetIndexingParams indexingParams, 
       TaxonomyWriter taxoWriter) {
     this.taxoWriter = taxoWriter;
-    this.ordinalPolicy = categoryListParams.getOrdinalPolicy();
+    this.clp = categoryListParams;
     if (indexingParams.getPartitionSize() == Integer.MAX_VALUE) {
       ordinalsEncoder = new NoPartitionsOrdinalsEncoder(categoryListParams);
     } else {
@@ -141,16 +142,23 @@ public class CountingListBuilder impleme
    */
   @Override
   public Map<String,BytesRef> build(IntsRef ordinals, Iterable<CategoryPath> categories) throws IOException {
-    int upto = ordinals.length; // since we add ordinals to IntsRef, iterate upto original length
-    
-    if (ordinalPolicy == OrdinalPolicy.ALL_PARENTS) { // add all parents too
-      for (int i = 0; i < upto; i++) {
-        int ordinal = ordinals.ints[i];
+    int upto = ordinals.length; // since we may add ordinals to IntsRef, iterate upto original length
+
+    Iterator<CategoryPath> iter = categories.iterator();
+    for (int i = 0; i < upto; i++) {
+      int ordinal = ordinals.ints[i];
+      CategoryPath cp = iter.next();
+      OrdinalPolicy op = clp.getOrdinalPolicy(cp.components[0]);
+      if (op != OrdinalPolicy.NO_PARENTS) {
+        // need to add parents too
         int parent = taxoWriter.getParent(ordinal);
         while (parent > 0) {
           ordinals.ints[ordinals.length++] = parent;
           parent = taxoWriter.getParent(parent);
         }
+        if (op == OrdinalPolicy.ALL_BUT_DIMENSION) { // discard the last added parent, which is the dimension
+          ordinals.length--;
+        }
       }
     }
     return ordinalsEncoder.encode(ordinals);

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/params/CategoryListParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/params/CategoryListParams.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/params/CategoryListParams.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/index/params/CategoryListParams.java Thu Jan 31 03:37:31 2013
@@ -4,6 +4,7 @@ import java.io.IOException;
 
 import org.apache.lucene.facet.search.CategoryListIterator;
 import org.apache.lucene.facet.search.DocValuesCategoryListIterator;
+import org.apache.lucene.facet.taxonomy.CategoryPath;
 import org.apache.lucene.facet.util.PartitionsUtils;
 import org.apache.lucene.util.encoding.DGapVInt8IntEncoder;
 import org.apache.lucene.util.encoding.IntDecoder;
@@ -35,25 +36,61 @@ import org.apache.lucene.util.encoding.U
  */
 public class CategoryListParams {
 
-  /** OrdinalPolicy defines which ordinals are encoded for every document. */
+  /**
+   * Defines which category ordinals are encoded for every document. This also
+   * affects how category ordinals are aggregated, check the different policies
+   * for more details.
+   */
   public static enum OrdinalPolicy {
     /**
-     * Encodes only the ordinal of leaf nodes. That is, the category A/B/C will
-     * not encode the ordinals of A and A/B.
+     * Encodes only the ordinals of leaf nodes. That is, for the category A/B/C,
+     * the ordinals of A and A/B will not be encoded. This policy is efficient
+     * for hierarchical dimensions, as it reduces the number of ordinals that
+     * are visited per document. During faceted search, this policy behaves
+     * exactly like {@link #ALL_PARENTS}, and the counts of all path components
+     * will be computed as well.
      * 
      * <p>
      * <b>NOTE:</b> this {@link OrdinalPolicy} requires a special collector or
-     * accumulator, which will fix the parents' counts, unless you are not
-     * interested in the parents counts.
+     * accumulator, which will fix the parents' counts.
+     * 
+     * <p>
+     * <b>NOTE:</b> since only leaf nodes are encoded for the document, you
+     * should use this policy when the same document doesn't share two
+     * categories that have a mutual parent, or otherwise the counts will be
+     * wrong (the mutual parent will be over-counted). For example, if a
+     * document has the categories A/B/C and A/B/D, then with this policy the
+     * counts of "A" and "B" will be 2, which is wrong. If you intend to index
+     * hierarchical dimensions, with more than one category per document, you
+     * should use either {@link #ALL_PARENTS} or {@link #ALL_BUT_DIMENSION}.
      */
     NO_PARENTS,
     
     /**
      * Encodes the ordinals of all path components. That is, the category A/B/C
-     * will encode the ordinals of A and A/B as well. This is the default
-     * {@link OrdinalPolicy}.
+     * will encode the ordinals of A and A/B as well. If you don't require the
+     * dimension's count during search, consider using
+     * {@link #ALL_BUT_DIMENSION}.
+     */
+    ALL_PARENTS,
+    
+    /**
+     * Encodes the ordinals of all path components except the dimension. The
+     * dimension of a category is defined to be the first components in
+     * {@link CategoryPath#components}. For the category A/B/C, the ordinal of
+     * A/B will be encoded as well, however not the ordinal of A.
+     * 
+     * <p>
+     * <b>NOTE:</b> when facets are aggregated, this policy behaves exactly like
+     * {@link #ALL_PARENTS}, except that the dimension is never counted. I.e. if
+     * you ask to count the facet "A", then while in {@link #ALL_PARENTS} you
+     * will get counts for "A" <u>and its children</u>, with this policy you
+     * will get counts for <u>only its children</u>. This policy is the default
+     * one, and makes sense for using with flat dimensions, whenever your
+     * application does not require the dimension's count. Otherwise, use
+     * {@link #ALL_PARENTS}.
      */
-    ALL_PARENTS
+    ALL_BUT_DIMENSION
   }
   
   /** The default field used to store the facets information. */
@@ -63,7 +100,7 @@ public class CategoryListParams {
    * The default {@link OrdinalPolicy} that's used when encoding a document's
    * category ordinals.
    */
-  public static final OrdinalPolicy DEFAULT_ORDINAL_POLICY = OrdinalPolicy.ALL_PARENTS;
+  public static final OrdinalPolicy DEFAULT_ORDINAL_POLICY = OrdinalPolicy.ALL_BUT_DIMENSION;
   
   public final String field;
 
@@ -115,19 +152,15 @@ public class CategoryListParams {
       return false;
     }
     CategoryListParams other = (CategoryListParams) o;
-    if (this.hashCode != other.hashCode) {
+    if (hashCode != other.hashCode) {
       return false;
     }
-    
-    // The above hashcodes might equal each other in the case of a collision,
-    // so at this point only directly term equality testing will settle
-    // the equality test.
     return field.equals(other.field);
   }
 
   @Override
   public int hashCode() {
-    return this.hashCode;
+    return hashCode;
   }
 
   /** Create the {@link CategoryListIterator} for the specified partition. */
@@ -137,14 +170,18 @@ public class CategoryListParams {
     return new DocValuesCategoryListIterator(docValuesField, createEncoder().createMatchingDecoder());
   }
   
-  /** Returns the {@link OrdinalPolicy} to use for this {@link CategoryListParams}. */
-  public OrdinalPolicy getOrdinalPolicy() {
+  /**
+   * Returns the {@link OrdinalPolicy} to use for the given dimension. This
+   * {@link CategoryListParams} always returns {@link #DEFAULT_ORDINAL_POLICY}
+   * for all dimensions.
+   */
+  public OrdinalPolicy getOrdinalPolicy(String dimension) {
     return DEFAULT_ORDINAL_POLICY;
   }
   
   @Override
   public String toString() {
-    return "field=" + field + " encoder=" + createEncoder() + " ordinalPolicy=" + getOrdinalPolicy();
+    return "field=" + field + " encoder=" + createEncoder() + " ordinalPolicy=" + getOrdinalPolicy(null);
   }
   
-}
\ No newline at end of file
+}

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsCollector.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsCollector.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsCollector.java Thu Jan 31 03:37:31 2013
@@ -81,7 +81,7 @@ import org.apache.lucene.util.encoding.D
 public class CountingFacetsCollector extends FacetsCollector {
   
   private final FacetSearchParams fsp;
-  private final OrdinalPolicy ordinalPolicy;
+  private final CategoryListParams clp;
   private final TaxonomyReader taxoReader;
   private final BytesRef buf = new BytesRef(32);
   private final FacetArrays facetArrays;
@@ -101,8 +101,7 @@ public class CountingFacetsCollector ext
     assert assertParams(fsp) == null : assertParams(fsp);
     
     this.fsp = fsp;
-    CategoryListParams clp = fsp.indexingParams.getCategoryListParams(fsp.facetRequests.get(0).categoryPath);
-    this.ordinalPolicy = clp.getOrdinalPolicy();
+    this.clp = fsp.indexingParams.getCategoryListParams(fsp.facetRequests.get(0).categoryPath);
     this.facetsField = clp.field;
     this.taxoReader = taxoReader;
     this.facetArrays = facetArrays;
@@ -209,21 +208,21 @@ public class CountingFacetsCollector ext
     }
   }
 
-  private void countParents(int[] parents) {
-    // counts[0] is the count of ROOT, which we don't care about and counts[1]
-    // can only update counts[0], so we don't bother to visit it too. also,
-    // since parents always have lower ordinals than their children, we traverse
-    // the array backwards. this also allows us to update just the immediate
-    // parent's count (actually, otherwise it would be a mistake).
-    for (int i = counts.length - 1; i > 1; i--) {
-      int count = counts[i];
-      if (count > 0) {
-        int parent = parents[i];
-        if (parent != 0) {
-          counts[parent] += count;
-        }
-      }
+  /**
+   * Computes the counts of ordinals under the given ordinal's tree, by
+   * recursively going down to leaf nodes and rollin up their counts (called
+   * only with categories are indexing with OrdinalPolicy.NO_PARENTS).
+   */
+  private int rollupCounts(int ordinal, int[] children, int[] siblings) {
+    int count = 0;
+    while (ordinal != TaxonomyReader.INVALID_ORDINAL) {
+      int childCount = counts[ordinal];
+      childCount += rollupCounts(children[ordinal], children, siblings);
+      counts[ordinal] = childCount;
+      count += childCount;
+      ordinal = siblings[ordinal];
     }
+    return count;
   }
 
   @Override
@@ -234,11 +233,6 @@ public class CountingFacetsCollector ext
       
       ParallelTaxonomyArrays arrays = taxoReader.getParallelTaxonomyArrays();
 
-      if (ordinalPolicy == OrdinalPolicy.NO_PARENTS) {
-        // need to count parents
-        countParents(arrays.parents());
-      }
-
       // compute top-K
       final int[] children = arrays.children();
       final int[] siblings = arrays.siblings();
@@ -248,6 +242,12 @@ public class CountingFacetsCollector ext
         if (rootOrd == TaxonomyReader.INVALID_ORDINAL) { // category does not exist
           continue;
         }
+        OrdinalPolicy ordinalPolicy = clp.getOrdinalPolicy(fr.categoryPath.components[0]);
+        if (ordinalPolicy == OrdinalPolicy.NO_PARENTS) {
+          // need to count parents
+          counts[rootOrd] += rollupCounts(children[rootOrd], children, siblings);
+        }
+        
         FacetResultNode root = new FacetResultNode();
         root.ordinal = rootOrd;
         root.label = fr.categoryPath;

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/FacetsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/FacetsCollector.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/FacetsCollector.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/FacetsCollector.java Thu Jan 31 03:37:31 2013
@@ -43,13 +43,21 @@ public abstract class FacetsCollector ex
    * Returns the most optimized {@link FacetsCollector} for the given search
    * parameters. The returned {@link FacetsCollector} is guaranteed to satisfy
    * the requested parameters.
+   * 
+   * @throws IllegalArgumentException
+   *           if there is no built-in collector that can satisfy the search
+   *           parameters.
    */
   public static FacetsCollector create(FacetSearchParams fsp, IndexReader indexReader, TaxonomyReader taxoReader) {
     if (CountingFacetsCollector.assertParams(fsp) == null) {
       return new CountingFacetsCollector(fsp, taxoReader);
     }
     
-    return new StandardFacetsCollector(fsp, indexReader, taxoReader);
+    if (StandardFacetsCollector.assertParams(fsp) == null) {
+      return new StandardFacetsCollector(fsp, indexReader, taxoReader);
+    }
+    
+    throw new IllegalArgumentException("None of the built-in FacetsCollectors can handle the given search params");
   }
   
   /**

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/StandardFacetsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/StandardFacetsCollector.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/StandardFacetsCollector.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/search/StandardFacetsCollector.java Thu Jan 31 03:37:31 2013
@@ -49,6 +49,17 @@ public class StandardFacetsCollector ext
   private List<FacetResult> results;
   private Object resultsGuard;
 
+  static String assertParams(FacetSearchParams fsp) {
+    // make sure none of the categories in the given FacetRequests was indexed with NO_PARENTS
+    for (FacetRequest fr : fsp.facetRequests) {
+      CategoryListParams clp = fsp.indexingParams.getCategoryListParams(fr.categoryPath);
+      if (clp.getOrdinalPolicy(fr.categoryPath.components[0]) == OrdinalPolicy.NO_PARENTS) {
+        return "this collector does not support aggregating categories that were indexed with OrdinalPolicy.NO_PARENTS";
+      }
+    }
+    return null;
+  }
+  
   /**
    * Create a collector for accumulating facets while collecting documents
    * during search.
@@ -62,6 +73,7 @@ public class StandardFacetsCollector ext
    *          taxonomy containing the facets.
    */
   public StandardFacetsCollector(FacetSearchParams facetSearchParams, IndexReader indexReader, TaxonomyReader taxonomyReader) {
+    assert assertParams(facetSearchParams) == null : assertParams(facetSearchParams);
     facetsAccumulator = initFacetsAccumulator(facetSearchParams, indexReader, taxonomyReader);
     scoreDocIdCollector = initScoredDocCollector(facetSearchParams, indexReader, taxonomyReader);
     resultsGuard = new Object();

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/util/ScoredDocIdsUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/util/ScoredDocIdsUtils.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/util/ScoredDocIdsUtils.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/java/org/apache/lucene/facet/util/ScoredDocIdsUtils.java Thu Jan 31 03:37:31 2013
@@ -74,6 +74,7 @@ public class ScoredDocIdsUtils {
   
   /** Clear all deleted documents from a given open-bit-set according to a given reader */
   private static void clearDeleted(final IndexReader reader, final FixedBitSet set) throws IOException {
+    // TODO use BitsFilteredDocIdSet?
     
     // If there are no deleted docs
     if (!reader.hasDeletions()) {

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestBase.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestBase.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestBase.java Thu Jan 31 03:37:31 2013
@@ -6,6 +6,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -17,6 +18,7 @@ import org.apache.lucene.document.Field;
 import org.apache.lucene.document.TextField;
 import org.apache.lucene.facet.index.FacetFields;
 import org.apache.lucene.facet.index.params.CategoryListParams;
+import org.apache.lucene.facet.index.params.CategoryListParams.OrdinalPolicy;
 import org.apache.lucene.facet.index.params.FacetIndexingParams;
 import org.apache.lucene.facet.search.params.FacetRequest;
 import org.apache.lucene.facet.search.params.FacetSearchParams;
@@ -44,6 +46,7 @@ import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
 import org.apache.lucene.util._TestUtil;
+import org.apache.lucene.util.collections.IntToObjectMap;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
@@ -73,7 +76,8 @@ public abstract class FacetTestBase exte
     SearchTaxoDirPair() {}
   }
   
-  private static HashMap<Integer, SearchTaxoDirPair> dirsPerPartitionSize;
+  private static IntToObjectMap<SearchTaxoDirPair> dirsPerPartitionSize;
+  private static IntToObjectMap<FacetIndexingParams> fipPerPartitionSize;
   private static File TEST_DIR;
   
   /** Documents text field. */
@@ -91,12 +95,15 @@ public abstract class FacetTestBase exte
   @BeforeClass
   public static void beforeClassFacetTestBase() {
     TEST_DIR = _TestUtil.getTempDir("facets");
-    dirsPerPartitionSize = new HashMap<Integer, FacetTestBase.SearchTaxoDirPair>();
+    dirsPerPartitionSize = new IntToObjectMap<FacetTestBase.SearchTaxoDirPair>();
+    fipPerPartitionSize = new IntToObjectMap<FacetIndexingParams>();
   }
   
   @AfterClass
   public static void afterClassFacetTestBase() throws Exception {
-    for (SearchTaxoDirPair pair : dirsPerPartitionSize.values()) {
+    Iterator<SearchTaxoDirPair> iter = dirsPerPartitionSize.iterator();
+    while (iter.hasNext()) {
+      SearchTaxoDirPair pair = iter.next();
       IOUtils.close(pair.searchDir, pair.taxoDir);
     }
   }
@@ -128,20 +135,16 @@ public abstract class FacetTestBase exte
     return DEFAULT_CONTENT[doc];
   }
   
-  /** Prepare index (in RAM) with single partition */
-  protected final void initIndex() throws Exception {
-    initIndex(Integer.MAX_VALUE);
-  }
-  
-  /** Prepare index (in RAM) with some documents and some facets */
-  protected final void initIndex(int partitionSize) throws Exception {
-    initIndex(partitionSize, false);
+  /** Prepare index (in RAM) with some documents and some facets. */
+  protected final void initIndex(FacetIndexingParams fip) throws Exception {
+    initIndex(false, fip);
   }
 
-  /** Prepare index (in RAM/Disk) with some documents and some facets */
-  protected final void initIndex(int partitionSize, boolean forceDisk) throws Exception {
+  /** Prepare index (in RAM/Disk) with some documents and some facets. */
+  protected final void initIndex(boolean forceDisk, FacetIndexingParams fip) throws Exception {
+    int partitionSize = fip.getPartitionSize();
     if (VERBOSE) {
-      System.out.println("Partition Size: " + partitionSize+"  forceDisk: "+forceDisk);
+      System.out.println("Partition Size: " + partitionSize + "  forceDisk: "+forceDisk);
     }
 
     SearchTaxoDirPair pair = dirsPerPartitionSize.get(Integer.valueOf(partitionSize));
@@ -158,7 +161,7 @@ public abstract class FacetTestBase exte
       RandomIndexWriter iw = new RandomIndexWriter(random(), pair.searchDir, getIndexWriterConfig(getAnalyzer()));
       TaxonomyWriter taxo = new DirectoryTaxonomyWriter(pair.taxoDir, OpenMode.CREATE);
       
-      populateIndex(iw, taxo, getFacetIndexingParams(partitionSize));
+      populateIndex(iw, taxo, fip);
       
       // commit changes (taxonomy prior to search index for consistency)
       taxo.commit();
@@ -182,14 +185,40 @@ public abstract class FacetTestBase exte
 
   /** Returns a {@link FacetIndexingParams} per the given partition size. */
   protected FacetIndexingParams getFacetIndexingParams(final int partSize) {
-    // several of our encoders don't support the value 0, 
-    // which is one of the values encoded when dealing w/ partitions.
-    return new FacetIndexingParams() {
-      @Override
-      public int getPartitionSize() {
-        return partSize;
-      }
-    };
+    return getFacetIndexingParams(partSize, false);
+  }
+  
+  /**
+   * Returns a {@link FacetIndexingParams} per the given partition size. If
+   * requested, then {@link OrdinalPolicy} will be set to
+   * {@link OrdinalPolicy#ALL_PARENTS}, otherwise it will randomize.
+   */
+  protected FacetIndexingParams getFacetIndexingParams(final int partSize, final boolean forceAllParents) {
+    FacetIndexingParams fip = fipPerPartitionSize.get(partSize);
+    if (fip == null) {
+      // randomize OrdinalPolicy. Since not all Collectors / Accumulators
+      // support NO_PARENTS, don't include it.
+      // TODO: once all code paths support NO_PARENTS, randomize it too.
+      CategoryListParams randomOP = new CategoryListParams() {
+        final OrdinalPolicy op = random().nextBoolean() ? OrdinalPolicy.ALL_BUT_DIMENSION : OrdinalPolicy.ALL_PARENTS;
+        @Override
+        public OrdinalPolicy getOrdinalPolicy(String dimension) {
+          return forceAllParents ? OrdinalPolicy.ALL_PARENTS : op;
+        }
+      };
+      
+      // several of our encoders don't support the value 0, 
+      // which is one of the values encoded when dealing w/ partitions,
+      // therefore don't randomize the encoder.
+      fip = new FacetIndexingParams(randomOP) {
+        @Override
+        public int getPartitionSize() {
+          return partSize;
+        }
+      };
+      fipPerPartitionSize.put(partSize, fip);
+    }
+    return fip;
   }
   
   /**

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestUtils.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestUtils.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/FacetTestUtils.java Thu Jan 31 03:37:31 2013
@@ -1,19 +1,7 @@
 package org.apache.lucene.facet;
 
-import java.io.IOException;
-
-import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.facet.search.results.FacetResult;
 import org.apache.lucene.facet.search.results.FacetResultNode;
-import org.apache.lucene.facet.taxonomy.TaxonomyWriter;
-import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyReader;
-import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter;
-import org.apache.lucene.index.DirectoryReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.IndexWriterConfig;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.LuceneTestCase;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -34,68 +22,6 @@ import org.apache.lucene.util.LuceneTest
 
 public class FacetTestUtils {
 
-  public static class IndexTaxonomyReaderPair {
-    public DirectoryReader indexReader;
-    public DirectoryTaxonomyReader taxReader;
-    public IndexSearcher indexSearcher;
-
-    public void close() throws IOException {
-      indexReader.close();
-      taxReader.close();
-    }
-
-  }
-
-  public static class IndexTaxonomyWriterPair {
-    public IndexWriter indexWriter;
-    public TaxonomyWriter taxWriter;
-
-    public void close() throws IOException {
-      indexWriter.close();
-      taxWriter.close();
-    }
-
-    public void commit() throws IOException {
-      indexWriter.commit();
-      taxWriter.commit();
-    }
-  }
-
-  public static Directory[][] createIndexTaxonomyDirs(int number) {
-    Directory[][] dirs = new Directory[number][2];
-    for (int i = 0; i < number; i++) {
-      dirs[i][0] = LuceneTestCase.newDirectory();
-      dirs[i][1] = LuceneTestCase.newDirectory();
-    }
-    return dirs;
-  }
-
-  public static IndexTaxonomyReaderPair[] createIndexTaxonomyReaderPair(Directory[][] dirs) throws IOException {
-    IndexTaxonomyReaderPair[] pairs = new IndexTaxonomyReaderPair[dirs.length];
-    for (int i = 0; i < dirs.length; i++) {
-      IndexTaxonomyReaderPair pair = new IndexTaxonomyReaderPair();
-      pair.indexReader = DirectoryReader.open(dirs[i][0]);
-      pair.indexSearcher = new IndexSearcher(pair.indexReader);
-      pair.taxReader = new DirectoryTaxonomyReader(dirs[i][1]);
-      pairs[i] = pair;
-    }
-    return pairs;
-  }
-  
-  public static IndexTaxonomyWriterPair[] createIndexTaxonomyWriterPair(Directory[][] dirs) throws IOException {
-    IndexTaxonomyWriterPair[] pairs = new IndexTaxonomyWriterPair[dirs.length];
-    for (int i = 0; i < dirs.length; i++) {
-      IndexTaxonomyWriterPair pair = new IndexTaxonomyWriterPair();
-      pair.indexWriter = new IndexWriter(dirs[i][0], new IndexWriterConfig(
-          LuceneTestCase.TEST_VERSION_CURRENT, new MockAnalyzer(LuceneTestCase.random())));
-      pair.taxWriter = new DirectoryTaxonomyWriter(dirs[i][1]);
-      pair.indexWriter.commit();
-      pair.taxWriter.commit();
-      pairs[i] = pair;
-    }
-    return pairs;
-  }
-
   public static String toSimpleString(FacetResult fr) {
     StringBuilder sb = new StringBuilder();
     toSimpleString(0, sb, fr.getFacetResultNode(), "");

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/OrdinalMappingReaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/OrdinalMappingReaderTest.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/OrdinalMappingReaderTest.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/OrdinalMappingReaderTest.java Thu Jan 31 03:37:31 2013
@@ -8,7 +8,6 @@ import org.apache.lucene.analysis.MockAn
 import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.facet.FacetTestCase;
-import org.apache.lucene.facet.example.merge.TaxonomyMergeUtils;
 import org.apache.lucene.facet.index.params.FacetIndexingParams;
 import org.apache.lucene.facet.search.FacetsCollector;
 import org.apache.lucene.facet.search.params.CountFacetRequest;
@@ -18,6 +17,7 @@ import org.apache.lucene.facet.search.re
 import org.apache.lucene.facet.taxonomy.CategoryPath;
 import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyReader;
 import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter;
+import org.apache.lucene.facet.util.TaxonomyMergeUtils;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.RandomIndexWriter;

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/TestFacetsPayloadMigrationReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/TestFacetsPayloadMigrationReader.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/TestFacetsPayloadMigrationReader.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/index/TestFacetsPayloadMigrationReader.java Thu Jan 31 03:37:31 2013
@@ -25,6 +25,8 @@ import org.apache.lucene.facet.FacetTest
 import org.apache.lucene.facet.index.params.CategoryListParams;
 import org.apache.lucene.facet.index.params.FacetIndexingParams;
 import org.apache.lucene.facet.index.params.PerDimensionIndexingParams;
+import org.apache.lucene.facet.index.params.CategoryListParams.OrdinalPolicy;
+import org.apache.lucene.facet.index.params.PerDimensionOrdinalPolicy;
 import org.apache.lucene.facet.search.CategoryListIterator;
 import org.apache.lucene.facet.search.DrillDown;
 import org.apache.lucene.facet.search.FacetsCollector;
@@ -368,9 +370,23 @@ public class TestFacetsPayloadMigrationR
     
     // set custom CLP fields for two dimensions and use the default ($facets) for the other two
     HashMap<CategoryPath,CategoryListParams> params = new HashMap<CategoryPath,CategoryListParams>();
-    params.put(new CategoryPath(DIMENSIONS[0]), new CategoryListParams(DIMENSIONS[0]));
-    params.put(new CategoryPath(DIMENSIONS[1]), new CategoryListParams(DIMENSIONS[1]));
-    FacetIndexingParams fip = new PerDimensionIndexingParams(params) {
+    params.put(new CategoryPath(DIMENSIONS[0]), new CategoryListParams(DIMENSIONS[0]) {
+      @Override
+      public OrdinalPolicy getOrdinalPolicy(String dimension) {
+        return OrdinalPolicy.ALL_PARENTS;
+      }
+    });
+    params.put(new CategoryPath(DIMENSIONS[1]), new CategoryListParams(DIMENSIONS[1]) {
+      @Override
+      public OrdinalPolicy getOrdinalPolicy(String dimension) {
+        return OrdinalPolicy.ALL_PARENTS;
+      }
+    });
+    
+    HashMap<String,OrdinalPolicy> policies = new HashMap<String,CategoryListParams.OrdinalPolicy>();
+    policies.put(DIMENSIONS[2], OrdinalPolicy.ALL_PARENTS);
+    policies.put(DIMENSIONS[3], OrdinalPolicy.ALL_PARENTS);
+    FacetIndexingParams fip = new PerDimensionIndexingParams(params, new PerDimensionOrdinalPolicy(policies)) {
       @Override
       public int getPartitionSize() {
         return partitionSize;

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/BaseTestTopK.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/BaseTestTopK.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/BaseTestTopK.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/BaseTestTopK.java Thu Jan 31 03:37:31 2013
@@ -51,10 +51,9 @@ public abstract class BaseTestTopK exten
   private int nextInt;
 
   @Override
-  protected void populateIndex(RandomIndexWriter iw, TaxonomyWriter taxo,
-      FacetIndexingParams iParams) throws IOException {
+  protected void populateIndex(RandomIndexWriter iw, TaxonomyWriter taxo, FacetIndexingParams fip) throws IOException {
     currDoc = -1;
-    super.populateIndex(iw, taxo, iParams);
+    super.populateIndex(iw, taxo, fip);
   }
   
   /** prepare the next random int */
@@ -94,17 +93,13 @@ public abstract class BaseTestTopK exten
     return Arrays.asList(cp);
   }
 
-  protected FacetSearchParams searchParamsWithRequests(int numResults) {
-    return searchParamsWithRequests(numResults, Integer.MAX_VALUE);
-  }
-  
-  protected FacetSearchParams searchParamsWithRequests(int numResults, int partitionSize) {
+  protected FacetSearchParams searchParamsWithRequests(int numResults, FacetIndexingParams fip) {
     List<FacetRequest> facetRequests = new ArrayList<FacetRequest>();
     facetRequests.add(new CountFacetRequest(new CategoryPath("a"), numResults));
     facetRequests.add(new CountFacetRequest(new CategoryPath("a", "1"), numResults));
     facetRequests.add(new CountFacetRequest(new CategoryPath("a", "1", "10"), numResults));
     facetRequests.add(new CountFacetRequest(new CategoryPath("a", "2",  "26", "267"), numResults));
-    return getFacetSearchParams(facetRequests, getFacetIndexingParams(partitionSize));
+    return getFacetSearchParams(facetRequests, fip);
   }
 
   @Override

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsCollectorTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsCollectorTest.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsCollectorTest.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsCollectorTest.java Thu Jan 31 03:37:31 2013
@@ -16,8 +16,9 @@ import org.apache.lucene.document.String
 import org.apache.lucene.facet.FacetTestCase;
 import org.apache.lucene.facet.index.FacetFields;
 import org.apache.lucene.facet.index.params.CategoryListParams;
+import org.apache.lucene.facet.index.params.CategoryListParams.OrdinalPolicy;
 import org.apache.lucene.facet.index.params.FacetIndexingParams;
-import org.apache.lucene.facet.index.params.PerDimensionIndexingParams;
+import org.apache.lucene.facet.index.params.PerDimensionOrdinalPolicy;
 import org.apache.lucene.facet.search.params.CountFacetRequest;
 import org.apache.lucene.facet.search.params.FacetRequest;
 import org.apache.lucene.facet.search.params.FacetRequest.SortBy;
@@ -146,13 +147,11 @@ public class CountingFacetsCollectorTest
         termExpectedCounts.put(cp, termExpectedCounts.get(cp) + 1);
       }
     }
-    // add 1 to each dimension
-    allExpectedCounts.put(CP_A, allExpectedCounts.get(CP_A) + 1);
+    // add 1 to each NO_PARENTS dimension
     allExpectedCounts.put(CP_B, allExpectedCounts.get(CP_B) + 1);
     allExpectedCounts.put(CP_C, allExpectedCounts.get(CP_C) + 1);
     allExpectedCounts.put(CP_D, allExpectedCounts.get(CP_D) + 1);
     if (updateTermExpectedCounts) {
-      termExpectedCounts.put(CP_A, termExpectedCounts.get(CP_A) + 1);
       termExpectedCounts.put(CP_B, termExpectedCounts.get(CP_B) + 1);
       termExpectedCounts.put(CP_C, termExpectedCounts.get(CP_C) + 1);
       termExpectedCounts.put(CP_D, termExpectedCounts.get(CP_D) + 1);
@@ -252,19 +251,13 @@ public class CountingFacetsCollectorTest
     conf.setMergePolicy(NoMergePolicy.COMPOUND_FILES); // prevent merges, so we can control the index segments
     IndexWriter indexWriter = new IndexWriter(indexDir, conf);
     TaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir);
-    CategoryListParams allParents = new CategoryListParams();
-    CategoryListParams noParents = new CategoryListParams("no_parents") {
-      @Override
-      public OrdinalPolicy getOrdinalPolicy() {
-        return OrdinalPolicy.NO_PARENTS;
-      }
-    };
-    Map<CategoryPath,CategoryListParams> params = new HashMap<CategoryPath,CategoryListParams>();
-    params.put(CP_A, allParents);
-    params.put(CP_B, allParents);
-    params.put(CP_C, noParents);
-    params.put(CP_D, noParents);
-    fip = new PerDimensionIndexingParams(params);
+
+    Map<String,OrdinalPolicy> policies = new HashMap<String,CategoryListParams.OrdinalPolicy>();
+    policies.put(CP_B.components[0], OrdinalPolicy.ALL_PARENTS);
+    policies.put(CP_C.components[0], OrdinalPolicy.NO_PARENTS);
+    policies.put(CP_D.components[0], OrdinalPolicy.NO_PARENTS);
+    CategoryListParams clp = new PerDimensionOrdinalPolicy(policies);
+    fip = new FacetIndexingParams(clp);
     
     allExpectedCounts = newCounts();
     termExpectedCounts = newCounts();

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestDemoFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestDemoFacets.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestDemoFacets.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestDemoFacets.java Thu Jan 31 03:37:31 2013
@@ -104,9 +104,9 @@ public class TestDemoFacets extends Face
     // Retrieve & verify results:
     List<FacetResult> results = c.getFacetResults();
     assertEquals(2, results.size());
-    assertEquals("Publish Date (5)\n  2012 (2)\n  2010 (2)\n  1999 (1)\n",
+    assertEquals("Publish Date (0)\n  2012 (2)\n  2010 (2)\n  1999 (1)\n",
         FacetTestUtils.toSimpleString(results.get(0)));
-    assertEquals("Author (5)\n  Lisa (2)\n  Frank (1)\n  Susan (1)\n  Bob (1)\n",
+    assertEquals("Author (0)\n  Lisa (2)\n  Frank (1)\n  Susan (1)\n  Bob (1)\n",
         FacetTestUtils.toSimpleString(results.get(1)));
 
     
@@ -117,7 +117,7 @@ public class TestDemoFacets extends Face
     searcher.search(q2, c);
     results = c.getFacetResults();
     assertEquals(1, results.size());
-    assertEquals("Author (2)\n  Lisa (1)\n  Bob (1)\n",
+    assertEquals("Author (0)\n  Lisa (1)\n  Bob (1)\n",
         FacetTestUtils.toSimpleString(results.get(0)));
 
     // Smoke test PrintTaxonomyStats:

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestFacetsAccumulatorWithComplement.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestFacetsAccumulatorWithComplement.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestFacetsAccumulatorWithComplement.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestFacetsAccumulatorWithComplement.java Thu Jan 31 03:37:31 2013
@@ -14,6 +14,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.lucene.facet.FacetTestBase;
+import org.apache.lucene.facet.index.params.FacetIndexingParams;
 import org.apache.lucene.facet.search.FacetsAccumulator;
 import org.apache.lucene.facet.search.ScoredDocIDs;
 import org.apache.lucene.facet.search.ScoredDocIdCollector;
@@ -48,11 +49,14 @@ import org.apache.lucene.facet.taxonomy.
  */
 public class TestFacetsAccumulatorWithComplement extends FacetTestBase {
   
+  private FacetIndexingParams fip;
+  
   @Override
   @Before
   public void setUp() throws Exception {
     super.setUp();
-    initIndex();
+    fip = getFacetIndexingParams(Integer.MAX_VALUE);
+    initIndex(fip);
   }
   
   @Override
@@ -125,7 +129,7 @@ public class TestFacetsAccumulatorWithCo
   
   /** compute facets with certain facet requests and docs */
   private List<FacetResult> findFacets(ScoredDocIDs sDocids, boolean withComplement) throws IOException {
-    FacetSearchParams fsp = new FacetSearchParams(getFacetIndexingParams(Integer.MAX_VALUE), new CountFacetRequest(new CategoryPath("root","a"), 10));
+    FacetSearchParams fsp = new FacetSearchParams(fip, new CountFacetRequest(new CategoryPath("root","a"), 10));
     FacetsAccumulator fAccumulator = new StandardFacetsAccumulator(fsp, indexReader, taxoReader);
     
     fAccumulator.setComplementThreshold(

Modified: lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestMultipleCategoryLists.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestMultipleCategoryLists.java?rev=1440839&r1=1440838&r2=1440839&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestMultipleCategoryLists.java (original)
+++ lucene/dev/branches/lucene4547/lucene/facet/src/test/org/apache/lucene/facet/search/TestMultipleCategoryLists.java Thu Jan 31 03:37:31 2013
@@ -14,7 +14,6 @@ import org.apache.lucene.document.Docume
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.TextField;
 import org.apache.lucene.facet.FacetTestCase;
-import org.apache.lucene.facet.FacetTestUtils;
 import org.apache.lucene.facet.index.FacetFields;
 import org.apache.lucene.facet.index.params.CategoryListParams;
 import org.apache.lucene.facet.index.params.FacetIndexingParams;
@@ -77,12 +76,14 @@ public class TestMultipleCategoryLists e
   
   @Test
   public void testDefault() throws Exception {
-    Directory[][] dirs = getDirs();
+    Directory indexDir = newDirectory();
+    Directory taxoDir = newDirectory();
+    
     // create and open an index writer
-    RandomIndexWriter iw = new RandomIndexWriter(random(), dirs[0][0], newIndexWriterConfig(
+    RandomIndexWriter iw = new RandomIndexWriter(random(), indexDir, newIndexWriterConfig(
         TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false)));
     // create and open a taxonomy writer
-    TaxonomyWriter tw = new DirectoryTaxonomyWriter(dirs[0][1], OpenMode.CREATE);
+    TaxonomyWriter tw = new DirectoryTaxonomyWriter(taxoDir, OpenMode.CREATE);
 
     PerDimensionIndexingParams iParams = new PerDimensionIndexingParams(Collections.<CategoryPath, CategoryListParams>emptyMap());
 
@@ -92,7 +93,7 @@ public class TestMultipleCategoryLists e
     tw.commit();
 
     // prepare index reader and taxonomy.
-    TaxonomyReader tr = new DirectoryTaxonomyReader(dirs[0][1]);
+    TaxonomyReader tr = new DirectoryTaxonomyReader(taxoDir);
 
     // prepare searcher to search against
     IndexSearcher searcher = newSearcher(ir);
@@ -105,17 +106,19 @@ public class TestMultipleCategoryLists e
     assertOrdinalsExist("$facets", ir);
 
     IOUtils.close(tr, ir, iw, tw);
-    IOUtils.close(dirs[0]);
+    IOUtils.close(indexDir, taxoDir);
   }
 
   @Test
   public void testCustom() throws Exception {
-    Directory[][] dirs = getDirs();
+    Directory indexDir = newDirectory();
+    Directory taxoDir = newDirectory();
+    
     // create and open an index writer
-    RandomIndexWriter iw = new RandomIndexWriter(random(), dirs[0][0], newIndexWriterConfig(
+    RandomIndexWriter iw = new RandomIndexWriter(random(), indexDir, newIndexWriterConfig(
         TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false)));
     // create and open a taxonomy writer
-    TaxonomyWriter tw = new DirectoryTaxonomyWriter(dirs[0][1], OpenMode.CREATE);
+    TaxonomyWriter tw = new DirectoryTaxonomyWriter(taxoDir, OpenMode.CREATE);
 
     PerDimensionIndexingParams iParams = new PerDimensionIndexingParams(
         Collections.singletonMap(new CategoryPath("Author"), new CategoryListParams("$author")));
@@ -125,7 +128,7 @@ public class TestMultipleCategoryLists e
     tw.commit();
 
     // prepare index reader and taxonomy.
-    TaxonomyReader tr = new DirectoryTaxonomyReader(dirs[0][1]);
+    TaxonomyReader tr = new DirectoryTaxonomyReader(taxoDir);
 
     // prepare searcher to search against
     IndexSearcher searcher = newSearcher(ir);
@@ -139,17 +142,19 @@ public class TestMultipleCategoryLists e
     assertOrdinalsExist("$author", ir);
 
     IOUtils.close(tr, ir, iw, tw);
-    IOUtils.close(dirs[0]);
+    IOUtils.close(indexDir, taxoDir);
   }
 
   @Test
   public void testTwoCustomsSameField() throws Exception {
-    Directory[][] dirs = getDirs();
+    Directory indexDir = newDirectory();
+    Directory taxoDir = newDirectory();
+    
     // create and open an index writer
-    RandomIndexWriter iw = new RandomIndexWriter(random(), dirs[0][0], newIndexWriterConfig(
+    RandomIndexWriter iw = new RandomIndexWriter(random(), indexDir, newIndexWriterConfig(
         TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false)));
     // create and open a taxonomy writer
-    TaxonomyWriter tw = new DirectoryTaxonomyWriter(dirs[0][1], OpenMode.CREATE);
+    TaxonomyWriter tw = new DirectoryTaxonomyWriter(taxoDir, OpenMode.CREATE);
 
     Map<CategoryPath,CategoryListParams> paramsMap = new HashMap<CategoryPath,CategoryListParams>();
     paramsMap.put(new CategoryPath("Band"), new CategoryListParams("$music"));
@@ -161,7 +166,7 @@ public class TestMultipleCategoryLists e
     tw.commit();
 
     // prepare index reader and taxonomy.
-    TaxonomyReader tr = new DirectoryTaxonomyReader(dirs[0][1]);
+    TaxonomyReader tr = new DirectoryTaxonomyReader(taxoDir);
 
     // prepare searcher to search against
     IndexSearcher searcher = newSearcher(ir);
@@ -176,7 +181,7 @@ public class TestMultipleCategoryLists e
     assertOrdinalsExist("$music", ir);
 
     IOUtils.close(tr, ir, iw, tw);
-    IOUtils.close(dirs[0]);
+    IOUtils.close(indexDir, taxoDir);
   }
 
   private void assertOrdinalsExist(String field, IndexReader ir) throws IOException {
@@ -191,12 +196,14 @@ public class TestMultipleCategoryLists e
 
   @Test
   public void testDifferentFieldsAndText() throws Exception {
-    Directory[][] dirs = getDirs();
+    Directory indexDir = newDirectory();
+    Directory taxoDir = newDirectory();
+
     // create and open an index writer
-    RandomIndexWriter iw = new RandomIndexWriter(random(), dirs[0][0], newIndexWriterConfig(
+    RandomIndexWriter iw = new RandomIndexWriter(random(), indexDir, newIndexWriterConfig(
         TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false)));
     // create and open a taxonomy writer
-    TaxonomyWriter tw = new DirectoryTaxonomyWriter(dirs[0][1], OpenMode.CREATE);
+    TaxonomyWriter tw = new DirectoryTaxonomyWriter(taxoDir, OpenMode.CREATE);
 
     Map<CategoryPath,CategoryListParams> paramsMap = new HashMap<CategoryPath,CategoryListParams>();
     paramsMap.put(new CategoryPath("Band"), new CategoryListParams("$bands"));
@@ -208,7 +215,7 @@ public class TestMultipleCategoryLists e
     tw.commit();
 
     // prepare index reader and taxonomy.
-    TaxonomyReader tr = new DirectoryTaxonomyReader(dirs[0][1]);
+    TaxonomyReader tr = new DirectoryTaxonomyReader(taxoDir);
 
     // prepare searcher to search against
     IndexSearcher searcher = newSearcher(ir);
@@ -222,17 +229,19 @@ public class TestMultipleCategoryLists e
     assertOrdinalsExist("$composers", ir);
 
     IOUtils.close(tr, ir, iw, tw);
-    IOUtils.close(dirs[0]);
+    IOUtils.close(indexDir, taxoDir);
   }
 
   @Test
   public void testSomeSameSomeDifferent() throws Exception {
-    Directory[][] dirs = getDirs();
+    Directory indexDir = newDirectory();
+    Directory taxoDir = newDirectory();
+    
     // create and open an index writer
-    RandomIndexWriter iw = new RandomIndexWriter(random(), dirs[0][0], newIndexWriterConfig(
+    RandomIndexWriter iw = new RandomIndexWriter(random(), indexDir, newIndexWriterConfig(
         TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false)));
     // create and open a taxonomy writer
-    TaxonomyWriter tw = new DirectoryTaxonomyWriter(dirs[0][1], OpenMode.CREATE);
+    TaxonomyWriter tw = new DirectoryTaxonomyWriter(taxoDir, OpenMode.CREATE);
 
     Map<CategoryPath,CategoryListParams> paramsMap = new HashMap<CategoryPath,CategoryListParams>();
     paramsMap.put(new CategoryPath("Band"), new CategoryListParams("$music"));
@@ -246,7 +255,7 @@ public class TestMultipleCategoryLists e
     tw.commit();
 
     // prepare index reader and taxonomy.
-    TaxonomyReader tr = new DirectoryTaxonomyReader(dirs[0][1]);
+    TaxonomyReader tr = new DirectoryTaxonomyReader(taxoDir);
 
     // prepare searcher to search against
     IndexSearcher searcher = newSearcher(ir);
@@ -259,11 +268,7 @@ public class TestMultipleCategoryLists e
     assertOrdinalsExist("$literature", ir);
 
     IOUtils.close(tr, ir, iw, tw);
-    IOUtils.close(dirs[0]);
-  }
-
-  private Directory[][] getDirs() {
-    return FacetTestUtils.createIndexTaxonomyDirs(1);
+    IOUtils.close(indexDir, taxoDir);
   }
 
   private void assertCorrectResults(FacetsCollector facetsCollector) throws IOException {
@@ -274,7 +279,6 @@ public class TestMultipleCategoryLists e
     Iterable<? extends FacetResultNode> subResults = resNode.subResults;
     Iterator<? extends FacetResultNode> subIter = subResults.iterator();
 
-    checkResult(resNode, "Band", 5.0);
     checkResult(subIter.next(), "Band/Rock & Pop", 4.0);
     checkResult(subIter.next(), "Band/Punk", 1.0);
 
@@ -283,7 +287,6 @@ public class TestMultipleCategoryLists e
     subResults = resNode.subResults;
     subIter = subResults.iterator();
 
-    checkResult(resNode, "Band", 5.0);
     checkResult(subIter.next(), "Band/Rock & Pop", 4.0);
     checkResult(subIter.next(), "Band/Rock & Pop/Dave Matthews Band", 1.0);
     checkResult(subIter.next(), "Band/Rock & Pop/REM", 1.0);
@@ -297,7 +300,6 @@ public class TestMultipleCategoryLists e
     subResults = resNode.subResults;
     subIter = subResults.iterator();
 
-    checkResult(resNode, "Author", 3.0);
     checkResult(subIter.next(), "Author/Kurt Vonnegut", 1.0);
     checkResult(subIter.next(), "Author/Stephen King", 1.0);
     checkResult(subIter.next(), "Author/Mark Twain", 1.0);
@@ -307,7 +309,6 @@ public class TestMultipleCategoryLists e
     subResults = resNode.subResults;
     subIter = subResults.iterator();
 
-    checkResult(resNode, "Band/Rock & Pop", 4.0);
     checkResult(subIter.next(), "Band/Rock & Pop/Dave Matthews Band", 1.0);
     checkResult(subIter.next(), "Band/Rock & Pop/REM", 1.0);
     checkResult(subIter.next(), "Band/Rock & Pop/U2", 1.0);