You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2021/03/10 10:03:18 UTC

[lucene] 07/10: Revert "SOLR-13350: Merging master and updating the PR"

This is an automated email from the ASF dual-hosted git repository.

dweiss pushed a commit to branch jira/solr-13350-new
in repository https://gitbox.apache.org/repos/asf/lucene.git

commit 590d35c66e22cb356c331af41356f63de1cc20a4
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Fri Aug 14 18:04:31 2020 +0530

    Revert "SOLR-13350: Merging master and updating the PR"
    
    This reverts commit afd6f5a139cd8b5b16212dc9cc564656e64f09a3.
---
 solr/CHANGES.txt                                   |   583 +-
 solr/NOTICE.txt                                    |    15 +-
 solr/README.md                                     |   217 -
 solr/README.txt                                    |   189 +
 solr/bin/solr                                      |    47 +-
 solr/bin/solr.cmd                                  |    46 +-
 solr/bin/solr.in.cmd                               |    29 +-
 solr/bin/solr.in.sh                                |    18 +-
 solr/build.gradle                                  |     2 -
 solr/build.xml                                     |    12 +-
 solr/contrib/analysis-extras/README.md             |    26 -
 solr/contrib/analysis-extras/README.txt            |    23 +
 solr/contrib/analysis-extras/build.gradle          |     2 -
 ...ExtractNamedEntitiesUpdateProcessorFactory.java |    13 +-
 solr/contrib/analytics/build.gradle                |     2 -
 .../apache/solr/analytics/ExpressionFactory.java   |    78 +-
 .../apache/solr/analytics/facet/PivotFacet.java    |    77 +-
 .../apache/solr/analytics/facet/QueryFacet.java    |     8 +-
 .../apache/solr/analytics/facet/RangeFacet.java    |     8 +-
 .../function/mapping/ComparisonFunction.java       |   320 +-
 .../function/mapping/DateMathFunction.java         |   171 +-
 .../function/mapping/DateParseFunction.java        |   261 +-
 .../mapping/DecimalNumericConversionFunction.java  |   283 +-
 .../analytics/function/mapping/EqualFunction.java  |   301 +-
 .../analytics/function/mapping/ExistsFunction.java |   143 +-
 .../function/mapping/FillMissingFunction.java      |  1283 +-
 .../analytics/function/mapping/FilterFunction.java |  1075 +-
 .../analytics/function/mapping/IfFunction.java     |  1268 +-
 .../analytics/function/mapping/LambdaFunction.java |  4034 +++---
 .../analytics/function/mapping/RemoveFunction.java |  1187 +-
 .../function/mapping/ReplaceFunction.java          |  1521 ++-
 .../analytics/function/reduction/MaxFunction.java  |   405 +-
 .../function/reduction/MedianFunction.java         |   237 +-
 .../analytics/function/reduction/MinFunction.java  |   405 +-
 .../function/reduction/OrdinalFunction.java        |   489 +-
 .../function/reduction/PercentileFunction.java     |   453 +-
 .../stream/AnalyticsShardRequestManager.java       |     4 +-
 .../solr/analytics/util/FacetRangeGenerator.java   |   132 +-
 .../solr/analytics/util/MedianCalculator.java      |     6 +-
 .../solr/analytics/util/OldAnalyticsParams.java    |    34 +-
 .../util/OldAnalyticsRequestConverter.java         |     4 +-
 .../solr/analytics/util/OrdinalCalculator.java     |    15 +-
 .../org/apache/solr/handler/AnalyticsHandler.java  |     6 +
 .../solr/handler/component/AnalyticsComponent.java |     2 +-
 .../response/AnalyticsShardResponseWriter.java     |     2 +-
 .../analytics/legacy/facetWithDottedFields.txt     |    16 -
 .../solr/collection1/conf/schema-analytics.xml     |     2 -
 .../analytics/legacy/LegacyNoFacetCloudTest.java   |    32 +-
 .../solr/analytics/legacy/LegacyNoFacetTest.java   |    32 +-
 .../LegacyAbstractAnalyticsFacetCloudTest.java     |     2 +-
 .../facet/LegacyAbstractAnalyticsFacetTest.java    |     4 +-
 .../legacy/facet/LegacyFieldFacetTest.java         |     1 -
 .../util/OldAnalyticsRequestConverterUnitTest.java |    64 -
 solr/contrib/clustering/{README.md => README.txt}  |     0
 solr/contrib/clustering/build.gradle               |     2 -
 .../handler/clustering/ClusteringComponent.java    |    20 +-
 .../clustering/carrot2/CarrotClusteringEngine.java |    20 +-
 .../carrot2/LuceneCarrot2StemmerFactory.java       |    10 +-
 .../clustering/carrot2/SolrResourceLocator.java    |     8 +-
 solr/contrib/dataimporthandler-extras/build.gradle |     2 -
 .../handler/dataimport/MailEntityProcessor.java    |   101 +-
 .../handler/dataimport/TikaEntityProcessor.java    |    19 +-
 .../src/java/overview.html                         |     2 +-
 .../collection1/conf/dataimport-solrconfig.xml     |     2 +-
 .../dataimport/TestMailEntityProcessor.java        |    13 +-
 solr/contrib/dataimporthandler/README.md           |    26 -
 solr/contrib/dataimporthandler/README.txt          |    16 +
 solr/contrib/dataimporthandler/build.gradle        |     2 -
 .../solr/handler/dataimport/BinURLDataSource.java  |     6 +-
 .../solr/handler/dataimport/ClobTransformer.java   |     1 -
 .../apache/solr/handler/dataimport/Context.java    |     2 -
 .../solr/handler/dataimport/ContextImpl.java       |     7 +-
 .../solr/handler/dataimport/DataImportHandler.java |    13 +-
 .../solr/handler/dataimport/DataImporter.java      |    10 +-
 .../apache/solr/handler/dataimport/DataSource.java |     3 +-
 .../handler/dataimport/DateFormatTransformer.java  |     1 -
 .../solr/handler/dataimport/DebugLogger.java       |    12 +-
 .../apache/solr/handler/dataimport/DocBuilder.java |    76 +-
 .../solr/handler/dataimport/EntityProcessor.java   |     3 +-
 .../handler/dataimport/EntityProcessorWrapper.java |    26 +-
 .../solr/handler/dataimport/FileDataSource.java    |    12 +-
 .../handler/dataimport/HTMLStripTransformer.java   |     1 -
 .../solr/handler/dataimport/JdbcDataSource.java    |    20 +-
 .../dataimport/NumberFormatTransformer.java        |     1 -
 .../dataimport/PlainTextEntityProcessor.java       |     1 -
 .../solr/handler/dataimport/RegexTransformer.java  |     6 +-
 .../handler/dataimport/SimplePropertiesWriter.java |    10 +-
 .../apache/solr/handler/dataimport/SolrWriter.java |    10 +-
 .../handler/dataimport/SqlEntityProcessor.java     |    10 +-
 .../handler/dataimport/TemplateTransformer.java    |     5 +-
 .../solr/handler/dataimport/URLDataSource.java     |     6 +-
 .../handler/dataimport/XPathEntityProcessor.java   |    21 +-
 .../solr/handler/dataimport/XPathRecordReader.java |     3 +-
 .../handler/dataimport/ZKPropertiesWriter.java     |     4 +-
 .../dataimport/config/DIHConfiguration.java        |     8 +-
 .../dataimporthandler/src/java/overview.html       |     2 +-
 .../collection1/conf/contentstream-solrconfig.xml  |     2 +-
 .../conf/dataimport-nodatasource-solrconfig.xml    |     2 +-
 .../collection1/conf/dataimport-solrconfig.xml     |     2 +-
 .../dataimporthandler/src/test-files/log4j2.xml    |    42 -
 .../src/test-files/solr/collection1/README         |     1 -
 .../solr/configsets/dihconfigset/conf/README       |     2 -
 .../solr/configsets/dihconfigset/conf/schema.xml   |    70 -
 .../configsets/dihconfigset/conf/solrconfig.xml    |   287 -
 .../dataimporthandler/src/test-files/solr/solr.xml |    27 -
 .../dataimport/AbstractDIHCacheTestCase.java       |     2 +-
 .../AbstractDataImportHandlerTestCase.java         |     9 +-
 .../AbstractSqlEntityProcessorTestCase.java        |    23 +-
 .../dataimport/MockInitialContextFactory.java      |     2 +-
 .../handler/dataimport/TestClobTransformer.java    |     2 -
 .../dataimport/TestContentStreamDataSource.java    |     2 +-
 .../solr/handler/dataimport/TestDataConfig.java    |     1 -
 .../solr/handler/dataimport/TestDocBuilder.java    |    10 +-
 .../solr/handler/dataimport/TestDocBuilder2.java   |    16 +-
 .../handler/dataimport/TestEphemeralCache.java     |     3 -
 .../solr/handler/dataimport/TestErrorHandling.java |     1 -
 .../solr/handler/dataimport/TestFieldReader.java   |     1 -
 .../dataimport/TestFileListEntityProcessor.java    |    14 +-
 .../dataimport/TestJdbcDataSourceConvertType.java  |     2 +-
 .../dataimport/TestLineEntityProcessor.java        |    14 +-
 .../dataimport/TestPlainTextEntityProcessor.java   |     3 -
 .../handler/dataimport/TestRegexTransformer.java   |     5 -
 .../handler/dataimport/TestScriptTransformer.java  |     4 +-
 .../TestSolrEntityProcessorEndToEnd.java           |    16 +-
 .../dataimport/TestSolrEntityProcessorUnit.java    |     3 +-
 .../dataimport/TestSortedMapBackedCache.java       |     6 +-
 .../dataimport/TestSqlEntityProcessorDelta.java    |    12 +-
 .../dataimport/TestTemplateTransformer.java        |     4 -
 .../handler/dataimport/TestVariableResolver.java   |     1 -
 .../solr/handler/dataimport/TestWriterImpl.java    |     2 -
 .../dataimport/TestXPathEntityProcessor.java       |    15 -
 .../handler/dataimport/TestXPathRecordReader.java  |     1 -
 .../handler/dataimport/TestZKPropertiesWriter.java |   207 +-
 solr/contrib/extraction/README.md                  |    17 -
 solr/contrib/extraction/README.txt                 |    16 +
 solr/contrib/extraction/build.gradle               |     2 -
 .../extraction/ExtractingDocumentLoader.java       |     8 +-
 .../extraction/ExtractingRequestHandler.java       |    49 +-
 .../extraction/RegexRulesPasswordProvider.java     |     4 +-
 .../handler/extraction/XLSXResponseWriter.java     |     4 +-
 .../extraction/ExtractingRequestHandlerTest.java   |     3 -
 solr/contrib/jaegertracer-configurator/README.md   |    33 -
 solr/contrib/jaegertracer-configurator/README.txt  |    32 +
 .../contrib/jaegertracer-configurator/build.gradle |     2 -
 .../solr/jaeger/JaegerTracerConfigurator.java      |     2 +-
 .../apache/solr/jaeger/TestJaegerConfigurator.java |     4 -
 solr/contrib/langid/README.md                      |    22 -
 solr/contrib/langid/README.txt                     |    22 +
 solr/contrib/langid/build.gradle                   |     2 -
 .../LanguageIdentifierUpdateProcessor.java         |    48 +-
 .../OpenNLPLangDetectUpdateProcessorFactory.java   |     2 +-
 .../TikaLanguageIdentifierUpdateProcessor.java     |     5 +-
 solr/contrib/ltr/README.md                         |     2 +-
 solr/contrib/ltr/README.txt                        |     1 +
 solr/contrib/ltr/build.gradle                      |     2 -
 .../java/org/apache/solr/ltr/LTRThreadModule.java  |     7 +-
 .../java/org/apache/solr/ltr/feature/Feature.java  |    42 -
 .../solr/ltr/feature/OriginalScoreFeature.java     |    23 +-
 .../org/apache/solr/ltr/feature/SolrFeature.java   |   199 +-
 .../org/apache/solr/ltr/model/LTRScoringModel.java |     1 -
 .../org/apache/solr/ltr/model/LinearModel.java     |     1 -
 .../solr/ltr/model/MultipleAdditiveTreesModel.java |     4 -
 .../apache/solr/ltr/model/NeuralNetworkModel.java  |     4 -
 .../LTRFeatureLoggerTransformerFactory.java        |     1 -
 .../apache/solr/ltr/search/LTRQParserPlugin.java   |     1 -
 .../solr/ltr/store/rest/ManagedModelStore.java     |     5 +-
 .../org/apache/solr/ltr/TestLTROnSolrCloud.java    |    12 +-
 .../apache/solr/ltr/TestLTRReRankingPipeline.java  |     6 +-
 .../test/org/apache/solr/ltr/TestRerankBase.java   |    35 +-
 .../org/apache/solr/ltr/feature/TestFeature.java   |    48 -
 .../TestFeatureExtractionFromMultipleSegments.java |     2 -
 .../solr/ltr/feature/TestNoMatchSolrFeature.java   |     4 -
 .../solr/ltr/feature/TestOriginalScoreFeature.java |     6 -
 .../solr/ltr/feature/TestOriginalScoreScorer.java  |    47 +
 .../solr/ltr/model/TestNeuralNetworkModel.java     |     1 -
 .../store/rest/TestModelManagerPersistence.java    |     4 -
 solr/contrib/prometheus-exporter/README.md         |    21 -
 solr/contrib/prometheus-exporter/README.txt        |    21 +
 solr/contrib/prometheus-exporter/build.gradle      |     2 -
 .../conf/solr-exporter-config.xml                  |     8 +-
 .../collector/SchedulerMetricsCollector.java       |     7 +-
 .../solr/prometheus/exporter/MetricsQuery.java     |     1 -
 .../exporter/PrometheusExporterSettings.java       |     4 +-
 .../solr/prometheus/exporter/SolrExporter.java     |    10 +-
 .../org/apache/solr/prometheus/scraper/Async.java  |     1 -
 .../solr/prometheus/scraper/SolrScraper.java       |     4 +-
 ...theus-solr-exporter-integration-test-config.xml |     8 +-
 .../prometheus/PrometheusExporterTestBase.java     |     4 +-
 .../prometheus/scraper/SolrCloudScraperTest.java   |     4 +-
 .../scraper/SolrStandaloneScraperTest.java         |     4 +-
 solr/contrib/velocity/build.gradle                 |     2 -
 .../solr/response/VelocityResponseWriter.java      |    14 +-
 solr/core/build.gradle                             |     7 +-
 solr/core/ivy.xml                                  |     2 +-
 .../solr/analysis/LowerCaseTokenizerFactory.java   |     5 -
 .../analysis/ReversedWildcardFilterFactory.java    |     4 -
 .../src/java/org/apache/solr/api/AnnotatedApi.java |   252 +-
 solr/core/src/java/org/apache/solr/api/ApiBag.java |    36 +-
 .../apache/solr/api/CustomContainerPlugins.java    |   354 -
 .../src/java/org/apache/solr/api/EndPoint.java     |     2 +-
 .../src/java/org/apache/solr/api/PayloadObj.java   |    35 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |    43 +-
 .../client/solrj/embedded/EmbeddedSolrServer.java  |    17 +-
 .../client/solrj/embedded/JettySolrRunner.java     |    15 +-
 .../apache/solr/cloud/ActiveReplicaWatcher.java    |    19 +-
 .../apache/solr/cloud/CloudConfigSetService.java   |     7 +-
 .../src/java/org/apache/solr/cloud/CloudUtil.java  |    16 +-
 .../solr/cloud/CurrentCoreDescriptorProvider.java  |    28 +
 .../org/apache/solr/cloud/ElectionContext.java     |   707 +
 .../apache/solr/cloud/ExclusiveSliceProperty.java  |    10 +-
 .../java/org/apache/solr/cloud/LeaderElector.java  |     2 +-
 .../src/java/org/apache/solr/cloud/LockTree.java   |    56 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |   121 +-
 .../cloud/OverseerConfigSetMessageHandler.java     |    20 +-
 .../apache/solr/cloud/OverseerElectionContext.java |   110 -
 .../apache/solr/cloud/OverseerMessageHandler.java  |     7 +-
 .../apache/solr/cloud/OverseerNodePrioritizer.java |    15 +-
 .../apache/solr/cloud/OverseerSolrResponse.java    |     4 +-
 .../apache/solr/cloud/OverseerTaskProcessor.java   |   230 +-
 .../org/apache/solr/cloud/OverseerTaskQueue.java   |    13 +-
 .../solr/cloud/RecoveringCoreTermWatcher.java      |     4 +-
 .../org/apache/solr/cloud/RecoveryStrategy.java    |   109 +-
 .../org/apache/solr/cloud/ReplicateFromLeader.java |    10 +-
 .../solr/cloud/ShardLeaderElectionContext.java     |   493 -
 .../solr/cloud/ShardLeaderElectionContextBase.java |   195 -
 .../java/org/apache/solr/cloud/SolrZkServer.java   |    80 +-
 .../java/org/apache/solr/cloud/SyncStrategy.java   |    64 +-
 .../core/src/java/org/apache/solr/cloud/ZkCLI.java |    21 +-
 .../java/org/apache/solr/cloud/ZkController.java   |   427 +-
 .../org/apache/solr/cloud/ZkDistributedQueue.java  |    17 +-
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |     1 -
 .../apache/solr/cloud/ZkSolrResourceLoader.java    |    34 +-
 .../solr/cloud/api/collections/AddReplicaCmd.java  |    81 +-
 .../solr/cloud/api/collections/AliasCmd.java       |     1 -
 .../apache/solr/cloud/api/collections/Assign.java  |   236 +-
 .../solr/cloud/api/collections/BackupCmd.java      |    15 +-
 .../cloud/api/collections/CategoryRoutedAlias.java |     4 +-
 .../solr/cloud/api/collections/CreateAliasCmd.java |     2 +-
 .../cloud/api/collections/CreateCollectionCmd.java |   153 +-
 .../solr/cloud/api/collections/CreateShardCmd.java |     3 +-
 .../cloud/api/collections/CreateSnapshotCmd.java   |    28 +-
 .../solr/cloud/api/collections/DeleteAliasCmd.java |     2 +-
 .../cloud/api/collections/DeleteCollectionCmd.java |     3 +-
 .../solr/cloud/api/collections/DeleteNodeCmd.java  |     7 +-
 .../cloud/api/collections/DeleteReplicaCmd.java    |    16 +-
 .../solr/cloud/api/collections/DeleteShardCmd.java |    15 +-
 .../cloud/api/collections/DeleteSnapshotCmd.java   |    14 +-
 .../api/collections/MaintainRoutedAliasCmd.java    |    14 +-
 .../solr/cloud/api/collections/MigrateCmd.java     |    51 +-
 .../solr/cloud/api/collections/MoveReplicaCmd.java |    32 +-
 .../OverseerCollectionMessageHandler.java          |   125 +-
 .../cloud/api/collections/OverseerRoleCmd.java     |     6 +-
 .../cloud/api/collections/OverseerStatusCmd.java   |     7 +-
 .../api/collections/ReindexCollectionCmd.java      |    68 +-
 .../solr/cloud/api/collections/RenameCmd.java      |     2 +-
 .../solr/cloud/api/collections/ReplaceNodeCmd.java |    32 +-
 .../solr/cloud/api/collections/RestoreCmd.java     |   373 +-
 .../solr/cloud/api/collections/RoutedAlias.java    |    11 +-
 .../cloud/api/collections/SetAliasPropCmd.java     |     2 +-
 .../solr/cloud/api/collections/SplitShardCmd.java  |   118 +-
 .../cloud/api/collections/TimeRoutedAlias.java     |    12 +-
 .../solr/cloud/api/collections/UtilizeNodeCmd.java |   133 +
 .../solr/cloud/autoscaling/ActionContext.java      |    68 +
 .../autoscaling/AutoAddReplicasPlanAction.java     |    63 +
 .../apache/solr/cloud/autoscaling/AutoScaling.java |   244 +
 .../solr/cloud/autoscaling/AutoScalingHandler.java |   732 +
 .../solr/cloud/autoscaling/ComputePlanAction.java  |   305 +
 .../solr/cloud/autoscaling/ExecutePlanAction.java  |   244 +
 .../cloud/autoscaling/HttpTriggerListener.java     |   164 +
 .../autoscaling/InactiveMarkersPlanAction.java     |   139 +
 .../cloud/autoscaling/InactiveShardPlanAction.java |   152 +
 .../solr/cloud/autoscaling/IndexSizeTrigger.java   |   557 +
 .../solr/cloud/autoscaling/LoggingListener.java    |    38 +
 .../solr/cloud/autoscaling/MetricTrigger.java      |   219 +
 .../solr/cloud/autoscaling/NodeAddedTrigger.java   |   244 +
 .../solr/cloud/autoscaling/NodeLostTrigger.java    |   236 +
 .../cloud/autoscaling/OverseerTriggerThread.java   |   397 +
 .../solr/cloud/autoscaling/ScheduledTrigger.java   |   227 +
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |   906 ++
 .../solr/cloud/autoscaling/SearchRateTrigger.java  |   797 ++
 .../solr/cloud/autoscaling/SystemLogListener.java  |   219 +
 .../solr/cloud/autoscaling/TriggerAction.java      |    51 +
 .../solr/cloud/autoscaling/TriggerActionBase.java  |    87 +
 .../cloud/autoscaling/TriggerActionException.java  |    33 +
 .../apache/solr/cloud/autoscaling/TriggerBase.java |   283 +
 .../solr/cloud/autoscaling/TriggerEvent.java       |   311 +
 .../solr/cloud/autoscaling/TriggerEventQueue.java  |   119 +
 .../solr/cloud/autoscaling/TriggerListener.java    |    65 +
 .../cloud/autoscaling/TriggerListenerBase.java     |    97 +
 .../solr/cloud/autoscaling/TriggerUtils.java       |    87 +
 .../autoscaling/TriggerValidationException.java    |    74 +
 .../solr/cloud/autoscaling/package-info.java       |    21 +
 .../solr/cloud/autoscaling/sim/ActionError.java    |    24 +
 .../cloud/autoscaling/sim/FakeDocIterator.java     |    56 +
 .../autoscaling/sim/GenericDistributedQueue.java   |   599 +
 .../sim/GenericDistributedQueueFactory.java        |    45 +
 .../solr/cloud/autoscaling/sim/LiveNodesSet.java   |   113 +
 .../sim/NoopDistributedQueueFactory.java           |    94 +
 .../cloud/autoscaling/sim/SimCloudManager.java     |  1051 ++
 .../autoscaling/sim/SimClusterStateProvider.java   |  2469 ++++
 .../autoscaling/sim/SimDistribStateManager.java    |   646 +
 .../sim/SimDistributedQueueFactory.java            |   284 +
 .../autoscaling/sim/SimNodeStateProvider.java      |   347 +
 .../solr/cloud/autoscaling/sim/SimScenario.java    |  1108 ++
 .../solr/cloud/autoscaling/sim/SimUtils.java       |   435 +
 .../autoscaling/sim/SnapshotCloudManager.java      |   257 +
 .../sim/SnapshotClusterStateProvider.java          |   130 +
 .../sim/SnapshotDistribStateManager.java           |   222 +
 .../autoscaling/sim/SnapshotNodeStateProvider.java |   200 +
 .../solr/cloud/autoscaling/sim/package-info.java   |    94 +
 .../solr/cloud/overseer/ClusterStateMutator.java   |    21 +-
 .../solr/cloud/overseer/CollectionMutator.java     |     9 +-
 .../apache/solr/cloud/overseer/NodeMutator.java    |     8 +-
 .../apache/solr/cloud/overseer/ReplicaMutator.java |    88 +-
 .../apache/solr/cloud/overseer/SliceMutator.java   |    14 +-
 .../apache/solr/cloud/overseer/ZkStateWriter.java  |    47 +-
 .../apache/solr/cloud/rule/ReplicaAssigner.java    |    15 +-
 .../src/java/org/apache/solr/cloud/rule/Rule.java  |    13 +-
 .../solr/cloud/rule/ServerSnitchContext.java       |     1 -
 .../solr/core/AbstractSolrEventListener.java       |     5 +-
 .../java/org/apache/solr/core/BlobRepository.java  |    17 +-
 .../apache/solr/core/CachingDirectoryFactory.java  |    36 +-
 .../src/java/org/apache/solr/core/CloudConfig.java |    25 +-
 .../java/org/apache/solr/core/CodecFactory.java    |     2 +-
 .../java/org/apache/solr/core/ConfigOverlay.java   |    14 -
 .../src/java/org/apache/solr/core/ConfigSet.java   |    29 +-
 .../org/apache/solr/core/ConfigSetProperties.java  |     6 +-
 .../org/apache/solr/core/ConfigSetService.java     |    17 +-
 .../java/org/apache/solr/core/CoreContainer.java   |   402 +-
 .../java/org/apache/solr/core/CoreDescriptor.java  |    10 +-
 .../apache/solr/core/CorePropertiesLocator.java    |    24 +-
 .../src/java/org/apache/solr/core/CoreSorter.java  |    77 +-
 .../src/java/org/apache/solr/core/Diagnostics.java |     2 +-
 .../org/apache/solr/core/DirectoryFactory.java     |    21 +-
 .../org/apache/solr/core/HdfsDirectoryFactory.java |    29 +-
 .../solr/core/IndexDeletionPolicyWrapper.java      |     4 +-
 .../org/apache/solr/core/IndexReaderFactory.java   |     2 +-
 .../src/java/org/apache/solr/core/InitParams.java  |    12 +-
 .../org/apache/solr/core/MMapDirectoryFactory.java |     1 -
 .../java/org/apache/solr/core/MemClassLoader.java  |   200 +
 .../solr/core/NRTCachingDirectoryFactory.java      |     1 -
 .../src/java/org/apache/solr/core/NodeConfig.java  |    86 +-
 .../src/java/org/apache/solr/core/PluginBag.java   |   261 +-
 .../src/java/org/apache/solr/core/PluginInfo.java  |    58 +-
 .../org/apache/solr/core/QuerySenderListener.java  |    54 +-
 .../java/org/apache/solr/core/RequestHandlers.java |     6 +-
 .../java/org/apache/solr/core/RequestParams.java   |    65 +-
 .../org/apache/solr/core/SchemaCodecFactory.java   |     9 +-
 .../apache/solr/core/SimpleFSDirectoryFactory.java |    42 +
 .../apache/solr/core/SimpleTextCodecFactory.java   |     1 -
 .../java/org/apache/solr/core/SolrClassLoader.java |    29 -
 .../src/java/org/apache/solr/core/SolrConfig.java  |   145 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   236 +-
 .../src/java/org/apache/solr/core/SolrCores.java   |    33 +-
 .../org/apache/solr/core/SolrDeletionPolicy.java   |    14 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |   138 -
 .../org/apache/solr/core/SolrResourceLoader.java   |   416 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |    73 +-
 .../apache/solr/core/StandardDirectoryFactory.java |     2 +-
 .../apache/solr/core/TransientSolrCoreCache.java   |    10 +
 .../solr/core/TransientSolrCoreCacheDefault.java   |    29 +-
 .../solr/core/TransientSolrCoreCacheFactory.java   |     6 +-
 .../java/org/apache/solr/core/XmlConfigFile.java   |    56 +-
 .../src/java/org/apache/solr/core/ZkContainer.java |   105 +-
 .../org/apache/solr/core/backup/BackupManager.java |     2 +-
 .../backup/repository/HdfsBackupRepository.java    |    14 +-
 .../repository/LocalFileSystemRepository.java      |    13 +-
 .../solr/core/snapshots/SolrSnapshotManager.java   |    12 +-
 .../snapshots/SolrSnapshotMetaDataManager.java     |    10 +-
 .../solr/core/snapshots/SolrSnapshotsTool.java     |    16 +-
 .../apache/solr/filestore/DistribPackageStore.java |    91 +-
 .../org/apache/solr/filestore/PackageStore.java    |     7 -
 .../org/apache/solr/filestore/PackageStoreAPI.java |    74 +-
 .../solr/handler/AnalysisRequestHandlerBase.java   |     3 -
 .../org/apache/solr/handler/AnalyzeEvaluator.java  |     2 +-
 .../java/org/apache/solr/handler/BlobHandler.java  |    16 +-
 .../java/org/apache/solr/handler/CatStream.java    |    92 +-
 .../solr/handler/CdcrBufferStateManager.java       |     8 +-
 .../solr/handler/CdcrLeaderStateManager.java       |     4 +-
 .../solr/handler/CdcrProcessStateManager.java      |     8 +-
 .../org/apache/solr/handler/CdcrReplicator.java    |    13 +-
 .../apache/solr/handler/CdcrReplicatorManager.java |    44 +-
 .../solr/handler/CdcrReplicatorScheduler.java      |    10 +-
 .../apache/solr/handler/CdcrReplicatorState.java   |     2 +-
 .../apache/solr/handler/CdcrRequestHandler.java    |    38 +-
 .../solr/handler/CdcrUpdateLogSynchronizer.java    |    20 +-
 .../solr/handler/ContentStreamHandlerBase.java     |     2 +-
 .../handler/DocumentAnalysisRequestHandler.java    |     8 +-
 .../apache/solr/handler/DumpRequestHandler.java    |    10 +-
 .../org/apache/solr/handler/ExportHandler.java     |    80 +-
 .../solr/handler/FieldAnalysisRequestHandler.java  |     3 -
 .../java/org/apache/solr/handler/GraphHandler.java |    23 +-
 .../java/org/apache/solr/handler/IndexFetcher.java |   217 +-
 .../apache/solr/handler/MoreLikeThisHandler.java   |     5 +-
 .../apache/solr/handler/PingRequestHandler.java    |     2 +-
 .../apache/solr/handler/ReplicationHandler.java    |   343 +-
 .../apache/solr/handler/RequestHandlerBase.java    |     8 +-
 .../java/org/apache/solr/handler/RestoreCore.java  |     3 +-
 .../java/org/apache/solr/handler/SQLHandler.java   |    10 +-
 .../org/apache/solr/handler/SchemaHandler.java     |    62 +-
 .../java/org/apache/solr/handler/SnapShooter.java  |    28 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |    83 +-
 .../org/apache/solr/handler/StreamHandler.java     |   107 +-
 .../apache/solr/handler/UpdateRequestHandler.java  |     4 +-
 .../solr/handler/admin/AdminHandlersProxy.java     |    10 +-
 .../handler/admin/AutoscalingHistoryHandler.java   |   165 +
 .../solr/handler/admin/BaseHandlerApiSupport.java  |     5 +-
 .../apache/solr/handler/admin/ClusterStatus.java   |    34 +-
 .../org/apache/solr/handler/admin/ColStatus.java   |     9 +-
 .../solr/handler/admin/CollectionHandlerApi.java   |     2 +-
 .../solr/handler/admin/CollectionsHandler.java     |    63 +-
 .../solr/handler/admin/ConfigSetsHandler.java      |    16 +-
 .../solr/handler/admin/ContainerPluginsApi.java    |   179 -
 .../solr/handler/admin/CoreAdminHandler.java       |     6 +-
 .../solr/handler/admin/CoreAdminOperation.java     |     9 +-
 .../solr/handler/admin/HealthCheckHandler.java     |    82 +-
 .../solr/handler/admin/IndexSizeEstimator.java     |     7 +-
 .../org/apache/solr/handler/admin/InfoHandler.java |     2 +-
 .../apache/solr/handler/admin/LoggingHandler.java  |     9 +-
 .../solr/handler/admin/LukeRequestHandler.java     |    36 +-
 .../apache/solr/handler/admin/MergeIndexesOp.java  |     8 +-
 .../handler/admin/MetricsCollectorHandler.java     |    10 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |     7 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |    56 +-
 .../apache/solr/handler/admin/PrepRecoveryOp.java  |    22 +-
 .../solr/handler/admin/RebalanceLeaders.java       |    24 +-
 .../solr/handler/admin/RequestSyncShardOp.java     |     8 +-
 .../solr/handler/admin/SecurityConfHandler.java    |     7 +-
 .../handler/admin/SegmentsInfoRequestHandler.java  |    11 +-
 .../solr/handler/admin/ShowFileRequestHandler.java |    16 +-
 .../solr/handler/admin/SolrInfoMBeanHandler.java   |     4 -
 .../org/apache/solr/handler/admin/SplitOp.java     |    14 +-
 .../solr/handler/admin/SystemInfoHandler.java      |    57 +-
 .../solr/handler/admin/ThreadDumpHandler.java      |    54 +-
 .../solr/handler/admin/ZookeeperInfoHandler.java   |   201 +-
 .../solr/handler/admin/ZookeeperReadAPI.java       |   145 -
 .../solr/handler/admin/ZookeeperStatusHandler.java |    85 +-
 .../solr/handler/component/CloudReplicaSource.java |     2 -
 .../solr/handler/component/DebugComponent.java     |    38 +-
 .../solr/handler/component/ExpandComponent.java    |   119 +-
 .../solr/handler/component/FacetComponent.java     |    22 +-
 .../solr/handler/component/FieldFacetStats.java    |     4 +-
 .../solr/handler/component/HighlightComponent.java |     9 +-
 .../solr/handler/component/HttpShardHandler.java   |   176 +-
 .../handler/component/HttpShardHandlerFactory.java |    93 +-
 .../handler/component/IterativeMergeStrategy.java  |     5 +-
 .../solr/handler/component/MergeStrategy.java      |     1 -
 .../handler/component/MoreLikeThisComponent.java   |    36 +-
 .../component/PhrasesIdentificationComponent.java  |     4 -
 .../component/PivotFacetFieldValueCollection.java  |     3 +-
 .../solr/handler/component/PivotFacetHelper.java   |     5 -
 .../handler/component/PivotFacetProcessor.java     |     4 +-
 .../solr/handler/component/QueryComponent.java     |    41 +-
 .../handler/component/QueryElevationComponent.java |    13 +-
 .../handler/component/RangeFacetProcessor.java     |     1 -
 .../solr/handler/component/RangeFacetRequest.java  |    13 +-
 .../handler/component/RealTimeGetComponent.java    |    56 +-
 .../solr/handler/component/ResponseBuilder.java    |     6 +-
 .../solr/handler/component/SearchComponent.java    |     2 +-
 .../solr/handler/component/SearchHandler.java      |    90 +-
 .../apache/solr/handler/component/ShardDoc.java    |     1 -
 .../component/ShardFieldSortedHitQueue.java        |     6 +-
 .../solr/handler/component/ShardResponse.java      |     4 +-
 .../handler/component/SortedDateStatsValues.java   |     6 +-
 .../component/SortedNumericStatsValues.java        |     6 +-
 .../handler/component/SpatialHeatmapFacets.java    |     4 +-
 .../handler/component/SpellCheckComponent.java     |    62 +-
 .../handler/component/StandaloneReplicaSource.java |     1 -
 .../solr/handler/component/StatsComponent.java     |   113 +-
 .../apache/solr/handler/component/StatsInfo.java   |   108 -
 .../apache/solr/handler/component/StatsValues.java |     2 +-
 .../solr/handler/component/StatsValuesFactory.java |  1385 +-
 .../solr/handler/component/SuggestComponent.java   |    54 +-
 .../handler/component/TermVectorComponent.java     |     6 +-
 .../solr/handler/component/TermsComponent.java     |     4 +-
 .../org/apache/solr/handler/export/DoubleCmp.java  |    43 +
 .../org/apache/solr/handler/export/DoubleComp.java |    45 -
 .../solr/handler/export/DoubleValueSortDoc.java    |     1 -
 .../apache/solr/handler/export/ExportBuffers.java  |   271 -
 .../apache/solr/handler/export/ExportWriter.java   |   306 +-
 .../solr/handler/export/ExportWriterStream.java    |   242 -
 .../org/apache/solr/handler/export/FloatCmp.java   |    44 +
 .../org/apache/solr/handler/export/FloatComp.java  |    44 -
 .../org/apache/solr/handler/export/IntComp.java    |    32 +-
 .../org/apache/solr/handler/export/LongCmp.java    |    45 +
 .../org/apache/solr/handler/export/LongComp.java   |    46 -
 .../org/apache/solr/handler/export/LongValue.java  |     4 +-
 .../apache/solr/handler/export/PriorityQueue.java  |   218 +
 .../solr/handler/export/QuadValueSortDoc.java      |     1 -
 .../solr/handler/export/SingleValueSortDoc.java    |     3 +-
 .../org/apache/solr/handler/export/SortDoc.java    |    19 +-
 .../org/apache/solr/handler/export/SortQueue.java  |   155 +-
 .../solr/handler/export/StringFieldWriter.java     |    25 +-
 .../apache/solr/handler/export/StringValue.java    |    36 +-
 .../solr/handler/export/TripleValueSortDoc.java    |     1 -
 .../apache/solr/handler/loader/JavabinLoader.java  |     6 +-
 .../org/apache/solr/handler/loader/JsonLoader.java |    19 +-
 .../org/apache/solr/handler/loader/XMLLoader.java  |    22 +-
 .../apache/solr/handler/sql/CalciteSolrDriver.java |    16 +-
 .../org/apache/solr/handler/sql/LimitStream.java   |     6 +-
 .../org/apache/solr/handler/sql/SolrAggregate.java |     1 -
 .../apache/solr/handler/sql/SolrEnumerator.java    |     3 -
 .../org/apache/solr/handler/sql/SolrFilter.java    |    16 +-
 .../org/apache/solr/handler/sql/SolrMethod.java    |     1 -
 .../org/apache/solr/handler/sql/SolrSchema.java    |    62 +-
 .../org/apache/solr/handler/sql/SolrTable.java     |    31 +-
 .../handler/sql/SolrToEnumerableConverter.java     |     3 -
 .../org/apache/solr/handler/tagger/Tagger.java     |     9 +-
 .../solr/handler/tagger/TaggerRequestHandler.java  |   119 +-
 .../solr/handler/tagger/TermPrefixCursor.java      |     1 -
 .../solr/highlight/DefaultSolrHighlighter.java     |   514 +-
 .../solr/highlight/HighlightingPluginBase.java     |     2 +-
 .../org/apache/solr/highlight/RegexFragmenter.java |     2 +-
 .../org/apache/solr/highlight/SolrEncoder.java     |     2 +-
 .../org/apache/solr/highlight/SolrFormatter.java   |     2 +-
 .../apache/solr/highlight/SolrFragListBuilder.java |     2 +-
 .../org/apache/solr/highlight/SolrFragmenter.java  |     2 +-
 .../solr/highlight/UnifiedSolrHighlighter.java     |     3 +-
 .../solr/index/WrapperMergePolicyFactory.java      |     1 -
 .../org/apache/solr/internal/csv/CSVParser.java    |     4 -
 .../org/apache/solr/internal/csv/CSVPrinter.java   |     1 -
 .../java/org/apache/solr/logging/LogWatcher.java   |    10 +-
 .../org/apache/solr/logging/MDCLoggingContext.java |    78 +-
 .../org/apache/solr/metrics/MetricSuppliers.java   |    15 +-
 .../java/org/apache/solr/metrics/MetricsMap.java   |     5 +-
 .../apache/solr/metrics/SolrCoreMetricManager.java |     4 +-
 .../org/apache/solr/metrics/SolrMetricManager.java |    75 +-
 .../apache/solr/metrics/SolrMetricProducer.java    |     9 +-
 .../apache/solr/metrics/SolrMetricReporter.java    |     4 +-
 .../metrics/reporters/ReporterClientCache.java     |     4 +-
 .../solr/metrics/reporters/SolrJmxReporter.java    |     6 +-
 .../solr/metrics/reporters/SolrSlf4jReporter.java  |     1 -
 .../metrics/reporters/jmx/JmxMetricsReporter.java  |    18 +-
 .../reporters/solr/SolrClusterReporter.java        |    10 +-
 .../solr/metrics/reporters/solr/SolrReporter.java  |    83 +-
 .../metrics/reporters/solr/SolrShardReporter.java  |    20 +-
 .../apache/solr/metrics/rrd/SolrRrdBackend.java    |     2 +-
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    |    31 +-
 .../packagemanager/DefaultPackageRepository.java   |     4 +-
 .../apache/solr/packagemanager/PackageManager.java |   446 +-
 .../apache/solr/packagemanager/PackageUtils.java   |     3 -
 .../solr/packagemanager/RepositoryManager.java     |    34 +-
 .../apache/solr/packagemanager/SolrPackage.java    |     4 -
 .../solr/packagemanager/SolrPackageInstance.java   |    23 -
 .../org/apache/solr/parser/FastCharStream.java     |    12 -
 .../apache/solr/parser/SolrQueryParserBase.java    |    27 +-
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |    62 +-
 .../java/org/apache/solr/pkg/PackageListeners.java |    58 +-
 .../solr/pkg/PackageListeningClassLoader.java      |   151 -
 .../java/org/apache/solr/pkg/PackageLoader.java    |    80 +-
 .../org/apache/solr/pkg/PackagePluginHolder.java   |    66 +-
 .../apache/solr/request/LocalSolrQueryRequest.java |    12 +-
 .../java/org/apache/solr/request/SimpleFacets.java |    27 +-
 .../apache/solr/request/SolrQueryRequestBase.java  |     1 -
 .../apache/solr/request/SolrRequestHandler.java    |     4 +-
 .../org/apache/solr/request/SolrRequestInfo.java   |    96 +-
 .../solr/request/json/JsonQueryConverter.java      |    52 +-
 .../org/apache/solr/request/json/ObjectUtil.java   |     8 +-
 .../apache/solr/response/BinaryResponseWriter.java |    13 +-
 .../apache/solr/response/CSVResponseWriter.java    |     4 +-
 .../org/apache/solr/response/DocsStreamer.java     |     1 -
 .../solr/response/GeoJSONResponseWriter.java       |    20 +-
 .../solr/response/GraphMLResponseWriter.java       |     8 +-
 .../apache/solr/response/JSONResponseWriter.java   |    25 +-
 .../java/org/apache/solr/response/JSONWriter.java  |    43 +-
 .../apache/solr/response/PHPResponseWriter.java    |     6 +-
 .../solr/response/PHPSerializedResponseWriter.java |    24 +-
 .../apache/solr/response/PythonResponseWriter.java |     4 +-
 .../apache/solr/response/QueryResponseWriter.java  |     2 +-
 .../apache/solr/response/RawResponseWriter.java    |     2 +-
 .../apache/solr/response/RubyResponseWriter.java   |     4 +-
 .../solr/response/SchemaXmlResponseWriter.java     |     2 +-
 .../org/apache/solr/response/SchemaXmlWriter.java  |    25 +-
 .../apache/solr/response/SmileResponseWriter.java  |     2 +-
 .../apache/solr/response/SolrQueryResponse.java    |     1 -
 .../solr/response/TabularResponseWriter.java       |    13 +-
 .../apache/solr/response/TextResponseWriter.java   |    16 +-
 .../apache/solr/response/XMLResponseWriter.java    |     2 +-
 .../java/org/apache/solr/response/XMLWriter.java   |    79 +-
 .../apache/solr/response/XSLTResponseWriter.java   |     4 +-
 .../response/transform/ChildDocTransformer.java    |     6 -
 .../transform/ChildDocTransformerFactory.java      |    11 +-
 .../response/transform/DocIdAugmenterFactory.java  |    31 +-
 .../transform/ExplainAugmenterFactory.java         |     2 +-
 .../response/transform/GeoTransformerFactory.java  |     1 -
 .../transform/RawValueTransformerFactory.java      |     3 +-
 .../response/transform/ShardAugmenterFactory.java  |     2 +-
 .../transform/SubQueryAugmenterFactory.java        |    64 +-
 .../response/transform/TransformerFactory.java     |     2 +-
 .../response/transform/ValueAugmenterFactory.java  |    80 +-
 .../response/transform/ValueSourceAugmenter.java   |     3 -
 .../org/apache/solr/rest/BaseSolrResource.java     |     8 +-
 .../java/org/apache/solr/rest/ManagedResource.java |    14 +-
 .../apache/solr/rest/ManagedResourceStorage.java   |    31 +-
 .../src/java/org/apache/solr/rest/RestManager.java |    21 +-
 .../analysis/BaseManagedTokenFilterFactory.java    |     5 -
 .../schema/analysis/ManagedStopFilterFactory.java  |     5 -
 .../analysis/ManagedSynonymFilterFactory.java      |    10 +-
 .../analysis/ManagedSynonymGraphFilterFactory.java |    10 +-
 .../schema/analysis/ManagedWordSetResource.java    |     7 +-
 .../org/apache/solr/schema/AbstractEnumField.java  |     5 +-
 .../solr/schema/AbstractSpatialFieldType.java      |     2 +-
 .../schema/AbstractSpatialPrefixTreeFieldType.java |     4 +-
 .../java/org/apache/solr/schema/BinaryField.java   |     2 +-
 .../src/java/org/apache/solr/schema/BoolField.java |   147 +-
 .../solr/schema/ClassicIndexSchemaFactory.java     |     2 +-
 .../org/apache/solr/schema/CurrencyFieldType.java  |     5 +-
 .../org/apache/solr/schema/DatePointField.java     |    50 +-
 .../src/java/org/apache/solr/schema/EnumField.java |     2 +-
 .../org/apache/solr/schema/ExternalFileField.java  |     3 +-
 .../solr/schema/ExternalFileFieldReloader.java     |     6 +-
 .../src/java/org/apache/solr/schema/FieldType.java |     5 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  |    39 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |   184 +-
 .../org/apache/solr/schema/IndexSchemaFactory.java |     4 +-
 .../apache/solr/schema/JsonPreAnalyzedParser.java  |    10 +-
 .../solr/schema/LatLonPointSpatialField.java       |     1 -
 .../java/org/apache/solr/schema/LatLonType.java    |     4 -
 .../org/apache/solr/schema/ManagedIndexSchema.java |    98 +-
 .../solr/schema/ManagedIndexSchemaFactory.java     |   115 +-
 .../solr/schema/OpenExchangeRatesOrgProvider.java  |    16 +-
 .../java/org/apache/solr/schema/PointField.java    |     6 +-
 .../org/apache/solr/schema/PreAnalyzedField.java   |    13 +-
 .../org/apache/solr/schema/RandomSortField.java    |     2 +-
 .../src/java/org/apache/solr/schema/RankField.java |   140 -
 .../solr/schema/RptWithGeometrySpatialField.java   |     1 -
 .../java/org/apache/solr/schema/SchemaManager.java |     8 +-
 .../src/java/org/apache/solr/schema/StrField.java  |     2 +-
 .../org/apache/solr/schema/StrFieldSource.java     |     2 +-
 .../src/java/org/apache/solr/schema/TextField.java |     2 +-
 .../java/org/apache/solr/schema/TrieDateField.java |     1 -
 .../org/apache/solr/schema/TrieDoubleField.java    |     3 +-
 .../src/java/org/apache/solr/schema/TrieField.java |     3 +-
 .../org/apache/solr/schema/TrieFloatField.java     |     3 +-
 .../java/org/apache/solr/schema/TrieIntField.java  |     3 +-
 .../java/org/apache/solr/schema/TrieLongField.java |     3 +-
 .../src/java/org/apache/solr/schema/UUIDField.java |     4 +-
 .../apache/solr/schema/ZkIndexSchemaReader.java    |    16 +-
 .../apache/solr/search/AbstractReRankQuery.java    |     2 +-
 .../org/apache/solr/search/BoolQParserPlugin.java  |    53 +-
 .../java/org/apache/solr/search/CacheConfig.java   |    16 +-
 .../org/apache/solr/search/CacheRegenerator.java   |     4 +-
 .../java/org/apache/solr/search/CaffeineCache.java |     5 +-
 .../solr/search/CollapsingQParserPlugin.java       |   520 +-
 .../solr/search/ComplexPhraseQParserPlugin.java    |     2 +-
 .../java/org/apache/solr/search/CursorMark.java    |     1 -
 .../src/java/org/apache/solr/search/DocList.java   |     3 -
 .../src/java/org/apache/solr/search/DocSet.java    |    12 +-
 .../java/org/apache/solr/search/DocSetUtil.java    |    10 +-
 .../src/java/org/apache/solr/search/DocSlice.java  |    15 +-
 .../apache/solr/search/ExportQParserPlugin.java    |     5 -
 .../apache/solr/search/ExtendedDismaxQParser.java  |     5 +-
 .../solr/search/FloatPayloadValueSource.java       |     4 +-
 .../org/apache/solr/search/FunctionQParser.java    |    30 +-
 .../org/apache/solr/search/FunctionRangeQuery.java |     4 -
 .../solr/search/GraphTermsQParserPlugin.java       |    96 +-
 .../src/java/org/apache/solr/search/Grouping.java  |    58 +-
 .../solr/search/IGainTermsQParserPlugin.java       |     2 -
 .../org/apache/solr/search/JoinQParserPlugin.java  |   618 +-
 .../src/java/org/apache/solr/search/JoinQuery.java |   508 -
 .../org/apache/solr/search/MaxScoreCollector.java  |    10 +-
 .../java/org/apache/solr/search/QParserPlugin.java |     5 +-
 .../java/org/apache/solr/search/QueryCommand.java  |    10 -
 .../java/org/apache/solr/search/QueryContext.java  |     2 -
 .../java/org/apache/solr/search/QueryParsing.java  |     1 -
 .../org/apache/solr/search/QueryResultKey.java     |    15 +-
 .../java/org/apache/solr/search/QueryUtils.java    |    32 +-
 .../org/apache/solr/search/RankQParserPlugin.java  |   158 -
 .../src/java/org/apache/solr/search/RankQuery.java |     1 -
 .../org/apache/solr/search/ReRankCollector.java    |    12 +-
 .../java/org/apache/solr/search/ScoreFilter.java   |    21 +
 .../solr/search/SignificantTermsQParserPlugin.java |     6 -
 .../src/java/org/apache/solr/search/SolrCache.java |     5 +-
 .../org/apache/solr/search/SolrCacheHolder.java    |   150 +
 .../apache/solr/search/SolrConstantScoreQuery.java |     1 -
 .../org/apache/solr/search/SolrCoreParser.java     |     1 -
 .../apache/solr/search/SolrDocumentFetcher.java    |     3 +-
 .../java/org/apache/solr/search/SolrFilter.java    |     6 +-
 .../org/apache/solr/search/SolrIndexSearcher.java  |   329 +-
 .../apache/solr/search/SurroundQParserPlugin.java  |     2 +-
 .../org/apache/solr/search/TermsQParserPlugin.java |     3 -
 .../TextLogisticRegressionQParserPlugin.java       |     4 +-
 .../org/apache/solr/search/ValueSourceParser.java  |   651 +-
 .../org/apache/solr/search/XmlQParserPlugin.java   |     3 +-
 .../java/org/apache/solr/search/facet/AggUtil.java |     8 +-
 .../apache/solr/search/facet/AggValueSource.java   |     3 +-
 .../java/org/apache/solr/search/facet/AvgAgg.java  |    22 +-
 .../org/apache/solr/search/facet/CountAgg.java     |     6 +-
 .../org/apache/solr/search/facet/CountValsAgg.java |    12 +-
 .../org/apache/solr/search/facet/DocValuesAcc.java |   575 +-
 .../org/apache/solr/search/facet/FacetBucket.java  |    15 +-
 .../org/apache/solr/search/facet/FacetContext.java |    74 -
 .../apache/solr/search/facet/FacetDebugInfo.java   |     2 +-
 .../org/apache/solr/search/facet/FacetField.java   |    45 +-
 .../apache/solr/search/facet/FacetFieldMerger.java |     7 +-
 .../solr/search/facet/FacetFieldProcessor.java     |   130 +-
 .../search/facet/FacetFieldProcessorByArray.java   |    40 +-
 .../search/facet/FacetFieldProcessorByArrayDV.java |   177 +-
 .../FacetFieldProcessorByEnumTermsStream.java      |     1 -
 .../search/facet/FacetFieldProcessorByHashDV.java  |    31 +-
 .../org/apache/solr/search/facet/FacetHeatmap.java |    12 +-
 .../org/apache/solr/search/facet/FacetModule.java  |   307 +-
 .../org/apache/solr/search/facet/FacetParser.java  |   637 -
 .../apache/solr/search/facet/FacetProcessor.java   |    24 +-
 .../org/apache/solr/search/facet/FacetQuery.java   |     3 +-
 .../org/apache/solr/search/facet/FacetRange.java   |  1038 +-
 .../apache/solr/search/facet/FacetRangeMerger.java |     4 +-
 .../apache/solr/search/facet/FacetRangeParser.java |    76 -
 .../solr/search/facet/FacetRangeProcessor.java     |  1077 --
 .../org/apache/solr/search/facet/FacetRequest.java |   747 +-
 .../solr/search/facet/FacetRequestSorted.java      |    58 -
 .../search/facet/FacetRequestSortedMerger.java     |    10 +-
 .../java/org/apache/solr/search/facet/HLLAgg.java  |    27 +-
 .../org/apache/solr/search/facet/LegacyFacet.java  |     1 -
 .../org/apache/solr/search/facet/MinMaxAgg.java    |    21 +-
 .../org/apache/solr/search/facet/MissingAgg.java   |     6 +-
 .../apache/solr/search/facet/PercentileAgg.java    |     8 +-
 .../solr/search/facet/ReadOnlyCountSlotAcc.java    |    31 -
 .../apache/solr/search/facet/RelatednessAgg.java   |   277 +-
 .../solr/search/facet/SimpleAggValueSource.java    |     1 -
 .../apache/solr/search/facet/SingletonDISI.java    |    48 -
 .../solr/search/facet/SingletonDocIterator.java    |    52 -
 .../java/org/apache/solr/search/facet/SlotAcc.java |   967 +-
 .../org/apache/solr/search/facet/StddevAgg.java    |    20 +-
 .../java/org/apache/solr/search/facet/SumAgg.java  |    12 +-
 .../org/apache/solr/search/facet/SumsqAgg.java     |    10 +-
 .../apache/solr/search/facet/SweepCountAware.java  |   187 -
 .../org/apache/solr/search/facet/SweepDISI.java    |    85 -
 .../apache/solr/search/facet/SweepDocIterator.java |    87 -
 .../apache/solr/search/facet/UnInvertedField.java  |    73 +-
 .../solr/search/facet/UnInvertedFieldAcc.java      |   174 +-
 .../org/apache/solr/search/facet/UnionDISI.java    |   100 -
 .../apache/solr/search/facet/UnionDocIterator.java |   107 -
 .../org/apache/solr/search/facet/UniqueAgg.java    |    45 +-
 .../apache/solr/search/facet/UniqueBlockAgg.java   |    11 +-
 .../solr/search/facet/UniqueBlockFieldAgg.java     |     2 +-
 .../solr/search/facet/UniqueBlockQueryAgg.java     |     6 +-
 .../apache/solr/search/facet/UniqueSlotAcc.java    |    24 +-
 .../org/apache/solr/search/facet/VarianceAgg.java  |    20 +-
 .../search/function/CollapseScoreFunction.java     |     2 -
 .../solr/search/function/FieldNameValueSource.java |     1 -
 .../solr/search/function/FileFloatSource.java      |    37 +-
 .../solr/search/function/MultiStringFunction.java  |     3 +-
 .../solr/search/function/OrdFieldSource.java       |     1 -
 .../search/function/ReverseOrdFieldSource.java     |     1 -
 .../search/function/ValueSourceRangeFilter.java    |     5 +-
 .../distance/GeoDistValueSourceParser.java         |     4 +-
 .../search/function/distance/GeohashFunction.java  |     3 -
 .../distance/GeohashHaversineFunction.java         |     8 +-
 .../function/distance/HaversineConstFunction.java  |     8 +-
 .../function/distance/HaversineFunction.java       |     7 +-
 .../function/distance/StringDistanceFunction.java  |     3 -
 .../function/distance/VectorDistanceFunction.java  |     7 +-
 .../solr/search/grouping/CommandHandler.java       |    26 +-
 .../distributed/command/GroupConverter.java        |     6 +-
 .../grouping/distributed/command/QueryCommand.java |     1 -
 .../command/SearchGroupsFieldCommand.java          |     3 -
 .../distributed/command/TopGroupsFieldCommand.java |     2 -
 .../SearchGroupShardResponseProcessor.java         |     3 +-
 .../TopGroupsShardResponseProcessor.java           |     4 +-
 .../SearchGroupsResultTransformer.java             |     7 +-
 .../ShardResultTransformer.java                    |     2 -
 .../TopGroupsResultTransformer.java                |     3 +-
 .../GroupedEndResultTransformer.java               |     4 +-
 .../solr/search/join/BlockJoinChildQParser.java    |     7 +-
 .../solr/search/join/BlockJoinParentQParser.java   |   105 +-
 .../search/join/ChildFieldValueSourceParser.java   |     6 +-
 .../search/join/CrossCollectionJoinQParser.java    |    92 -
 .../solr/search/join/CrossCollectionJoinQuery.java |   380 -
 .../apache/solr/search/join/FiltersQParser.java    |    91 +-
 .../solr/search/join/GraphEdgeCollector.java       |   207 -
 .../org/apache/solr/search/join/GraphQuery.java    |     2 +-
 .../solr/search/join/GraphTermsCollector.java      |   202 +
 .../solr/search/join/ScoreJoinQParserPlugin.java   |    19 +-
 .../org/apache/solr/search/join/XCJFQParser.java   |    90 +
 .../apache/solr/search/join/XCJFQParserPlugin.java |    66 +
 .../org/apache/solr/search/join/XCJFQuery.java     |   380 +
 .../apache/solr/search/mlt/CloudMLTQParser.java    |     4 -
 .../apache/solr/search/mlt/SimpleMLTQParser.java   |     1 -
 .../similarities/BooleanSimilarityFactory.java     |    36 -
 .../solr/search/stats/ExactSharedStatsCache.java   |     6 +-
 .../apache/solr/search/stats/ExactStatsCache.java  |    22 +-
 .../apache/solr/search/stats/LRUStatsCache.java    |    10 +-
 .../org/apache/solr/search/stats/StatsCache.java   |     2 +-
 .../org/apache/solr/search/stats/StatsUtil.java    |    17 +-
 .../apache/solr/security/AuditLoggerPlugin.java    |    16 +-
 .../apache/solr/security/AuthenticationPlugin.java |    29 +-
 .../apache/solr/security/AuthorizationContext.java |    27 +-
 .../solr/security/AutorizationEditOperation.java   |     9 -
 .../org/apache/solr/security/BasicAuthPlugin.java  |    21 +-
 .../org/apache/solr/security/CertAuthPlugin.java   |    51 -
 .../security/DelegationTokenKerberosFilter.java    |    19 +-
 .../ExternalRoleRuleBasedAuthorizationPlugin.java  |    52 -
 .../org/apache/solr/security/HadoopAuthPlugin.java |    44 +-
 .../org/apache/solr/security/JWTAuthPlugin.java    |    52 +-
 .../org/apache/solr/security/JWTPrincipal.java     |     4 +-
 .../solr/security/JWTVerificationkeyResolver.java  |     8 +-
 .../org/apache/solr/security/KerberosFilter.java   |     6 +-
 .../org/apache/solr/security/KerberosPlugin.java   |    57 +-
 .../solr/security/MultiDestinationAuditLogger.java |     6 +-
 .../solr/security/PKIAuthenticationPlugin.java     |    42 +-
 .../java/org/apache/solr/security/Permission.java  |     9 +-
 .../solr/security/PermissionNameProvider.java      |     5 +-
 .../security/RuleBasedAuthorizationPlugin.java     |   307 +-
 .../security/RuleBasedAuthorizationPluginBase.java |   347 -
 .../security/Sha256AuthenticationProvider.java     |    13 +-
 .../solr/security/SolrLogAuditLoggerPlugin.java    |     4 +-
 .../apache/solr/servlet/DirectSolrConnection.java  |     4 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |    57 +-
 .../apache/solr/servlet/LoadAdminUiServlet.java    |    31 +-
 .../org/apache/solr/servlet/QueryRateLimiter.java  |    55 -
 .../org/apache/solr/servlet/RateLimitManager.java  |   181 -
 .../apache/solr/servlet/RequestRateLimiter.java    |   168 -
 .../org/apache/solr/servlet/ResponseUtils.java     |     5 +-
 .../apache/solr/servlet/SolrDispatchFilter.java    |   160 +-
 .../apache/solr/servlet/SolrRequestParsers.java    |   151 +-
 .../solr/spelling/AbstractLuceneSpellChecker.java  |     3 +-
 .../solr/spelling/DirectSolrSpellChecker.java      |     7 +-
 .../solr/spelling/FileBasedSpellChecker.java       |     2 +-
 .../solr/spelling/IndexBasedSpellChecker.java      |     2 +-
 .../org/apache/solr/spelling/QueryConverter.java   |     3 +-
 .../org/apache/solr/spelling/SolrSpellChecker.java |     2 +-
 .../apache/solr/spelling/SpellCheckCollator.java   |    16 +-
 .../solr/spelling/WordBreakSolrSpellChecker.java   |     8 +-
 .../solr/spelling/suggest/DictionaryFactory.java   |     3 +-
 .../DocumentExpressionDictionaryFactory.java       |    20 +-
 .../solr/spelling/suggest/LookupFactory.java       |     2 +-
 .../solr/spelling/suggest/SolrSuggester.java       |    27 +-
 .../apache/solr/spelling/suggest/Suggester.java    |    14 +-
 .../suggest/fst/AnalyzingInfixLookupFactory.java   |     2 +-
 .../suggest/fst/AnalyzingLookupFactory.java        |     2 +-
 .../suggest/fst/BlendedInfixLookupFactory.java     |     2 +-
 .../spelling/suggest/fst/FSTLookupFactory.java     |     2 +-
 .../suggest/fst/FreeTextLookupFactory.java         |     2 +-
 .../spelling/suggest/fst/FuzzyLookupFactory.java   |     2 +-
 .../spelling/suggest/fst/WFSTLookupFactory.java    |     2 +-
 .../suggest/jaspell/JaspellLookupFactory.java      |     4 +-
 .../spelling/suggest/tst/TSTLookupFactory.java     |     2 +-
 .../solr/store/blockcache/BlockDirectory.java      |     2 +-
 .../org/apache/solr/store/hdfs/HdfsDirectory.java  |    10 +-
 .../org/apache/solr/store/hdfs/HdfsFileWriter.java |     2 -
 .../solr/store/hdfs/HdfsLocalityReporter.java      |    10 +-
 .../apache/solr/store/hdfs/HdfsLockFactory.java    |     4 -
 .../org/apache/solr/update/AddUpdateCommand.java   |     1 -
 .../org/apache/solr/update/CdcrTransactionLog.java |     8 +-
 .../java/org/apache/solr/update/CdcrUpdateLog.java |     6 +-
 .../java/org/apache/solr/update/CommitTracker.java |    25 +-
 .../apache/solr/update/DefaultSolrCoreState.java   |     8 +-
 .../apache/solr/update/DirectUpdateHandler2.java   |    37 +-
 .../org/apache/solr/update/DocumentBuilder.java    |     1 -
 .../org/apache/solr/update/HdfsTransactionLog.java |    10 +-
 .../java/org/apache/solr/update/HdfsUpdateLog.java |    25 +-
 .../org/apache/solr/update/IndexFingerprint.java   |     5 +-
 .../org/apache/solr/update/LoggingInfoStream.java  |     4 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |   149 +-
 .../org/apache/solr/update/PeerSyncWithLeader.java |    56 +-
 .../org/apache/solr/update/SolrCmdDistributor.java |    12 +-
 .../java/org/apache/solr/update/SolrCoreState.java |     3 +-
 .../org/apache/solr/update/SolrIndexConfig.java    |    29 +-
 .../org/apache/solr/update/SolrIndexSplitter.java  |    28 +-
 .../org/apache/solr/update/SolrIndexWriter.java    |    12 +-
 .../apache/solr/update/StreamingSolrClients.java   |     2 +-
 .../org/apache/solr/update/TransactionLog.java     |   174 +-
 .../java/org/apache/solr/update/UpdateHandler.java |     8 +-
 .../src/java/org/apache/solr/update/UpdateLog.java |    99 +-
 .../org/apache/solr/update/UpdateShardHandler.java |    16 +-
 .../java/org/apache/solr/update/VersionInfo.java   |     4 -
 ...AbstractDefaultValueUpdateProcessorFactory.java |     2 +-
 .../AddSchemaFieldsUpdateProcessorFactory.java     |    11 +-
 ...llValuesOrNoneFieldMutatingUpdateProcessor.java |     6 +-
 .../processor/AtomicUpdateDocumentMerger.java      |    58 +-
 .../processor/AtomicUpdateProcessorFactory.java    |     3 +-
 .../solr/update/processor/CdcrUpdateProcessor.java |     2 -
 .../processor/CdcrUpdateProcessorFactory.java      |     2 +-
 .../ClassificationUpdateProcessorFactory.java      |     2 +-
 .../CloneFieldUpdateProcessorFactory.java          |    17 +-
 .../ConcatFieldUpdateProcessorFactory.java         |     2 +-
 .../CountFieldValuesUpdateProcessorFactory.java    |     2 +-
 .../DefaultValueUpdateProcessorFactory.java        |     2 +-
 .../processor/DistributedUpdateProcessor.java      |    83 +-
 .../processor/DistributedZkUpdateProcessor.java    |    54 +-
 .../DocBasedVersionConstraintsProcessor.java       |     8 +-
 ...DocBasedVersionConstraintsProcessorFactory.java |     7 +-
 .../DocExpirationUpdateProcessorFactory.java       |    25 +-
 .../FieldLengthUpdateProcessorFactory.java         |     2 +-
 .../processor/FieldMutatingUpdateProcessor.java    |     7 +-
 .../FieldMutatingUpdateProcessorFactory.java       |    11 +-
 .../FieldNameMutatingUpdateProcessorFactory.java   |     2 +-
 .../FieldValueMutatingUpdateProcessor.java         |    12 +-
 ...IgnoreCommitOptimizeUpdateProcessorFactory.java |     2 +-
 .../IgnoreLargeDocumentProcessorFactory.java       |     5 +-
 .../LastFieldValueUpdateProcessorFactory.java      |     1 -
 .../processor/LogUpdateProcessorFactory.java       |    31 +-
 .../MaxFieldValueUpdateProcessorFactory.java       |     7 +-
 .../MinFieldValueUpdateProcessorFactory.java       |     7 +-
 .../ParseBooleanFieldUpdateProcessorFactory.java   |     4 +-
 .../ParseDateFieldUpdateProcessorFactory.java      |     9 +-
 .../ParseDoubleFieldUpdateProcessorFactory.java    |     6 +-
 .../ParseFloatFieldUpdateProcessorFactory.java     |     6 +-
 .../ParseIntFieldUpdateProcessorFactory.java       |     6 +-
 .../ParseLongFieldUpdateProcessorFactory.java      |     6 +-
 .../ParseNumericFieldUpdateProcessorFactory.java   |     2 +-
 .../PreAnalyzedUpdateProcessorFactory.java         |     2 +-
 .../processor/RegexReplaceProcessorFactory.java    |     2 +-
 .../update/processor/RegexpBoostProcessor.java     |    13 +-
 .../RemoveBlankFieldUpdateProcessorFactory.java    |     2 +-
 .../processor/RunUpdateProcessorFactory.java       |   123 +-
 .../processor/SignatureUpdateProcessorFactory.java |     2 +-
 .../processor/SimpleUpdateProcessorFactory.java    |     3 +-
 .../SkipExistingDocumentsProcessorFactory.java     |     2 +-
 .../StatelessScriptUpdateProcessorFactory.java     |     5 +-
 .../update/processor/TolerantUpdateProcessor.java  |     2 +-
 .../processor/TrimFieldUpdateProcessorFactory.java |     2 +-
 .../TruncateFieldUpdateProcessorFactory.java       |     2 +-
 .../update/processor/URLClassifyProcessor.java     |    60 +-
 .../processor/UUIDUpdateProcessorFactory.java      |     2 +-
 .../UniqFieldsUpdateProcessorFactory.java          |     3 +-
 .../processor/UpdateRequestProcessorChain.java     |    18 +-
 .../processor/UpdateRequestProcessorFactory.java   |     2 +-
 .../org/apache/solr/util/ConcurrentLRUCache.java   |    10 +-
 .../src/java/org/apache/solr/util/CryptoKeys.java  |     5 +-
 .../src/java/org/apache/solr/util/DOMUtil.java     |     6 +-
 .../apache/solr/util/DefaultSolrThreadFactory.java |    49 +
 .../src/java/org/apache/solr/util/DynamicMap.java  |    55 -
 .../src/java/org/apache/solr/util/ExportTool.java  |    61 +-
 .../src/java/org/apache/solr/util/FSHDFSUtils.java |    14 +-
 .../java/org/apache/solr/util/FloatConsumer.java   |    39 -
 .../org/apache/solr/util/IntFloatDynamicMap.java   |   118 -
 .../org/apache/solr/util/IntIntDynamicMap.java     |   120 -
 .../org/apache/solr/util/IntLongDynamicMap.java    |   120 -
 .../apache/solr/util/MockSearchableSolrClient.java |     3 +-
 .../src/java/org/apache/solr/util/PackageTool.java |   126 +-
 .../src/java/org/apache/solr/util/RTimerTree.java  |     1 -
 .../src/java/org/apache/solr/util/SolrCLI.java     |  1590 ++-
 .../apache/solr/util/SolrFileCleaningTracker.java  |   147 +
 .../java/org/apache/solr/util/SolrLogLayout.java   |     1 -
 .../java/org/apache/solr/util/SolrLogPostTool.java |   294 +-
 .../java/org/apache/solr/util/SolrPluginUtils.java |    27 +-
 .../org/apache/solr/util/StartupLoggingUtils.java  |     3 +-
 .../java/org/apache/solr/util/TestInjection.java   |    17 +-
 .../solr/util/circuitbreaker/CircuitBreaker.java   |    56 -
 .../util/circuitbreaker/CircuitBreakerManager.java |   134 -
 .../util/circuitbreaker/MemoryCircuitBreaker.java  |   114 -
 .../SSLCredentialProviderFactory.java              |     8 +-
 .../providers/HadoopSSLCredentialProvider.java     |     2 +-
 .../solr/util/plugin/AbstractPluginLoader.java     |    16 +-
 .../util/plugin/NamedListInitializedPlugin.java    |     2 +-
 .../org/apache/solr/util/stats/MetricUtils.java    |    12 +-
 .../solr/util/tracing/SolrRequestCarrier.java      |     3 +-
 .../apache/solr/util/xslt/TransformerProvider.java |    10 +-
 .../resources/EditableSolrConfigAttributes.json    |     5 +-
 solr/core/src/resources/ImplicitPlugins.json       |    13 +-
 solr/core/src/test-files/log4j2.xml                |    44 +-
 solr/core/src/test-files/runtimecode/MyPlugin.java |    43 -
 .../runtimecode/containerplugin.v.1.jar.bin        |   Bin 867 -> 0 bytes
 .../runtimecode/containerplugin.v.2.jar.bin        |   Bin 867 -> 0 bytes
 .../test-files/runtimecode/schema-plugins.jar.bin  |   Bin 6814 -> 0 bytes
 solr/core/src/test-files/runtimecode/sig.txt       |    13 -
 .../collection1/conf/schema-booleansimilarity.xml  |    35 -
 .../solr/collection1/conf/schema-rank-fields.xml   |    27 -
 .../test-files/solr/collection1/conf/schema15.xml  |     3 -
 .../solr/collection1/conf/schema_latest.xml        |     4 -
 .../conf/solrconfig-cache-enable-disable.xml       |    10 -
 .../solr/collection1/conf/solrconfig-follower.xml  |    59 -
 .../solr/collection1/conf/solrconfig-leader.xml    |    70 -
 .../conf/solrconfig-leader1-keepOneBackup.xml      |    49 -
 .../solr/collection1/conf/solrconfig-leader1.xml   |    68 -
 .../solr/collection1/conf/solrconfig-leader2.xml   |    66 -
 .../solr/collection1/conf/solrconfig-leader3.xml   |    67 -
 ...rottled.xml => solrconfig-master-throttled.xml} |     0
 .../solr/collection1/conf/solrconfig-master.xml    |    70 +
 .../conf/solrconfig-master1-keepOneBackup.xml      |    49 +
 .../solr/collection1/conf/solrconfig-master1.xml   |    68 +
 .../solr/collection1/conf/solrconfig-master2.xml   |    66 +
 .../solr/collection1/conf/solrconfig-master3.xml   |    67 +
 .../conf/solrconfig-memory-circuitbreaker.xml      |    95 -
 .../solr/collection1/conf/solrconfig-repeater.xml  |     6 +-
 .../conf/solrconfig-replication-legacy.xml         |    62 -
 .../solr/collection1/conf/solrconfig-slave.xml     |    59 +
 ...rconfig-follower1.xml => solrconfig-slave1.xml} |     0
 .../solr/collection1/conf/solrconfig-tlog.xml      |     4 +
 .../conf/solrconfig.snippet.randomindexconfig.xml  |     1 -
 .../solr/configsets/ccjoin/conf/solrconfig.xml     |    62 -
 .../configsets/{ccjoin => xcjf}/conf/schema.xml    |     0
 .../solr/configsets/xcjf/conf/solrconfig.xml       |    72 +
 .../security/hadoop_kerberos_authz_config.json     |    37 -
 .../solr/simSnapshot/autoscalingState.json         |  3923 ++++++
 .../test-files/solr/simSnapshot/clusterState.json  |  2854 ++++
 .../test-files/solr/simSnapshot/distribState.json  |   206 +
 .../test-files/solr/simSnapshot/managerState.json  |     1 +
 .../src/test-files/solr/simSnapshot/nodeState.json |  3823 ++++++
 .../test-files/solr/simSnapshot/statistics.json    |  2045 +++
 solr/core/src/test-files/solr/solr-50-all.xml      |     1 -
 solr/core/src/test-files/solr/solr-jmxreporter.xml |     1 +
 .../core/src/test-files/solr/solr-solrreporter.xml |     7 +-
 .../test-files/solr/solr-trackingshardhandler.xml  |     1 +
 solr/core/src/test-files/solr/solr.xml             |     2 +-
 .../src/test/org/apache/hadoop/fs/FileUtil.java    |    33 +-
 .../datanode/fsdataset/impl/BlockPoolSlice.java    |    50 +-
 .../test/org/apache/hadoop/http/HttpServer2.java   |    55 +-
 .../test/org/apache/hadoop/util/DiskChecker.java   |     4 +-
 .../org/apache/solr/BasicFunctionalityTest.java    |    12 +-
 .../src/test/org/apache/solr/CursorPagingTest.java |     8 -
 .../apache/solr/HelloWorldSolrCloudTestCase.java   |     4 +-
 .../src/test/org/apache/solr/OutputWriterTest.java |     2 +-
 .../src/test/org/apache/solr/SolrInfoBeanTest.java |     6 +-
 .../test/org/apache/solr/TestCrossCoreJoin.java    |     4 +-
 .../org/apache/solr/TestDistributedGrouping.java   |     3 -
 .../org/apache/solr/TestDistributedSearch.java     |    46 +-
 .../test/org/apache/solr/TestGroupingSearch.java   |   207 +-
 solr/core/src/test/org/apache/solr/TestJoin.java   |    38 +-
 .../test/org/apache/solr/TestRandomDVFaceting.java |    10 +-
 .../test/org/apache/solr/TestRandomFaceting.java   |    22 +-
 .../org/apache/solr/TestSolrCoreProperties.java    |     1 -
 .../solr/analysis/TestDeprecatedFilters.java       |     2 +-
 .../apache/solr/analysis/TokenizerChainTest.java   |     1 -
 .../TestEmbeddedSolrServerAdminHandler.java        |    15 +-
 .../TestEmbeddedSolrServerConstructors.java        |     5 +-
 .../test/org/apache/solr/cloud/AddReplicaTest.java |    12 +-
 .../apache/solr/cloud/AliasIntegrationTest.java    |     2 +-
 .../cloud/AssignBackwardCompatibilityTest.java     |     5 +-
 .../apache/solr/cloud/BasicDistributedZk2Test.java |     8 +-
 .../apache/solr/cloud/BasicDistributedZkTest.java  |    18 +-
 .../test/org/apache/solr/cloud/BasicZkTest.java    |   181 +
 .../solr/cloud/ChaosMonkeyNothingIsSafeTest.java   |     8 +-
 ...aosMonkeyNothingIsSafeWithPullReplicasTest.java |    11 +-
 .../solr/cloud/ChaosMonkeySafeLeaderTest.java      |     6 +-
 .../ChaosMonkeySafeLeaderWithPullReplicasTest.java |    15 +-
 .../solr/cloud/ChaosMonkeyShardSplitTest.java      |    22 +-
 .../test/org/apache/solr/cloud/CloudTestUtils.java |   189 +
 .../apache/solr/cloud/ClusterStateMockUtil.java    |    13 +-
 .../org/apache/solr/cloud/ClusterStateTest.java    |     8 +-
 .../org/apache/solr/cloud/CollectionPropsTest.java |     9 +-
 .../solr/cloud/CollectionStateFormat2Test.java     |    71 +
 .../solr/cloud/CollectionStateZnodeTest.java       |    70 -
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |    50 +-
 .../org/apache/solr/cloud/ConfigSetsAPITest.java   |     1 -
 .../apache/solr/cloud/ConnectionManagerTest.java   |     4 +-
 .../apache/solr/cloud/CreateRoutedAliasTest.java   |     4 +
 .../solr/cloud/DeleteInactiveReplicaTest.java      |     8 +-
 .../cloud/DeleteLastCustomShardedReplicaTest.java  |     1 +
 .../test/org/apache/solr/cloud/DeleteNodeTest.java |     8 +-
 .../org/apache/solr/cloud/DeleteReplicaTest.java   |    38 +-
 .../org/apache/solr/cloud/DeleteShardTest.java     |     1 +
 .../apache/solr/cloud/DistribCursorPagingTest.java |     1 -
 .../DistribDocExpirationUpdateProcessorTest.java   |     5 +-
 .../solr/cloud/DistribJoinFromCollectionTest.java  |     8 +-
 .../apache/solr/cloud/DistributedQueueTest.java    |     4 +-
 .../solr/cloud/DistributedVersionInfoTest.java     |     8 +-
 .../apache/solr/cloud/DocValuesNotIndexedTest.java |     1 +
 .../org/apache/solr/cloud/ForceLeaderTest.java     |    26 +-
 .../solr/cloud/FullSolrCloudDistribCmdsTest.java   |     6 +-
 .../cloud/FullThrottleStoppableIndexingThread.java |     2 +-
 .../apache/solr/cloud/HealthCheckHandlerTest.java  |   179 +
 .../solr/cloud/HttpPartitionOnCommitTest.java      |    37 +-
 .../org/apache/solr/cloud/HttpPartitionTest.java   |    45 +-
 .../apache/solr/cloud/KerberosTestServices.java    |     6 +-
 .../solr/cloud/LeaderElectionContextKeyTest.java   |     1 +
 .../solr/cloud/LeaderElectionIntegrationTest.java  |     2 +-
 .../org/apache/solr/cloud/LeaderElectionTest.java  |     8 +-
 .../cloud/LeaderFailoverAfterPartitionTest.java    |     6 +-
 .../cloud/LeaderFailureAfterFreshStartTest.java    |     8 +-
 .../apache/solr/cloud/LeaderTragicEventTest.java   |    17 +-
 .../solr/cloud/LeaderVoteWaitTimeoutTest.java      |     6 +-
 .../solr/cloud/LegacyCloudClusterPropTest.java     |   180 +
 .../solr/cloud/MetricsHistoryIntegrationTest.java  |    28 +-
 .../org/apache/solr/cloud/MigrateRouteKeyTest.java |    14 +-
 .../solr/cloud/MissingSegmentRecoveryTest.java     |     1 +
 .../apache/solr/cloud/MockSimpleZkController.java  |     5 +-
 .../test/org/apache/solr/cloud/MockSolrSource.java |     2 +-
 .../solr/cloud/MoveReplicaHDFSFailoverTest.java    |     4 -
 .../org/apache/solr/cloud/MoveReplicaHDFSTest.java |     4 -
 .../org/apache/solr/cloud/MoveReplicaTest.java     |    21 +-
 .../solr/cloud/MultiSolrCloudTestCaseTest.java     |     6 +-
 .../apache/solr/cloud/MultiThreadedOCPTest.java    |    71 +-
 .../solr/cloud/NestedShardedAtomicUpdateTest.java  |     4 -
 .../org/apache/solr/cloud/NodeMutatorTest.java     |     6 +-
 .../OutOfBoxZkACLAndCredentialsProvidersTest.java  |    12 +-
 ...OverriddenZkACLAndCredentialsProvidersTest.java |    10 +-
 .../OverseerCollectionConfigSetProcessorTest.java  |    94 +-
 .../solr/cloud/OverseerModifyCollectionTest.java   |     1 -
 .../org/apache/solr/cloud/OverseerRolesTest.java   |    10 +-
 .../org/apache/solr/cloud/OverseerStatusTest.java  |     5 +-
 .../apache/solr/cloud/OverseerTaskQueueTest.java   |     1 -
 .../test/org/apache/solr/cloud/OverseerTest.java   |   199 +-
 .../apache/solr/cloud/PeerSyncReplicationTest.java |    14 +-
 .../test/org/apache/solr/cloud/RecoveryZkTest.java |     1 +
 .../apache/solr/cloud/ReindexCollectionTest.java   |     3 +-
 .../apache/solr/cloud/ReplaceNodeNoTargetTest.java |   122 +
 .../org/apache/solr/cloud/ReplaceNodeTest.java     |    12 +-
 .../apache/solr/cloud/ReplicationFactorTest.java   |    25 +-
 .../solr/cloud/RestartWhileUpdatingTest.java       |     5 +-
 .../org/apache/solr/cloud/RollingRestartTest.java  |    12 +-
 .../test/org/apache/solr/cloud/RouteFieldTest.java |   163 -
 .../cloud/RoutingToNodesWithPropertiesTest.java    |   241 +
 .../org/apache/solr/cloud/SSLMigrationTest.java    |     3 +-
 .../apache/solr/cloud/SaslZkACLProviderTest.java   |    14 +-
 .../apache/solr/cloud/ShardRoutingCustomTest.java  |     3 +
 .../cloud/SharedFSAutoReplicaFailoverTest.java     |    32 +-
 .../test/org/apache/solr/cloud/SliceStateTest.java |     4 +-
 .../apache/solr/cloud/SolrCloudExampleTest.java    |    23 +-
 .../org/apache/solr/cloud/SolrXmlInZkTest.java     |     8 +-
 .../test/org/apache/solr/cloud/SplitShardTest.java |    15 +-
 .../test/org/apache/solr/cloud/SyncSliceTest.java  |     7 +-
 .../solr/cloud/SystemCollectionCompatTest.java     |    16 +-
 .../solr/cloud/TestAuthenticationFramework.java    |    19 +-
 .../apache/solr/cloud/TestBaseStatsCacheCloud.java |     2 +-
 .../apache/solr/cloud/TestCloudConsistency.java    |     6 +-
 .../TestCloudPhrasesIdentificationComponent.java   |     4 -
 .../org/apache/solr/cloud/TestCloudPivotFacet.java |     7 +-
 .../org/apache/solr/cloud/TestCloudRecovery.java   |     1 +
 .../org/apache/solr/cloud/TestCloudRecovery2.java  |     1 +
 .../solr/cloud/TestCloudSearcherWarming.java       |    22 +-
 .../apache/solr/cloud/TestClusterProperties.java   |    12 +
 .../org/apache/solr/cloud/TestConfigSetsAPI.java   |    41 +-
 .../solr/cloud/TestConfigSetsAPIExclusivity.java   |     4 -
 .../solr/cloud/TestConfigSetsAPIZkFailure.java     |    30 +-
 .../test/org/apache/solr/cloud/TestCryptoKeys.java |   208 +
 .../cloud/TestDeleteCollectionOnDownNodes.java     |     1 +
 .../cloud/TestDynamicFieldNamesIndexCorrectly.java |     9 +-
 .../org/apache/solr/cloud/TestHashPartitioner.java |     1 -
 .../org/apache/solr/cloud/TestLazySolrCluster.java |    97 -
 .../solr/cloud/TestLeaderElectionZkExpiry.java     |    13 +-
 .../solr/cloud/TestMiniSolrCloudClusterSSL.java    |    16 +-
 .../solr/cloud/TestOnReconnectListenerSupport.java |     5 +-
 .../org/apache/solr/cloud/TestPullReplica.java     |    32 +-
 .../solr/cloud/TestPullReplicaErrorHandling.java   |    22 +-
 .../solr/cloud/TestQueryingOnDownCollection.java   |     2 -
 .../solr/cloud/TestRandomRequestDistribution.java  |    13 +-
 .../apache/solr/cloud/TestRebalanceLeaders.java    |     2 +-
 .../apache/solr/cloud/TestRequestForwarding.java   |     1 +
 .../apache/solr/cloud/TestSSLRandomization.java    |    12 +-
 .../solr/cloud/TestSkipOverseerOperations.java     |     1 +
 .../cloud/TestSolrCloudWithDelegationTokens.java   |    50 +-
 .../solr/cloud/TestSolrCloudWithKerberosAlt.java   |    12 +-
 .../TestSolrCloudWithSecureImpersonation.java      |    21 +-
 .../cloud/TestStressCloudBlindAtomicUpdates.java   |    23 +-
 .../solr/cloud/TestStressInPlaceUpdates.java       |    19 +-
 .../org/apache/solr/cloud/TestStressLiveNodes.java |    12 +-
 .../solr/cloud/TestTlogReplayVsRecovery.java       |     4 +-
 .../org/apache/solr/cloud/TestTlogReplica.java     |   100 +-
 .../TestTolerantUpdateProcessorRandomCloud.java    |    10 +-
 .../org/apache/solr/cloud/TestUtilizeNode.java     |   181 +
 .../cloud/TestWaitForStateWithJettyShutdowns.java  |    10 +-
 .../org/apache/solr/cloud/TestWithCollection.java  |   605 +
 .../test/org/apache/solr/cloud/TestZkChroot.java   |   169 +
 .../cloud/TlogReplayBufferedWhileIndexingTest.java |     5 +-
 .../apache/solr/cloud/UnloadDistributedZkTest.java |     8 +-
 .../VMParamsZkACLAndCredentialsProvidersTest.java  |    10 +-
 .../src/test/org/apache/solr/cloud/ZkCLITest.java  |    10 +-
 .../org/apache/solr/cloud/ZkControllerTest.java    |    42 +-
 .../org/apache/solr/cloud/ZkNodePropsTest.java     |     4 +-
 .../org/apache/solr/cloud/ZkShardTermsTest.java    |     1 +
 .../org/apache/solr/cloud/ZkSolrClientTest.java    |    12 +-
 .../AbstractCloudBackupRestoreTestCase.java        |    59 +-
 .../solr/cloud/api/collections/AssignTest.java     |   203 +
 .../AsyncCallRequestStatusResponseTest.java        |     1 +
 .../api/collections/CollectionReloadTest.java      |     4 +-
 .../collections/CollectionTooManyReplicasTest.java |    68 +-
 .../CollectionsAPIAsyncDistributedZkTest.java      |    28 +-
 .../CollectionsAPIDistributedZkTest.java           |    50 +-
 .../ConcurrentCreateCollectionTest.java            |   293 +
 .../api/collections/CustomCollectionTest.java      |     8 +
 .../HdfsCollectionsAPIDistributedZkTest.java       |     4 -
 .../solr/cloud/api/collections/ShardSplitTest.java |   112 +-
 .../SimpleCollectionCreateDeleteTest.java          |     7 +-
 .../cloud/api/collections/SplitByPrefixTest.java   |     3 +-
 .../cloud/api/collections/TestCollectionAPI.java   |   136 +-
 .../TestCollectionsAPIViaSolrCloudCluster.java     |     7 +-
 .../collections/TestHdfsCloudBackupRestore.java    |     5 -
 .../collections/TestLocalFSCloudBackupRestore.java |     3 +-
 .../api/collections/TestReplicaProperties.java     |     6 +-
 .../TestRequestStatusCollectionAPI.java            |     5 +-
 .../AutoAddReplicasIntegrationTest.java            |   435 +
 .../autoscaling/AutoAddReplicasPlanActionTest.java |   258 +
 .../cloud/autoscaling/AutoScalingHandlerTest.java  |  1089 ++
 .../solr/cloud/autoscaling/CapturedEvent.java      |    65 +
 .../cloud/autoscaling/ComputePlanActionTest.java   |   735 ++
 .../cloud/autoscaling/ExecutePlanActionTest.java   |   380 +
 .../HdfsAutoAddReplicasIntegrationTest.java        |    57 +
 .../cloud/autoscaling/HttpTriggerListenerTest.java |   207 +
 .../IndexSizeTriggerMixedBoundsTest.java           |   372 +
 .../IndexSizeTriggerSizeEstimationTest.java        |   320 +
 .../cloud/autoscaling/IndexSizeTriggerTest.java    |   759 ++
 .../autoscaling/MetricTriggerIntegrationTest.java  |   241 +
 .../solr/cloud/autoscaling/MetricTriggerTest.java  |   136 +
 .../NodeAddedTriggerIntegrationTest.java           |   316 +
 .../cloud/autoscaling/NodeAddedTriggerTest.java    |   342 +
 .../NodeLostTriggerIntegrationTest.java            |   352 +
 .../cloud/autoscaling/NodeLostTriggerTest.java     |   391 +
 .../autoscaling/NodeMarkersRegistrationTest.java   |   354 +
 .../cloud/autoscaling/RestoreTriggerStateTest.java |   166 +
 .../ScheduledMaintenanceTriggerTest.java           |   379 +
 .../ScheduledTriggerIntegrationTest.java           |   148 +
 .../cloud/autoscaling/ScheduledTriggerTest.java    |   141 +
 .../SearchRateTriggerIntegrationTest.java          |   742 ++
 .../cloud/autoscaling/SearchRateTriggerTest.java   |   357 +
 .../cloud/autoscaling/SystemLogListenerTest.java   |   289 +
 .../solr/cloud/autoscaling/TestPolicyCloud.java    |   532 +
 .../TriggerCooldownIntegrationTest.java            |   227 +
 .../cloud/autoscaling/TriggerEventQueueTest.java   |    98 +
 .../cloud/autoscaling/TriggerIntegrationTest.java  |   713 +
 .../TriggerSetPropertiesIntegrationTest.java       |   259 +
 .../autoscaling/sim/SimSolrCloudTestCase.java      |   253 +
 .../sim/TestSimClusterStateProvider.java           |   228 +
 .../autoscaling/sim/TestSimComputePlanAction.java  |   378 +
 .../sim/TestSimDistribStateManager.java            |   378 +
 .../autoscaling/sim/TestSimDistributedQueue.java   |   221 +
 .../autoscaling/sim/TestSimExecutePlanAction.java  |   217 +
 .../autoscaling/sim/TestSimExtremeIndexing.java    |   144 +
 .../sim/TestSimGenericDistributedQueue.java        |    38 +
 .../cloud/autoscaling/sim/TestSimLargeCluster.java |   842 ++
 .../autoscaling/sim/TestSimNodeAddedTrigger.java   |   329 +
 .../autoscaling/sim/TestSimNodeLostTrigger.java    |   347 +
 .../cloud/autoscaling/sim/TestSimPolicyCloud.java  |   376 +
 .../cloud/autoscaling/sim/TestSimScenario.java     |   166 +
 .../autoscaling/sim/TestSimTriggerIntegration.java |  1536 +++
 .../solr/cloud/autoscaling/sim/TestSimUtils.java   |    95 +
 .../autoscaling/sim/TestSnapshotCloudManager.java  |   266 +
 .../solr/cloud/cdcr/BaseCdcrDistributedZkTest.java |    28 +-
 .../solr/cloud/cdcr/CdcrBidirectionalTest.java     |    34 +-
 .../apache/solr/cloud/cdcr/CdcrBootstrapTest.java  |    31 +-
 .../solr/cloud/cdcr/CdcrOpsAndBoundariesTest.java  |     5 +-
 .../cloud/cdcr/CdcrReplicationHandlerTest.java     |    96 +-
 .../solr/cloud/cdcr/CdcrRequestHandlerTest.java    |     5 -
 .../org/apache/solr/cloud/cdcr/CdcrTestsUtil.java  |     6 +-
 .../cloud/cdcr/CdcrVersionReplicationTest.java     |     2 +-
 .../solr/cloud/hdfs/HDFSCollectionsAPITest.java    |     4 -
 .../cloud/hdfs/HdfsBasicDistributedZk2Test.java    |     4 -
 .../cloud/hdfs/HdfsBasicDistributedZkTest.java     |     4 -
 .../hdfs/HdfsChaosMonkeyNothingIsSafeTest.java     |     4 -
 .../cloud/hdfs/HdfsChaosMonkeySafeLeaderTest.java  |     4 -
 .../apache/solr/cloud/hdfs/HdfsNNFailoverTest.java |     6 +-
 .../solr/cloud/hdfs/HdfsRecoverLeaseTest.java      |     4 -
 .../apache/solr/cloud/hdfs/HdfsRecoveryZkTest.java |     4 -
 .../cloud/hdfs/HdfsRestartWhileUpdatingTest.java   |     4 -
 .../apache/solr/cloud/hdfs/HdfsSyncSliceTest.java  |     6 +-
 .../apache/solr/cloud/hdfs/HdfsThreadLeakTest.java |     4 -
 .../HdfsTlogReplayBufferedWhileIndexingTest.java   |     4 -
 .../cloud/hdfs/HdfsUnloadDistributedZkTest.java    |     4 -
 .../hdfs/HdfsWriteToMultipleCollectionsTest.java   |     6 +-
 .../org/apache/solr/cloud/hdfs/StressHdfsTest.java |    13 +-
 .../cloud/overseer/TestClusterStateMutator.java    |     9 +-
 .../overseer/ZkCollectionPropsCachingTest.java     |     4 +
 .../solr/cloud/overseer/ZkStateReaderTest.java     |   111 +-
 .../solr/cloud/overseer/ZkStateWriterTest.java     |   150 +-
 .../apache/solr/cloud/rule/ImplicitSnitchTest.java |     3 -
 .../org/apache/solr/cloud/rule/RuleEngineTest.java |    14 +-
 .../test/org/apache/solr/cloud/rule/RulesTest.java |    78 +-
 .../solr/common/cloud/ZkDynamicConfigTest.java     |    69 -
 .../solr/core/BlobRepositoryMockingTest.java       |    10 +-
 .../test/org/apache/solr/core/CoreSorterTest.java  |   310 +-
 .../solr/core/CountUsageValueSourceParser.java     |     3 +-
 .../org/apache/solr/core/DirectoryFactoryTest.java |     9 +-
 .../apache/solr/core/DummyValueSourceParser.java   |     3 +-
 .../solr/core/ExitableDirectoryReaderTest.java     |     6 -
 .../org/apache/solr/core/FakeDeletionPolicy.java   |     6 +-
 .../apache/solr/core/HdfsDirectoryFactoryTest.java |     5 -
 .../src/test/org/apache/solr/core/HelloStream.java |    10 +-
 .../org/apache/solr/core/MockEventListener.java    |     2 +-
 .../core/MockQuerySenderListenerReqHandler.java    |     2 +-
 .../apache/solr/core/MockShardHandlerFactory.java  |     1 -
 .../org/apache/solr/core/QueryResultKeyTest.java   |    16 +-
 .../org/apache/solr/core/RequestHandlersTest.java  |     1 -
 .../org/apache/solr/core/ResourceLoaderTest.java   |    17 +-
 .../solr/core/SolrCoreCheckLockOnStartupTest.java  |     6 +-
 .../test/org/apache/solr/core/SolrCoreTest.java    |     8 +-
 .../org/apache/solr/core/TestCodecSupport.java     |     2 +-
 .../src/test/org/apache/solr/core/TestConfig.java  |    40 +-
 .../org/apache/solr/core/TestConfigOverlay.java    |     3 -
 .../apache/solr/core/TestConfigSetImmutable.java   |     3 -
 .../apache/solr/core/TestConfigSetProperties.java  |     4 -
 .../test/org/apache/solr/core/TestConfigSets.java  |    30 +-
 .../org/apache/solr/core/TestCoreContainer.java    |   104 +-
 .../org/apache/solr/core/TestCoreDiscovery.java    |    14 +-
 .../org/apache/solr/core/TestDirectoryFactory.java |     2 +-
 .../org/apache/solr/core/TestDynamicLoading.java   |   287 +
 .../apache/solr/core/TestDynamicLoadingUrl.java    |   127 +
 .../test/org/apache/solr/core/TestDynamicURP.java  |   111 +
 .../test/org/apache/solr/core/TestInitParams.java  |    12 +-
 .../org/apache/solr/core/TestJmxIntegration.java   |    13 +-
 .../test/org/apache/solr/core/TestLazyCores.java   |    78 +-
 .../apache/solr/core/TestShardHandlerFactory.java  |     1 -
 .../apache/solr/core/TestSolrConfigHandler.java    |    71 +-
 .../src/test/org/apache/solr/core/TestSolrXml.java |   130 +-
 .../repository/HdfsBackupRepositoryTest.java       |    94 +-
 .../core/snapshots/TestSolrCloudSnapshots.java     |    20 +-
 .../solr/core/snapshots/TestSolrCoreSnapshots.java |    31 +-
 .../solr/filestore/TestDistribPackageStore.java    |    80 +-
 .../handler/AnalysisRequestHandlerTestBase.java    |     2 +-
 .../apache/solr/handler/BackupRestoreUtils.java    |    20 +-
 .../apache/solr/handler/BackupStatusChecker.java   |     4 -
 .../handler/BinaryUpdateRequestHandlerTest.java    |    30 +-
 .../DocumentAnalysisRequestHandlerTest.java        |     2 -
 .../handler/FieldAnalysisRequestHandlerTest.java   |    32 +-
 .../org/apache/solr/handler/JsonLoaderTest.java    |     4 -
 .../solr/handler/MoreLikeThisHandlerTest.java      |    11 +-
 .../solr/handler/PingRequestHandlerTest.java       |     3 -
 .../org/apache/solr/handler/TestBlobHandler.java   |     1 -
 .../org/apache/solr/handler/TestConfigReload.java  |     9 +-
 .../apache/solr/handler/TestContainerPlugin.java   |   377 -
 .../org/apache/solr/handler/TestCoreBackup.java    |    46 +-
 .../solr/handler/TestHdfsBackupRestoreCore.java    |    18 +-
 .../solr/handler/TestReplicationHandler.java       |  1299 +-
 .../solr/handler/TestReplicationHandlerBackup.java |    74 +-
 .../TestReplicationHandlerDiskOverFlow.java        |    83 +-
 .../org/apache/solr/handler/TestReqParamsAPI.java  |     2 -
 .../org/apache/solr/handler/TestRestoreCore.java   |    83 +-
 .../org/apache/solr/handler/TestSQLHandler.java    |     6 +-
 .../solr/handler/TestSolrConfigHandlerCloud.java   |     4 +-
 .../handler/TestSolrConfigHandlerConcurrent.java   |    14 +-
 .../solr/handler/TestStressThreadBackup.java       |    13 -
 .../handler/ThrowErrorOnInitRequestHandler.java    |     2 +-
 .../apache/solr/handler/V2ApiIntegrationTest.java  |    31 +-
 .../org/apache/solr/handler/V2StandaloneTest.java  |     2 -
 .../solr/handler/XsltUpdateRequestHandlerTest.java |     7 +-
 .../admin/AutoscalingHistoryHandlerTest.java       |   461 +
 .../handler/admin/CoreAdminCreateDiscoverTest.java |     2 -
 .../solr/handler/admin/CoreAdminHandlerTest.java   |     7 +-
 .../handler/admin/CoreAdminRequestStatusTest.java  |     2 -
 .../admin/CoreMergeIndexesAdminHandlerTest.java    |    13 +-
 .../solr/handler/admin/DaemonStreamApiTest.java    |     3 +
 .../solr/handler/admin/HealthCheckHandlerTest.java |   237 -
 .../solr/handler/admin/IndexSizeEstimatorTest.java |    12 +-
 .../solr/handler/admin/LukeRequestHandlerTest.java |    15 -
 .../solr/handler/admin/MBeansHandlerTest.java      |     2 -
 .../solr/handler/admin/MetricsHandlerTest.java     |    18 -
 .../handler/admin/MetricsHistoryHandlerTest.java   |    45 +-
 .../admin/PropertiesRequestHandlerTest.java        |     1 -
 .../handler/admin/SecurityConfHandlerTest.java     |     7 +-
 .../admin/SegmentsInfoRequestHandlerTest.java      |    16 +-
 .../solr/handler/admin/StatsReloadRaceTest.java    |     2 -
 .../solr/handler/admin/TestApiFramework.java       |    82 +-
 .../solr/handler/admin/TestCollectionAPIs.java     |    28 +-
 .../apache/solr/handler/admin/TestConfigsApi.java  |    20 +-
 .../solr/handler/admin/TestCoreAdminApis.java      |    12 +-
 .../solr/handler/admin/ThreadDumpHandlerTest.java  |   239 -
 .../solr/handler/admin/ZookeeperReadAPITest.java   |   101 -
 .../handler/admin/ZookeeperStatusHandlerTest.java  |    72 +-
 .../component/CustomHighlightComponentTest.java    |    25 +-
 .../component/CustomTermsComponentTest.java        |     2 +-
 .../solr/handler/component/DebugComponentTest.java |    40 +-
 .../component/DistributedDebugComponentTest.java   |     8 +-
 .../component/DistributedExpandComponentTest.java  |    49 -
 .../component/DistributedFacetPivotLargeTest.java  |     3 +-
 .../DistributedFacetPivotLongTailTest.java         |     2 -
 .../component/DistributedFacetPivotSmallTest.java  |    26 +-
 .../component/DistributedMLTComponentTest.java     |     2 +-
 .../DistributedQueryComponentOptimizationTest.java |     2 +-
 .../handler/component/InfixSuggestersTest.java     |     2 -
 .../PhrasesIdentificationComponentTest.java        |     4 -
 .../component/QueryElevationComponentTest.java     |    75 +-
 .../component/ResourceSharingTestComponent.java    |     4 +-
 .../solr/handler/component/SearchHandlerTest.java  |    74 +-
 .../handler/component/ShardsWhitelistTest.java     |     6 +-
 .../handler/component/SpellCheckComponentTest.java |     7 +-
 .../solr/handler/component/StatsComponentTest.java |   115 +-
 .../solr/handler/component/TermsComponentTest.java |    13 +-
 .../handler/component/TestExpandComponent.java     |    96 -
 .../component/TestHttpShardHandlerFactory.java     |     4 +-
 .../component/TestTrackingShardHandlerFactory.java |     4 +-
 .../solr/handler/export/TestExportWriter.java      |    80 +-
 .../org/apache/solr/handler/tagger/TaggerTest.java |    22 +-
 .../apache/solr/handler/tagger/TaggerTestCase.java |    11 +-
 .../tagger/WordLengthTaggingFilterFactory.java     |     5 -
 .../apache/solr/highlight/DummyHighlighter.java    |     1 -
 .../org/apache/solr/highlight/HighlighterTest.java |    20 +-
 .../solr/highlight/TestUnifiedSolrHighlighter.java |    16 +-
 .../apache/solr/index/hdfs/CheckHdfsIndexTest.java |     6 -
 .../org/apache/solr/logging/TestLogWatcher.java    |     1 -
 .../org/apache/solr/metrics/JvmMetricsTest.java    |     8 +-
 .../org/apache/solr/metrics/MetricsConfigTest.java |    13 +-
 .../apache/solr/metrics/SolrMetricManagerTest.java |    11 +-
 .../solr/metrics/SolrMetricsIntegrationTest.java   |     7 +-
 .../reporters/SolrGraphiteReporterTest.java        |     5 +-
 .../reporters/SolrJmxReporterCloudTest.java        |     7 +-
 .../metrics/reporters/SolrSlf4jReporterTest.java   |     4 +-
 .../reporters/solr/SolrCloudReportersTest.java     |     6 +-
 .../reporters/solr/SolrShardReporterTest.java      |    12 -
 .../solr/parser/SolrQueryParserBaseTest.java       |   137 -
 .../src/test/org/apache/solr/pkg/TestPackages.java |   318 +-
 .../org/apache/solr/request/SimpleFacetsTest.java  |     3 +-
 .../test/org/apache/solr/request/TestFaceting.java |    25 -
 .../apache/solr/request/TestIntervalFaceting.java  |     2 +-
 .../org/apache/solr/request/TestWriterPerf.java    |     5 +-
 .../solr/request/macro/TestMacroExpander.java      |     2 -
 .../org/apache/solr/response/JSONWriterTest.java   |    10 +-
 .../org/apache/solr/response/SmileWriterTest.java  |    11 -
 .../solr/response/TestBinaryResponseWriter.java    |     2 -
 .../solr/response/TestGeoJSONResponseWriter.java   |     4 -
 .../solr/response/TestGraphMLResponseWriter.java   |    22 +-
 .../response/TestJavabinTupleStreamParser.java     |     7 +-
 .../response/TestPHPSerializedResponseWriter.java  |     2 +-
 .../org/apache/solr/response/TestPushWriter.java   |    65 +-
 .../solr/response/TestRawResponseWriter.java       |     2 -
 .../solr/response/TestRetrieveFieldsOptimizer.java |     3 -
 .../solr/response/TestSolrQueryResponse.java       |     1 -
 .../transform/TestChildDocTransformer.java         |    28 +-
 .../TestChildDocTransformerHierarchy.java          |     1 -
 .../apache/solr/rest/schema/TestBulkSchemaAPI.java |    40 +-
 .../apache/solr/schema/ChangedSchemaMergeTest.java |     6 +-
 .../apache/solr/schema/CurrencyFieldTypeTest.java  |    94 +-
 .../test/org/apache/solr/schema/DateFieldTest.java |     2 +-
 .../test/org/apache/solr/schema/DocValuesTest.java |     4 +-
 .../schema/ManagedSchemaRoundRobinCloudTest.java   |     1 +
 .../schema/OpenExchangeRatesOrgProviderTest.java   |     2 +-
 .../PreAnalyzedFieldManagedSchemaCloudTest.java    |     1 +
 .../apache/solr/schema/PrimitiveFieldTypeTest.java |     2 +-
 .../test/org/apache/solr/schema/RankFieldTest.java |   285 -
 .../solr/schema/ResolveAnalyzerByNameTest.java     |     7 -
 .../apache/solr/schema/SchemaApiFailureTest.java   |     5 +-
 .../solr/schema/SpatialRPTFieldTypeTest.java       |     2 -
 .../solr/schema/TestBulkSchemaConcurrent.java      |    23 +-
 .../apache/solr/schema/TestCloudManagedSchema.java |     3 -
 .../org/apache/solr/schema/TestManagedSchema.java  |     3 -
 .../apache/solr/schema/TestManagedSchemaAPI.java   |     2 +-
 .../solr/schema/TestManagedSchemaThreadSafety.java |     5 +-
 .../org/apache/solr/schema/TestPointFields.java    |     1 -
 .../apache/solr/schema/TestSortableTextField.java  |     6 +-
 .../solr/schema/TestUseDocValuesAsStored2.java     |     1 -
 .../apache/solr/schema/WrappedIntPointField.java   |    20 +-
 .../apache/solr/schema/WrappedTrieIntField.java    |     1 -
 .../solr/search/AnalyticsMergeStrategyTest.java    |     4 -
 .../solr/search/AnalyticsTestQParserPlugin.java    |    11 -
 .../solr/search/CurrencyRangeFacetCloudTest.java   |    93 +-
 .../org/apache/solr/search/LargeFieldTest.java     |     1 -
 .../apache/solr/search/MaxScoreCollectorTest.java  |    91 -
 .../org/apache/solr/search/MergeStrategyTest.java  |     1 -
 .../apache/solr/search/MockSearchComponent.java    |     2 +-
 .../org/apache/solr/search/QueryEqualityTest.java  |    28 +-
 .../apache/solr/search/RankQParserPluginTest.java  |   258 -
 .../apache/solr/search/RankQueryTestPlugin.java    |    25 +-
 .../apache/solr/search/SolrIndexSearcherTest.java  |   330 -
 .../solr/search/TestAddFieldRealTimeGet.java       |     8 +-
 .../solr/search/TestCollapseQParserPlugin.java     |   100 +-
 .../test/org/apache/solr/search/TestDocSet.java    |     3 +-
 .../solr/search/TestExtendedDismaxParser.java      |    60 +-
 .../apache/solr/search/TestHashQParserPlugin.java  |    26 +-
 .../org/apache/solr/search/TestIndexSearcher.java  |     8 +-
 .../solr/search/TestMaxScoreQueryParser.java       |     1 -
 .../solr/search/TestReRankQParserPlugin.java       |    95 -
 .../org/apache/solr/search/TestRealTimeGet.java    |    20 +-
 .../test/org/apache/solr/search/TestRecovery.java  |    10 -
 .../org/apache/solr/search/TestRecoveryHdfs.java   |     9 -
 .../org/apache/solr/search/TestReloadDeadlock.java |     2 +-
 .../org/apache/solr/search/TestSmileRequest.java   |     2 -
 .../org/apache/solr/search/TestSolrCachePerf.java  |     3 -
 .../src/test/org/apache/solr/search/TestSolrJ.java |     2 -
 .../apache/solr/search/TestSolrQueryParser.java    |     1 -
 .../src/test/org/apache/solr/search/TestSort.java  |     5 +-
 .../org/apache/solr/search/TestStressRecovery.java |     2 -
 .../org/apache/solr/search/TestStressReorder.java  |     6 +-
 .../apache/solr/search/TestStressUserVersions.java |     8 +-
 .../org/apache/solr/search/TestStressVersions.java |     2 -
 .../apache/solr/search/TestTermsQParserPlugin.java |     6 -
 .../org/apache/solr/search/facet/DebugAgg.java     |    16 +-
 ...stributedFacetSimpleRefinementLongTailTest.java |    49 +-
 .../solr/search/facet/RangeFacetCloudTest.java     |    56 +-
 .../search/facet/SpatialHeatmapFacetsTest.java     |     5 -
 .../search/facet/TestCloudJSONFacetJoinDomain.java |    45 +-
 .../solr/search/facet/TestCloudJSONFacetSKG.java   |   342 +-
 .../search/facet/TestCloudJSONFacetSKGEquiv.java   |  1233 --
 .../solr/search/facet/TestJsonFacetErrors.java     |   400 -
 .../solr/search/facet/TestJsonFacetRefinement.java |    97 +-
 .../apache/solr/search/facet/TestJsonFacets.java   |   828 +-
 .../search/facet/TestJsonFacetsStatsParsing.java   |     2 -
 .../facet/TestJsonFacetsWithNestedObjects.java     |    70 +-
 .../solr/search/facet/TestJsonRangeFacets.java     |   435 -
 .../solr/search/function/NvlValueSourceParser.java |     2 +-
 .../solr/search/function/TestFunctionQuery.java    |    32 -
 .../function/TestMinMaxOnMultiValuedField.java     |    13 +-
 .../search/join/CrossCollectionJoinQueryTest.java  |   280 -
 .../solr/search/join/TestCloudNestedDocsSort.java  |     4 +-
 .../solr/search/join/TestNestedDocsSort.java       |     1 -
 .../solr/search/join/TestScoreJoinQPNoScore.java   |    27 +-
 .../solr/search/join/TestScoreJoinQPScore.java     |    18 +-
 .../org/apache/solr/search/join/XCJFQueryTest.java |   280 +
 .../join/another/BJQFilterAccessibleTest.java      |     2 +-
 .../apache/solr/search/json/TestJsonRequest.java   |    70 +-
 .../solr/search/mlt/CloudMLTQParserTest.java       |     1 -
 .../similarities/TestBooleanSimilarityFactory.java |    39 -
 .../apache/solr/search/stats/TestDistribIDF.java   |     2 +
 .../solr/security/AuditLoggerIntegrationTest.java  |    20 +-
 .../BaseTestRuleBasedAuthorizationPlugin.java      |   617 -
 .../solr/security/BasicAuthIntegrationTest.java    |    20 +-
 .../solr/security/BasicAuthOnSingleNodeTest.java   |    45 +-
 .../solr/security/BasicAuthStandaloneTest.java     |     2 +-
 .../solr/security/CallbackAuditLoggerPlugin.java   |     4 +-
 .../apache/solr/security/CertAuthPluginTest.java   |    79 -
 .../security/HttpParamDelegationTokenPlugin.java   |     2 +-
 .../security/JWTAuthPluginIntegrationTest.java     |     6 +-
 .../apache/solr/security/JWTAuthPluginTest.java    |    22 +-
 .../security/JWTVerificationkeyResolverTest.java   |     4 +-
 .../solr/security/MockAuditLoggerPlugin.java       |     4 +-
 .../solr/security/MockAuthenticationPlugin.java    |    25 +-
 .../solr/security/MockAuthorizationPlugin.java     |     2 +-
 .../solr/security/PrincipalWithUserRoles.java      |    91 -
 .../solr/security/TestAuthorizationFramework.java  |     6 +-
 ...stExternalRoleRuleBasedAuthorizationPlugin.java |    78 -
 .../security/TestRuleBasedAuthorizationPlugin.java |   585 +
 .../security/TestSha256AuthenticationProvider.java |     4 -
 .../solr/security/hadoop/ImpersonationUtil.java    |     1 -
 .../apache/solr/security/hadoop/KerberosUtils.java |    93 -
 .../hadoop/TestDelegationWithHadoopAuth.java       |    16 +-
 .../hadoop/TestImpersonationWithHadoopAuth.java    |    13 +-
 .../TestRuleBasedAuthorizationWithKerberos.java    |    81 -
 .../hadoop/TestSolrCloudWithHadoopAuthPlugin.java  |    63 +-
 .../security/hadoop/TestZkAclsWithHadoopAuth.java  |     1 -
 .../solr/servlet/HttpSolrCallGetCoreTest.java      |     1 +
 .../apache/solr/servlet/SolrRequestParserTest.java |     2 -
 .../solr/servlet/TestRequestRateLimiter.java       |   235 -
 .../solr/spelling/DirectSolrSpellCheckerTest.java  |     3 -
 .../solr/spelling/FileBasedSpellCheckerTest.java   |     7 -
 .../solr/spelling/IndexBasedSpellCheckerTest.java  |     8 -
 .../solr/spelling/SpellCheckCollatorTest.java      |     9 -
 .../SpellCheckCollatorWithCollapseTest.java        |    37 +-
 .../solr/spelling/SpellingQueryConverterTest.java  |     6 -
 .../suggest/RandomTestDictionaryFactory.java       |     6 +-
 .../solr/spelling/suggest/SuggesterTest.java       |     2 -
 .../solr/store/blockcache/BlockCacheTest.java      |    16 +-
 .../apache/solr/store/hdfs/HdfsDirectoryTest.java  |     6 +-
 .../solr/store/hdfs/HdfsLockFactoryTest.java       |     4 -
 .../org/apache/solr/update/AddBlockUpdateTest.java |     6 +-
 .../org/apache/solr/update/CdcrUpdateLogTest.java  |     8 -
 .../solr/update/DirectUpdateHandlerTest.java       |    15 +-
 .../apache/solr/update/MaxSizeAutoCommitTest.java  |     2 +-
 .../solr/update/MockStreamingSolrClients.java      |     2 +-
 .../apache/solr/update/MockingHttp2SolrClient.java |    26 +-
 .../test/org/apache/solr/update/PeerSyncTest.java  |     1 -
 .../solr/update/PeerSyncWithBufferUpdatesTest.java |     1 -
 .../PeerSyncWithIndexFingerprintCachingTest.java   |     2 -
 ...ncWithLeaderAndIndexFingerprintCachingTest.java |     1 -
 .../apache/solr/update/PeerSyncWithLeaderTest.java |     1 -
 .../org/apache/solr/update/SoftAutoCommitTest.java |     2 +-
 .../apache/solr/update/SolrCmdDistributorTest.java |     2 +-
 .../apache/solr/update/SolrIndexConfigTest.java    |    31 +-
 .../apache/solr/update/SolrIndexSplitterTest.java  |     3 -
 .../org/apache/solr/update/TestHdfsUpdateLog.java  |     4 -
 .../update/TestInPlaceUpdateWithRouteField.java    |     1 +
 .../solr/update/TestInPlaceUpdatesDistrib.java     |    81 +-
 .../solr/update/TestInPlaceUpdatesStandalone.java  |     1 -
 .../solr/update/TestIndexingPerformance.java       |     8 +-
 .../solr/update/TestNestedUpdateProcessor.java     |     2 -
 .../test/org/apache/solr/update/TestUpdate.java    |     2 +-
 .../test/org/apache/solr/update/UpdateLogTest.java |     1 -
 .../processor/AtomicUpdateRemovalJavabinTest.java  |     2 +
 .../solr/update/processor/AtomicUpdatesTest.java   |    15 +-
 .../CategoryRoutedAliasUpdateProcessorTest.java    |    24 +-
 .../ClassificationUpdateProcessorFactoryTest.java  |     4 -
 ...assificationUpdateProcessorIntegrationTest.java |     2 +
 .../ClassificationUpdateProcessorTest.java         |     5 -
 .../CustomUpdateRequestProcessorFactory.java       |     3 +-
 .../DimensionalRoutedAliasUpdateProcessorTest.java |    12 +-
 .../IgnoreLargeDocumentProcessorFactoryTest.java   |     1 -
 .../update/processor/NestedAtomicUpdateTest.java   |     1 -
 .../processor/RoutedAliasUpdateProcessorTest.java  |     5 +-
 .../apache/solr/update/processor/RuntimeUrp.java   |    40 +
 .../SignatureUpdateProcessorFactoryTest.java       |     1 -
 .../SkipExistingDocumentsProcessorFactoryTest.java |     1 -
 .../processor/TestDocBasedVersionConstraints.java  |     4 +-
 .../processor/TestNamedUpdateProcessors.java       |   162 +
 .../TimeRoutedAliasUpdateProcessorTest.java        |    34 +-
 .../processor/TolerantUpdateProcessorTest.java     |     2 +-
 .../processor/TrackingUpdateProcessorFactory.java  |     2 +-
 .../update/processor/URLClassifyProcessorTest.java |     2 -
 .../UpdateRequestProcessorFactoryTest.java         |     2 +-
 .../test/org/apache/solr/util/DynamicMapsTest.java |    90 -
 .../org/apache/solr/util/MockCoreContainer.java    |     2 +-
 .../org/apache/solr/util/OrderedExecutorTest.java  |    28 +-
 .../org/apache/solr/util/SolrLogPostToolTest.java  |    62 +-
 .../org/apache/solr/util/SolrPluginUtilsTest.java  |     2 +-
 .../org/apache/solr/util/TestCircuitBreaker.java   |   243 -
 .../test/org/apache/solr/util/TestExportTool.java  |     2 +
 .../test/org/apache/solr/util/TestRTimerTree.java  |     3 -
 .../apache/solr/util/TestSolrCLIRunExample.java    |   132 +-
 .../solr/util/TestSolrJacksonAnnotation.java       |     2 -
 .../src/test/org/apache/solr/util/TestUtils.java   |    11 +-
 .../apache/solr/util/stats/MetricUtilsTest.java    |    10 -
 .../solr/util/tracing/TestHttpServletCarrier.java  |     2 +-
 solr/example/README.md                             |    95 -
 solr/example/README.txt                            |    78 +
 solr/example/build.gradle                          |     4 +-
 solr/example/example-DIH/README.md                 |    55 -
 solr/example/example-DIH/README.txt                |    49 +
 .../example-DIH/solr/db/conf/solrconfig.xml        |     4 +-
 .../example-DIH/solr/mail/conf/solrconfig.xml      |     4 +-
 .../example-DIH/solr/solr/conf/solrconfig.xml      |     4 +-
 solr/example/files/README.md                       |   167 -
 solr/example/files/README.txt                      |   152 +
 solr/example/files/conf/solrconfig.xml             |    42 +-
 solr/example/films/README.md                       |   161 -
 solr/example/films/README.txt                      |   138 +
 solr/licenses/caffeine-2.8.0.jar.sha1              |     1 +
 solr/licenses/caffeine-2.8.4.jar.sha1              |     1 -
 solr/licenses/commons-cli-1.2.jar.sha1             |     1 +
 solr/licenses/commons-cli-1.4.jar.sha1             |     1 -
 solr/licenses/commons-collections4-4.2.jar.sha1    |     1 +
 solr/licenses/commons-collections4-4.4.jar.sha1    |     1 -
 solr/licenses/commons-fileupload-1.3.3.jar.sha1    |     1 +
 ...-ASL.txt => commons-fileupload-LICENSE-ASL.txt} |     0
 solr/licenses/commons-fileupload-NOTICE.txt        |     5 +
 solr/licenses/commons-lang-2.6.jar.sha1            |     1 -
 solr/licenses/commons-lang-LICENSE-ASL.txt         |   202 -
 solr/licenses/commons-lang-NOTICE.txt              |     5 -
 solr/licenses/hamcrest-2.2.jar.sha1                |     1 -
 solr/licenses/hamcrest-core-1.3.jar.sha1           |     1 +
 ...CENSE-BSD.txt => hamcrest-core-LICENSE-BSD.txt} |     0
 ...amcrest-NOTICE.txt => hamcrest-core-NOTICE.txt} |     0
 solr/licenses/hppc-0.8.1.jar.sha1                  |     1 +
 solr/licenses/hppc-0.8.2.jar.sha1                  |     1 -
 .../http2-client-9.4.24.v20191120.jar.sha1         |     1 +
 .../http2-client-9.4.27.v20200227.jar.sha1         |     1 -
 .../http2-common-9.4.24.v20191120.jar.sha1         |     1 +
 .../http2-common-9.4.27.v20200227.jar.sha1         |     1 -
 .../licenses/http2-hpack-9.4.24.v20191120.jar.sha1 |     1 +
 .../licenses/http2-hpack-9.4.27.v20200227.jar.sha1 |     1 -
 ...http-client-transport-9.4.24.v20191120.jar.sha1 |     1 +
 ...http-client-transport-9.4.27.v20200227.jar.sha1 |     1 -
 .../http2-server-9.4.24.v20191120.jar.sha1         |     1 +
 .../http2-server-9.4.27.v20200227.jar.sha1         |     1 -
 .../jetty-alpn-client-9.4.24.v20191120.jar.sha1    |     1 +
 .../jetty-alpn-client-9.4.27.v20200227.jar.sha1    |     1 -
 ...etty-alpn-java-client-9.4.24.v20191120.jar.sha1 |     1 +
 ...etty-alpn-java-client-9.4.27.v20200227.jar.sha1 |     1 -
 ...etty-alpn-java-server-9.4.24.v20191120.jar.sha1 |     1 +
 ...etty-alpn-java-server-9.4.27.v20200227.jar.sha1 |     1 -
 .../jetty-alpn-server-9.4.24.v20191120.jar.sha1    |     1 +
 .../jetty-alpn-server-9.4.27.v20200227.jar.sha1    |     1 -
 .../jetty-client-9.4.24.v20191120.jar.sha1         |     1 +
 .../jetty-client-9.4.27.v20200227.jar.sha1         |     1 -
 .../jetty-continuation-9.4.24.v20191120.jar.sha1   |     1 +
 .../jetty-continuation-9.4.27.v20200227.jar.sha1   |     1 -
 .../jetty-deploy-9.4.24.v20191120.jar.sha1         |     1 +
 .../jetty-deploy-9.4.27.v20200227.jar.sha1         |     1 -
 solr/licenses/jetty-http-9.4.24.v20191120.jar.sha1 |     1 +
 solr/licenses/jetty-http-9.4.27.v20200227.jar.sha1 |     1 -
 solr/licenses/jetty-io-9.4.24.v20191120.jar.sha1   |     1 +
 solr/licenses/jetty-io-9.4.27.v20200227.jar.sha1   |     1 -
 solr/licenses/jetty-jmx-9.4.24.v20191120.jar.sha1  |     1 +
 solr/licenses/jetty-jmx-9.4.27.v20200227.jar.sha1  |     1 -
 .../jetty-rewrite-9.4.24.v20191120.jar.sha1        |     1 +
 .../jetty-rewrite-9.4.27.v20200227.jar.sha1        |     1 -
 .../jetty-security-9.4.24.v20191120.jar.sha1       |     1 +
 .../jetty-security-9.4.27.v20200227.jar.sha1       |     1 -
 .../jetty-server-9.4.24.v20191120.jar.sha1         |     1 +
 .../jetty-server-9.4.27.v20200227.jar.sha1         |     1 -
 .../jetty-servlet-9.4.24.v20191120.jar.sha1        |     1 +
 .../jetty-servlet-9.4.27.v20200227.jar.sha1        |     1 -
 .../jetty-servlets-9.4.24.v20191120.jar.sha1       |     1 +
 .../jetty-servlets-9.4.27.v20200227.jar.sha1       |     1 -
 .../jetty-start-9.4.24.v20191120-shaded.jar.sha1   |     1 +
 .../jetty-start-9.4.27.v20200227-shaded.jar.sha1   |     1 -
 solr/licenses/jetty-util-9.4.24.v20191120.jar.sha1 |     1 +
 solr/licenses/jetty-util-9.4.27.v20200227.jar.sha1 |     1 -
 .../jetty-webapp-9.4.24.v20191120.jar.sha1         |     1 +
 .../jetty-webapp-9.4.27.v20200227.jar.sha1         |     1 -
 solr/licenses/jetty-xml-9.4.24.v20191120.jar.sha1  |     1 +
 solr/licenses/jetty-xml-9.4.27.v20200227.jar.sha1  |     1 -
 solr/licenses/log4j-1.2-api-2.11.2.jar.sha1        |     1 +
 solr/licenses/log4j-1.2-api-2.13.2.jar.sha1        |     1 -
 solr/licenses/log4j-api-2.11.2.jar.sha1            |     1 +
 solr/licenses/log4j-api-2.13.2.jar.sha1            |     1 -
 solr/licenses/log4j-core-2.11.2.jar.sha1           |     1 +
 solr/licenses/log4j-core-2.13.2.jar.sha1           |     1 -
 solr/licenses/log4j-slf4j-impl-2.11.2.jar.sha1     |     1 +
 solr/licenses/log4j-slf4j-impl-2.13.2.jar.sha1     |     1 -
 solr/licenses/log4j-web-2.11.2.jar.sha1            |     1 +
 solr/licenses/log4j-web-2.13.2.jar.sha1            |     1 -
 solr/licenses/metrics-core-4.1.2.jar.sha1          |     1 +
 solr/licenses/metrics-core-4.1.5.jar.sha1          |     1 -
 solr/licenses/metrics-graphite-4.1.2.jar.sha1      |     1 +
 solr/licenses/metrics-graphite-4.1.5.jar.sha1      |     1 -
 solr/licenses/metrics-jetty9-4.1.2.jar.sha1        |     1 +
 solr/licenses/metrics-jetty9-4.1.5.jar.sha1        |     1 -
 solr/licenses/metrics-jmx-4.1.2.jar.sha1           |     1 +
 solr/licenses/metrics-jmx-4.1.5.jar.sha1           |     1 -
 solr/licenses/metrics-jvm-4.1.2.jar.sha1           |     1 +
 solr/licenses/metrics-jvm-4.1.5.jar.sha1           |     1 -
 .../morfologik-ukrainian-search-3.9.0.jar.sha1     |     1 +
 .../morfologik-ukrainian-search-4.9.1.jar.sha1     |     1 -
 solr/licenses/netty-buffer-4.1.29.Final.jar.sha1   |     1 +
 solr/licenses/netty-buffer-4.1.50.Final.jar.sha1   |     1 -
 solr/licenses/netty-codec-4.1.29.Final.jar.sha1    |     1 +
 solr/licenses/netty-codec-4.1.50.Final.jar.sha1    |     1 -
 solr/licenses/netty-common-4.1.29.Final.jar.sha1   |     1 +
 solr/licenses/netty-common-4.1.50.Final.jar.sha1   |     1 -
 solr/licenses/netty-handler-4.1.29.Final.jar.sha1  |     1 +
 solr/licenses/netty-handler-4.1.50.Final.jar.sha1  |     1 -
 solr/licenses/netty-resolver-4.1.29.Final.jar.sha1 |     1 +
 solr/licenses/netty-resolver-4.1.50.Final.jar.sha1 |     1 -
 .../licenses/netty-transport-4.1.29.Final.jar.sha1 |     1 +
 .../licenses/netty-transport-4.1.50.Final.jar.sha1 |     1 -
 ...ty-transport-native-epoll-4.1.29.Final.jar.sha1 |     1 +
 ...ty-transport-native-epoll-4.1.50.Final.jar.sha1 |     1 -
 ...nsport-native-unix-common-4.1.29.Final.jar.sha1 |     1 +
 ...nsport-native-unix-common-4.1.50.Final.jar.sha1 |     1 -
 solr/licenses/org.restlet-2.4.0.jar.sha1           |     1 +
 solr/licenses/org.restlet-2.4.3.jar.sha1           |     1 -
 .../org.restlet.ext.servlet-2.4.0.jar.sha1         |     1 +
 .../org.restlet.ext.servlet-2.4.3.jar.sha1         |     1 -
 solr/licenses/snappy-java-1.1.7.6.jar.sha1         |     1 -
 solr/licenses/snappy-java-NOTICE.txt               |    17 -
 solr/licenses/start.jar.sha1                       |     2 +-
 solr/licenses/tika-core-1.23.jar.sha1              |     1 +
 solr/licenses/tika-core-1.24.jar.sha1              |     1 -
 solr/licenses/tika-java7-1.23.jar.sha1             |     1 +
 solr/licenses/tika-java7-1.24.jar.sha1             |     1 -
 solr/licenses/tika-parsers-1.23.jar.sha1           |     1 +
 solr/licenses/tika-parsers-1.24.jar.sha1           |     1 -
 solr/licenses/tika-xmp-1.23.jar.sha1               |     1 +
 solr/licenses/tika-xmp-1.24.jar.sha1               |     1 -
 solr/licenses/zookeeper-3.5.5.jar.sha1             |     1 +
 solr/licenses/zookeeper-3.6.1.jar.sha1             |     1 -
 solr/licenses/zookeeper-jute-3.5.5.jar.sha1        |     1 +
 solr/licenses/zookeeper-jute-3.6.1.jar.sha1        |     1 -
 solr/packaging/build.gradle                        |    14 +-
 solr/server/README.md                              |   114 -
 solr/server/README.txt                             |   109 +
 solr/server/build.gradle                           |     4 +-
 solr/server/etc/jetty.xml                          |     8 +-
 solr/server/resources/log4j2-console.xml           |    28 +-
 solr/server/resources/log4j2.xml                   |    72 +-
 solr/server/solr/README.md                         |    79 -
 solr/server/solr/README.txt                        |    77 +
 .../solr/configsets/_default/conf/managed-schema   |     7 -
 .../solr/configsets/_default/conf/solrconfig.xml   |    63 +-
 .../clustering/carrot2/{README.md => README.txt}   |     0
 .../conf/solrconfig.xml                            |    48 +-
 .../conf/velocity/README.md                        |   116 -
 .../conf/velocity/README.txt                       |   101 +
 solr/server/solr/solr.xml                          |     1 -
 ..._REQUIREMENTS.md => SYSTEM_REQUIREMENTS.mdtext} |     0
 solr/site/index.template.md                        |    37 -
 solr/site/online-link.template.md                  |    19 -
 solr/solr-ref-guide/build.gradle                   |     5 +-
 solr/solr-ref-guide/build.xml                      |     1 +
 solr/solr-ref-guide/src/_config.yml.template       |     3 +-
 solr/solr-ref-guide/src/_includes/head.html        |    26 +-
 solr/solr-ref-guide/src/_includes/head_print.html  |    29 +
 .../src/_includes/mathjax-support.html             |    22 -
 solr/solr-ref-guide/src/_includes/sidebar.html     |    35 +-
 solr/solr-ref-guide/src/_includes/taglogic.html    |    22 +
 solr/solr-ref-guide/src/_includes/toc.html         |     9 +
 solr/solr-ref-guide/src/_includes/topnav.html      |    39 +-
 solr/solr-ref-guide/src/_layouts/default.html      |    35 +-
 .../solr-ref-guide/src/_layouts/default_print.html |    25 +
 solr/solr-ref-guide/src/_layouts/home.html         |    27 +-
 solr/solr-ref-guide/src/_layouts/page.html         |    29 +-
 solr/solr-ref-guide/src/_layouts/page_print.html   |    15 +
 solr/solr-ref-guide/src/_templates/open.html.slim  |     2 +-
 solr/solr-ref-guide/src/_templates/ulist.html.slim |     2 +-
 .../adding-custom-plugins-in-solrcloud-mode.adoc   |   333 +
 solr/solr-ref-guide/src/aliases.adoc               |     9 +-
 .../src/analytics-expression-sources.adoc          |     1 +
 .../src/analytics-mapping-functions.adoc           |     1 +
 .../src/analytics-reduction-functions.adoc         |     3 +-
 solr/solr-ref-guide/src/analytics.adoc             |     3 +-
 .../authentication-and-authorization-plugins.adoc  |     2 +-
 solr/solr-ref-guide/src/cdcr-api.adoc              |     8 -
 solr/solr-ref-guide/src/cdcr-architecture.adoc     |     8 -
 solr/solr-ref-guide/src/cdcr-config.adoc           |     9 -
 solr/solr-ref-guide/src/cdcr-operations.adoc       |     8 -
 .../src/cert-authentication-plugin.adoc            |    61 -
 solr/solr-ref-guide/src/circuit-breakers.adoc      |    68 -
 solr/solr-ref-guide/src/cloud-screens.adoc         |     2 +-
 .../src/cluster-node-management.adoc               |    57 +-
 .../src/collapse-and-expand-results.adoc           |    28 +-
 solr/solr-ref-guide/src/collection-aliasing.adoc   |     5 +-
 solr/solr-ref-guide/src/collection-management.adoc |    68 +-
 .../src/collection-specific-tools.adoc             |     2 +-
 solr/solr-ref-guide/src/collections-api.adoc       |     2 +-
 .../solr-ref-guide/src/colocating-collections.adoc |    76 +
 .../combining-distribution-and-replication.adoc    |    12 +-
 .../solr-ref-guide/src/command-line-utilities.adoc |    27 +-
 .../src/common-query-parameters.adoc               |    54 +-
 solr/solr-ref-guide/src/config-api.adoc            |    42 +-
 solr/solr-ref-guide/src/config-sets.adoc           |     4 +-
 solr/solr-ref-guide/src/configsets-api.adoc        |     2 +-
 solr/solr-ref-guide/src/coreadmin-api.adoc         |     8 +-
 .../src/cross-data-center-replication-cdcr.adoc    |    14 -
 solr/solr-ref-guide/src/css/customstyles.css       |   919 ++
 solr/solr-ref-guide/src/css/decoration.css         |   254 -
 solr/solr-ref-guide/src/css/font-awesome.min.css   |     4 +
 solr/solr-ref-guide/src/css/lavish-bootstrap.css   |  5423 ++++++++
 solr/solr-ref-guide/src/css/navs.css               |   366 -
 solr/solr-ref-guide/src/css/printstyles.css        |   160 +
 solr/solr-ref-guide/src/css/ref-guide.css          |  2823 ++--
 solr/solr-ref-guide/src/css/search.css             |    47 -
 solr/solr-ref-guide/src/css/theme-solr.css         |   147 +
 ...datadir-and-directoryfactory-in-solrconfig.adoc |     2 +-
 solr/solr-ref-guide/src/dataimport-screen.adoc     |     2 -
 solr/solr-ref-guide/src/distributed-requests.adoc  |     6 +-
 .../distributed-search-with-index-sharding.adoc    |     2 +-
 solr/solr-ref-guide/src/enabling-ssl.adoc          |   241 +-
 solr/solr-ref-guide/src/exporting-result-sets.adoc |    30 -
 solr/solr-ref-guide/src/filter-descriptions.adoc   |    46 +-
 .../glyphicons/glyphicons-halflings-regular.eot    |   Bin 0 -> 20127 bytes
 .../glyphicons/glyphicons-halflings-regular.svg    |   288 +
 .../glyphicons/glyphicons-halflings-regular.ttf    |   Bin 0 -> 45404 bytes
 .../glyphicons/glyphicons-halflings-regular.woff   |   Bin 0 -> 23424 bytes
 .../glyphicons/glyphicons-halflings-regular.woff2  |   Bin 0 -> 18028 bytes
 .../src/fonts/mplus1mn/mplus1mn-bold-ascii.ttf     |   Bin 0 -> 15868 bytes
 .../fonts/mplus1mn/mplus1mn-bold_italic-ascii.ttf  |   Bin 0 -> 15908 bytes
 .../src/fonts/mplus1mn/mplus1mn-italic-ascii.ttf   |   Bin 0 -> 15928 bytes
 .../mplus1mn/mplus1mn-regular-ascii-conums.ttf     |   Bin 0 -> 20024 bytes
 .../src/fonts/mplus1p-regular-fallback.ttf         |   Bin 0 -> 1405716 bytes
 solr/solr-ref-guide/src/format-of-solr-xml.adoc    |     4 -
 solr/solr-ref-guide/src/function-queries.adoc      |     1 +
 solr/solr-ref-guide/src/highlighting.adoc          |    13 +-
 solr/solr-ref-guide/src/how-solrcloud-works.adoc   |     4 +-
 solr/solr-ref-guide/src/how-to-contribute.adoc     |    16 +-
 .../overview-of-the-solr-admin-ui/dashboard.png    |   Bin 172175 -> 92750 bytes
 .../src/implicit-requesthandlers.adoc              |    28 +-
 solr/solr-ref-guide/src/index-replication.adoc     |   177 +-
 solr/solr-ref-guide/src/index.adoc                 |    37 +-
 .../src/indexing-nested-documents.adoc             |     2 +-
 solr/solr-ref-guide/src/installing-solr.adoc       |     2 +-
 solr/solr-ref-guide/src/js/customscripts.js        |    68 +-
 solr/solr-ref-guide/src/js/ref-guide-toc.js        |    36 +
 solr/solr-ref-guide/src/js/toc.js                  |    82 +
 solr/solr-ref-guide/src/json-facet-api.adoc        |    11 +-
 .../src/json-faceting-domain-changes.adoc          |     8 +-
 solr/solr-ref-guide/src/json-query-dsl.adoc        |    38 +-
 solr/solr-ref-guide/src/jvm-settings.adoc          |    20 +-
 .../src/jwt-authentication-plugin.adoc             |     3 +-
 .../src/kerberos-authentication-plugin.adoc        |     7 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |    20 +-
 solr/solr-ref-guide/src/learning-to-rank.adoc      |     2 +-
 solr/solr-ref-guide/src/libs.adoc                  |     2 +-
 .../src/major-changes-in-solr-7.adoc               |     3 +
 .../src/major-changes-in-solr-8.adoc               |    13 +-
 .../src/major-changes-in-solr-9.adoc               |   103 +-
 .../src/making-and-restoring-backups.adoc          |     2 +-
 .../src/meta-docs/asciidoc-syntax.adoc             |    45 -
 solr/solr-ref-guide/src/meta-docs/jekyll.adoc      |    72 +-
 solr/solr-ref-guide/src/meta-docs/publish.adoc     |    69 +-
 solr/solr-ref-guide/src/metrics-history.adoc       |     2 +-
 solr/solr-ref-guide/src/metrics-reporting.adoc     |     2 +-
 .../solr-ref-guide/src/migrate-to-policy-rule.adoc |   198 +
 .../src/near-real-time-searching.adoc              |     2 +-
 solr/solr-ref-guide/src/other-parsers.adoc         |   185 +-
 .../src/overview-of-the-solr-admin-ui.adoc         |    16 +-
 .../src/package-manager-internals.adoc             |   155 +-
 solr/solr-ref-guide/src/package-manager.adoc       |    56 +-
 .../src/query-settings-in-solrconfig.adoc          |    24 +-
 solr/solr-ref-guide/src/rate-limiters.adoc         |   131 -
 solr/solr-ref-guide/src/relevance.adoc             |     4 +-
 solr/solr-ref-guide/src/replica-management.adoc    |    91 +-
 solr/solr-ref-guide/src/replication-screen.adoc    |     8 +-
 .../solr-ref-guide/src/request-parameters-api.adoc |     4 +-
 ...andlers-and-searchcomponents-in-solrconfig.adoc |     9 -
 solr/solr-ref-guide/src/resource-loading.adoc      |     2 +-
 solr/solr-ref-guide/src/result-clustering.adoc     |     4 +-
 .../src/rule-based-authorization-plugin.adoc       |    86 +-
 .../src/rule-based-replica-placement.adoc          |     2 +-
 solr/solr-ref-guide/src/running-solr-on-hdfs.adoc  |    41 +-
 solr/solr-ref-guide/src/schema-api.adoc            |     1 +
 solr/solr-ref-guide/src/securing-solr.adoc         |     6 +-
 .../setting-up-an-external-zookeeper-ensemble.adoc |     2 -
 solr/solr-ref-guide/src/shard-management.adoc      |    11 +-
 .../src/shards-and-indexing-data-in-solrcloud.adoc |     4 +-
 .../src/solr-control-script-reference.adoc         |    12 +-
 solr/solr-ref-guide/src/solr-glossary.adoc         |     4 +-
 solr/solr-ref-guide/src/solr-plugins.adoc          |    19 +-
 solr/solr-ref-guide/src/solr-tracing.adoc          |     2 +-
 solr/solr-ref-guide/src/solr-tutorial.adoc         |     7 +-
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |   262 +-
 .../src/solrcloud-autoscaling-api.adoc             |   809 ++
 .../solrcloud-autoscaling-auto-add-replicas.adoc   |    73 +
 .../src/solrcloud-autoscaling-fault-tolerance.adoc |    59 +
 .../src/solrcloud-autoscaling-listeners.adoc       |   220 +
 .../src/solrcloud-autoscaling-overview.adoc        |    96 +
 .../solrcloud-autoscaling-policy-preferences.adoc  |   641 +
 .../src/solrcloud-autoscaling-trigger-actions.adoc |    88 +
 .../src/solrcloud-autoscaling-triggers.adoc        |   609 +
 solr/solr-ref-guide/src/solrcloud-autoscaling.adoc |    35 +
 solr/solr-ref-guide/src/solrcloud.adoc             |     8 +-
 solr/solr-ref-guide/src/spatial-search.adoc        |     2 +-
 solr/solr-ref-guide/src/spell-checking.adoc        |     2 +-
 solr/solr-ref-guide/src/stream-api.adoc            |   216 -
 .../src/stream-decorator-reference.adoc            |    15 +-
 .../src/stream-evaluator-reference.adoc            |     3 +-
 .../src/stream-source-reference.adoc               |    66 +-
 solr/solr-ref-guide/src/streaming-expressions.adoc |     6 +-
 solr/solr-ref-guide/src/suggestions-screen.adoc    |    40 +
 .../src/the-query-elevation-component.adoc         |     2 +-
 .../src/the-standard-query-parser.adoc             |     4 +-
 solr/solr-ref-guide/src/the-stats-component.adoc   |     2 +-
 solr/solr-ref-guide/src/the-tagger-handler.adoc    |    11 +-
 solr/solr-ref-guide/src/tokenizers.adoc            |     2 +-
 .../src/updatehandlers-in-solrconfig.adoc          |     2 +-
 ...ding-data-with-solr-cell-using-apache-tika.adoc |     1 +
 ...ta-store-data-with-the-data-import-handler.adoc |     4 +-
 solr/solr-ref-guide/src/using-solrj.adoc           |    33 +-
 ...ing-the-solr-administration-user-interface.adoc |     3 +-
 solr/solr-ref-guide/src/v2-api.adoc                |    12 +-
 solr/solrj/build.gradle                            |     2 -
 solr/solrj/ivy.xml                                 |     4 -
 .../org/apache/solr/client/solrj/SolrClient.java   |    16 +-
 .../org/apache/solr/client/solrj/SolrRequest.java  |    22 -
 .../org/apache/solr/client/solrj/SolrResponse.java |     1 -
 .../apache/solr/client/solrj/V2RequestSupport.java |     1 -
 .../client/solrj/beans/DocumentObjectBinder.java   |    13 +-
 .../client/solrj/cloud/AlreadyExistsException.java |    35 -
 .../client/solrj/cloud/BadVersionException.java    |    40 -
 .../client/solrj/cloud/DelegatingCloudManager.java |    89 -
 .../cloud/DelegatingClusterStateProvider.java      |   130 -
 .../client/solrj/cloud/DistribStateManager.java    |    11 +
 .../solr/client/solrj/cloud/NodeStateProvider.java |     5 +-
 .../solr/client/solrj/cloud/NotEmptyException.java |    35 -
 .../solr/client/solrj/cloud/SocketProxy.java       |    56 +-
 .../solr/client/solrj/cloud/SolrCloudManager.java  |     2 +-
 .../solr/client/solrj/cloud/VersionedData.java     |    99 -
 .../cloud/autoscaling/AddReplicaSuggester.java     |    81 +
 .../cloud/autoscaling/AlreadyExistsException.java  |    35 +
 .../solrj/cloud/autoscaling/AutoScalingConfig.java |   589 +
 .../cloud/autoscaling/BadVersionException.java     |    40 +
 .../solr/client/solrj/cloud/autoscaling/Cell.java  |    74 +
 .../client/solrj/cloud/autoscaling/Clause.java     |   829 ++
 .../solrj/cloud/autoscaling/ComputedType.java      |    99 +
 .../client/solrj/cloud/autoscaling/Condition.java  |   125 +
 .../solrj/cloud/autoscaling/CoresVariable.java     |   125 +
 .../cloud/autoscaling/DelegatingCloudManager.java  |    93 +
 .../DelegatingClusterStateProvider.java            |   130 +
 .../autoscaling/DelegatingDistribStateManager.java |   107 +
 .../autoscaling/DelegatingNodeStateProvider.java   |    56 +
 .../cloud/autoscaling/DeleteNodeSuggester.java     |    46 +
 .../cloud/autoscaling/DeleteReplicaSuggester.java  |    74 +
 .../solrj/cloud/autoscaling/FreeDiskVariable.java  |   175 +
 .../cloud/autoscaling/MoveReplicaSuggester.java    |   112 +
 .../solrj/cloud/autoscaling/NodeVariable.java      |    44 +
 .../solrj/cloud/autoscaling/NoneSuggester.java     |    39 +
 .../solrj/cloud/autoscaling/NotEmptyException.java |    35 +
 .../client/solrj/cloud/autoscaling/Operand.java    |   209 +
 .../client/solrj/cloud/autoscaling/Policy.java     |   664 +
 .../solrj/cloud/autoscaling/PolicyHelper.java      |   603 +
 .../client/solrj/cloud/autoscaling/Preference.java |   148 +
 .../client/solrj/cloud/autoscaling/RangeVal.java   |    61 +
 .../solrj/cloud/autoscaling/ReplicaCount.java      |   128 +
 .../solrj/cloud/autoscaling/ReplicaInfo.java       |   219 +
 .../solrj/cloud/autoscaling/ReplicaVariable.java   |   175 +
 .../solr/client/solrj/cloud/autoscaling/Row.java   |   379 +
 .../solrj/cloud/autoscaling/SealedClause.java      |    29 +
 .../cloud/autoscaling/SplitShardSuggester.java     |    65 +
 .../client/solrj/cloud/autoscaling/Suggester.java  |   518 +
 .../client/solrj/cloud/autoscaling/Suggestion.java |   130 +
 .../autoscaling/TriggerEventProcessorStage.java    |    30 +
 .../solrj/cloud/autoscaling/TriggerEventType.java  |    33 +
 .../cloud/autoscaling/UnsupportedSuggester.java    |    59 +
 .../client/solrj/cloud/autoscaling/Variable.java   |   406 +
 .../solrj/cloud/autoscaling/VariableBase.java      |   211 +
 .../solrj/cloud/autoscaling/VersionedData.java     |    94 +
 .../client/solrj/cloud/autoscaling/Violation.java  |   181 +
 .../cloud/autoscaling/WithCollectionVariable.java  |   166 +
 .../solrj/cloud/autoscaling/package-info.java      |    23 +
 .../client/solrj/impl/BaseCloudSolrClient.java     |   100 +-
 .../solrj/impl/BaseHttpClusterStateProvider.java   |    22 +-
 .../solr/client/solrj/impl/BaseHttpSolrClient.java |    10 +-
 .../client/solrj/impl/BinaryRequestWriter.java     |     6 +-
 .../client/solrj/impl/BinaryResponseParser.java    |     1 -
 .../solr/client/solrj/impl/CloudSolrClient.java    |     2 +-
 .../client/solrj/impl/ClusterStateProvider.java    |     2 -
 .../impl/ConcurrentUpdateHttp2SolrClient.java      |    25 +-
 .../solrj/impl/ConcurrentUpdateSolrClient.java     |    24 +-
 .../solrj/impl/DelegationTokenHttpSolrClient.java  |     2 +-
 .../solrj/impl/Http2ClusterStateProvider.java      |     1 -
 .../solr/client/solrj/impl/Http2SolrClient.java    |   274 +-
 .../solr/client/solrj/impl/HttpClientUtil.java     |    51 +-
 .../solrj/impl/HttpClusterStateProvider.java       |     1 -
 .../solr/client/solrj/impl/HttpSolrClient.java     |   171 +-
 .../client/solrj/impl/Krb5HttpClientBuilder.java   |    13 +-
 .../solr/client/solrj/impl/LBHttp2SolrClient.java  |   141 +-
 .../solr/client/solrj/impl/LBHttpSolrClient.java   |     8 +-
 .../solr/client/solrj/impl/LBSolrClient.java       |   208 +-
 .../client/solrj/impl/SolrClientCloudManager.java  |    20 +-
 .../solrj/impl/SolrClientNodeStateProvider.java    |   248 +-
 .../solrj/impl/SolrHttpRequestRetryHandler.java    |     4 +-
 .../solrj/impl/StreamingBinaryResponseParser.java  |     3 -
 .../solr/client/solrj/impl/XMLResponseParser.java  |     6 +-
 .../solrj/impl/ZkClientClusterStateProvider.java   |     3 +-
 .../client/solrj/impl/ZkDistribStateManager.java   |    33 +-
 .../client/solrj/io/ClassificationEvaluation.java  |     8 +-
 .../java/org/apache/solr/client/solrj/io/Lang.java |   104 +-
 .../apache/solr/client/solrj/io/ModelCache.java    |     2 +-
 .../solr/client/solrj/io/SolrClientCache.java      |     2 +-
 .../org/apache/solr/client/solrj/io/Tuple.java     |   185 +-
 .../solr/client/solrj/io/comp/FieldComparator.java |     5 -
 .../solr/client/solrj/io/eq/FieldEqualitor.java    |     3 -
 .../solr/client/solrj/io/eval/AkimaEvaluator.java  |     3 +-
 .../solr/client/solrj/io/eval/AnovaEvaluator.java  |    12 +-
 .../solr/client/solrj/io/eval/ArrayEvaluator.java  |     2 -
 .../solr/client/solrj/io/eval/AscEvaluator.java    |     1 -
 .../solr/client/solrj/io/eval/Attributes.java      |     1 -
 .../solrj/io/eval/BicubicSplineEvaluator.java      |     2 -
 .../solrj/io/eval/ChebyshevDistanceEvaluator.java  |     1 -
 .../solrj/io/eval/ChiSquareDataSetEvaluator.java   |    13 +-
 .../client/solrj/io/eval/ColumnAtEvaluator.java    |     2 +-
 .../client/solrj/io/eval/ConvexHullEvaluator.java  |     2 +-
 .../client/solrj/io/eval/ConvolutionEvaluator.java |     1 -
 .../client/solrj/io/eval/CorrelationEvaluator.java |     3 +-
 .../solrj/io/eval/CosineSimilarityEvaluator.java   |     2 -
 .../client/solrj/io/eval/CovarianceEvaluator.java  |     1 -
 .../solr/client/solrj/io/eval/DbscanEvaluator.java |     7 +-
 .../client/solrj/io/eval/DensityEvaluator.java     |     1 -
 .../client/solrj/io/eval/DescribeEvaluator.java    |    30 +-
 .../client/solrj/io/eval/DistanceEvaluator.java    |     1 -
 .../client/solrj/io/eval/DotProductEvaluator.java  |     2 -
 .../solr/client/solrj/io/eval/EBEAddEvaluator.java |     3 +-
 .../client/solrj/io/eval/EBEDivideEvaluator.java   |     3 +-
 .../client/solrj/io/eval/EBEMultiplyEvaluator.java |     3 +-
 .../client/solrj/io/eval/EBESubtractEvaluator.java |     3 +-
 .../solrj/io/eval/EnclosingDiskEvaluator.java      |     5 +-
 .../io/eval/EnumeratedDistributionEvaluator.java   |     6 -
 .../solrj/io/eval/EuclideanDistanceEvaluator.java  |     1 -
 .../solr/client/solrj/io/eval/FFTEvaluator.java    |     2 +-
 .../solrj/io/eval/FeatureSelectEvaluator.java      |     5 +-
 .../client/solrj/io/eval/FieldValueEvaluator.java  |     1 -
 .../client/solrj/io/eval/FindDelayEvaluator.java   |     2 -
 .../solrj/io/eval/FrequencyTableEvaluator.java     |    17 +-
 .../client/solrj/io/eval/FuzzyKmeansEvaluator.java |     7 +-
 .../solrj/io/eval/GTestDataSetEvaluator.java       |    13 +-
 .../client/solrj/io/eval/GaussFitEvaluator.java    |     1 -
 .../solrj/io/eval/GetBaryCenterEvaluator.java      |     2 +-
 .../client/solrj/io/eval/GetCacheEvaluator.java    |     2 -
 .../client/solrj/io/eval/GetCenterEvaluator.java   |     3 +-
 .../client/solrj/io/eval/GetClusterEvaluator.java  |     4 +-
 .../client/solrj/io/eval/GetRadiusEvaluator.java   |     1 -
 .../solrj/io/eval/GetSupportPointsEvaluator.java   |     4 +-
 .../client/solrj/io/eval/HarmonicFitEvaluator.java |     3 -
 .../client/solrj/io/eval/HistogramEvaluator.java   |    24 +-
 .../solr/client/solrj/io/eval/IFFTEvaluator.java   |     2 +-
 .../client/solrj/io/eval/IndexOfEvaluator.java     |     1 -
 .../client/solrj/io/eval/IntegrateEvaluator.java   |     2 +-
 .../solr/client/solrj/io/eval/IsNullEvaluator.java |     1 -
 .../solr/client/solrj/io/eval/KmeansEvaluator.java |     9 +-
 .../solr/client/solrj/io/eval/KnnEvaluator.java    |     9 +-
 .../solrj/io/eval/KnnRegressionEvaluator.java      |     3 -
 .../solrj/io/eval/KolmogorovSmirnovEvaluator.java  |    19 +-
 .../solr/client/solrj/io/eval/L1NormEvaluator.java |     1 -
 .../client/solrj/io/eval/LInfNormEvaluator.java    |     1 -
 .../solrj/io/eval/LatLonVectorsEvaluator.java      |     6 +-
 .../solr/client/solrj/io/eval/LerpEvaluator.java   |     3 +-
 .../client/solrj/io/eval/ListCacheEvaluator.java   |     8 -
 .../solr/client/solrj/io/eval/LoessEvaluator.java  |     3 +-
 .../solrj/io/eval/MannWhitneyUEvaluator.java       |    12 +-
 .../apache/solr/client/solrj/io/eval/Matrix.java   |     7 +-
 .../solr/client/solrj/io/eval/MatrixEvaluator.java |     1 -
 .../solrj/io/eval/MatrixMultiplyEvaluator.java     |     1 -
 .../solrj/io/eval/MeanDifferenceEvaluator.java     |     1 -
 .../solr/client/solrj/io/eval/MeanEvaluator.java   |     1 -
 .../solr/client/solrj/io/eval/MemsetEvaluator.java |     6 +-
 .../client/solrj/io/eval/MinMaxScaleEvaluator.java |     3 +-
 .../solr/client/solrj/io/eval/ModeEvaluator.java   |     3 +-
 .../client/solrj/io/eval/MonteCarloEvaluator.java  |    10 +-
 .../client/solrj/io/eval/MultiKmeansEvaluator.java |     6 +-
 .../MultiVariateNormalDistributionEvaluator.java   |     1 -
 .../client/solrj/io/eval/NaturalEvaluator.java     |     2 +-
 .../solr/client/solrj/io/eval/NormEvaluator.java   |     1 -
 .../solrj/io/eval/NormalizeSumEvaluator.java       |     3 +-
 .../client/solrj/io/eval/NotNullEvaluator.java     |     1 -
 .../solrj/io/eval/OLSRegressionEvaluator.java      |     7 +-
 .../solr/client/solrj/io/eval/OnesEvaluator.java   |     2 +-
 .../client/solrj/io/eval/OscillateEvaluator.java   |     2 -
 .../client/solrj/io/eval/OutliersEvaluator.java    |     8 +-
 .../client/solrj/io/eval/PairSortEvaluator.java    |     3 +-
 .../client/solrj/io/eval/PairedTTestEvaluator.java |    10 +-
 .../client/solrj/io/eval/PercentileEvaluator.java  |     3 +-
 .../solr/client/solrj/io/eval/PivotEvaluator.java  |    13 +-
 .../solrj/io/eval/PolyFitDerivativeEvaluator.java  |     2 -
 .../client/solrj/io/eval/PolyFitEvaluator.java     |     1 -
 .../solr/client/solrj/io/eval/PowerEvaluator.java  |     9 +-
 .../client/solrj/io/eval/PredictEvaluator.java     |    11 +-
 .../solr/client/solrj/io/eval/PrimesEvaluator.java |     2 +-
 .../client/solrj/io/eval/PutCacheEvaluator.java    |     1 -
 .../client/solrj/io/eval/RecursiveEvaluator.java   |    14 +-
 .../client/solrj/io/eval/RegressionEvaluator.java  |     2 -
 .../client/solrj/io/eval/RemoveCacheEvaluator.java |     2 -
 .../solr/client/solrj/io/eval/RepeatEvaluator.java |     2 +-
 .../solr/client/solrj/io/eval/RowAtEvaluator.java  |     2 +-
 .../solr/client/solrj/io/eval/SampleEvaluator.java |     2 +-
 .../client/solrj/io/eval/ScalarAddEvaluator.java   |     3 +-
 .../solr/client/solrj/io/eval/ScaleEvaluator.java  |     2 +-
 .../solrj/io/eval/SetColumnLabelsEvaluator.java    |     3 +-
 .../solrj/io/eval/SetRowLabelsEvaluator.java       |     3 +-
 .../client/solrj/io/eval/SetValueEvaluator.java    |     8 +-
 .../solr/client/solrj/io/eval/SplineEvaluator.java |     3 +-
 .../solr/client/solrj/io/eval/SplitEvaluator.java  |     2 +-
 .../solrj/io/eval/StandardDeviationEvaluator.java  |     3 +-
 .../client/solrj/io/eval/SumColumnsEvaluator.java  |     2 +-
 .../solrj/io/eval/SumDifferenceEvaluator.java      |     1 -
 .../client/solrj/io/eval/SumRowsEvaluator.java     |     2 +-
 .../solr/client/solrj/io/eval/SumSqEvaluator.java  |     1 -
 .../solr/client/solrj/io/eval/TTestEvaluator.java  |    13 +-
 .../client/solrj/io/eval/TermVectorsEvaluator.java |    16 +-
 .../solrj/io/eval/TimeDifferencingEvaluator.java   |    97 +-
 .../client/solrj/io/eval/TopFeaturesEvaluator.java |     8 +-
 .../solr/client/solrj/io/eval/UnitEvaluator.java   |     3 +-
 .../client/solrj/io/eval/ValueAtEvaluator.java     |     1 -
 .../client/solrj/io/eval/VarianceEvaluator.java    |     3 +-
 .../solr/client/solrj/io/eval/VectorFunction.java  |     4 -
 .../solr/client/solrj/io/eval/ZerosEvaluator.java  |     2 +-
 .../client/solrj/io/graph/GatherNodesStream.java   |    56 +-
 .../apache/solr/client/solrj/io/graph/Node.java    |    20 +-
 .../client/solrj/io/graph/ShortestPathStream.java  |    35 +-
 .../solr/client/solrj/io/graph/Traversal.java      |    11 +-
 .../client/solrj/io/graph/TraversalIterator.java   |     9 +-
 .../solr/client/solrj/io/ops/GroupOperation.java   |    17 +-
 .../client/solrj/io/sql/ResultSetMetaDataImpl.java |     2 -
 .../client/solrj/io/stream/CalculatorStream.java   |    12 +-
 .../solrj/io/stream/CartesianProductStream.java    |     1 -
 .../solr/client/solrj/io/stream/CellStream.java    |     9 +-
 .../client/solrj/io/stream/CloudSolrStream.java    |    32 +-
 .../solr/client/solrj/io/stream/CommitStream.java  |     2 +-
 .../solr/client/solrj/io/stream/CsvStream.java     |     3 +-
 .../solr/client/solrj/io/stream/DaemonStream.java  |    31 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |    28 +-
 .../solr/client/solrj/io/stream/DrillStream.java   |   280 -
 .../solr/client/solrj/io/stream/EchoStream.java    |    11 +-
 .../solr/client/solrj/io/stream/EvalStream.java    |     2 +-
 .../client/solrj/io/stream/ExceptionStream.java    |    12 +-
 .../client/solrj/io/stream/ExecutorStream.java     |    13 +-
 .../solr/client/solrj/io/stream/Facet2DStream.java |    26 +-
 .../solr/client/solrj/io/stream/FacetStream.java   |    96 +-
 .../solrj/io/stream/FeaturesSelectionStream.java   |    37 +-
 .../solr/client/solrj/io/stream/FetchStream.java   |     4 +-
 .../solr/client/solrj/io/stream/GetStream.java     |    14 +-
 .../client/solrj/io/stream/HashRollupStream.java   |    12 +-
 .../solr/client/solrj/io/stream/JDBCStream.java    |    23 +-
 .../client/solrj/io/stream/JSONTupleStream.java    |     1 -
 .../solrj/io/stream/JavabinTupleStreamParser.java  |     3 -
 .../solr/client/solrj/io/stream/KnnStream.java     |    13 +-
 .../solr/client/solrj/io/stream/LetStream.java     |     6 +-
 .../solr/client/solrj/io/stream/ListStream.java    |     5 +-
 .../solr/client/solrj/io/stream/ModelStream.java   |     6 +-
 .../solr/client/solrj/io/stream/NoOpStream.java    |     6 +-
 .../solr/client/solrj/io/stream/NullStream.java    |     3 +-
 .../client/solrj/io/stream/ParallelListStream.java |    13 +-
 .../client/solrj/io/stream/ParallelStream.java     |    10 +-
 .../solr/client/solrj/io/stream/PlotStream.java    |    21 +-
 .../client/solrj/io/stream/PriorityStream.java     |     2 +-
 .../solr/client/solrj/io/stream/RandomStream.java  |    15 +-
 .../solr/client/solrj/io/stream/RollupStream.java  |    16 +-
 .../client/solrj/io/stream/ScoreNodesStream.java   |    15 +-
 .../solr/client/solrj/io/stream/SearchStream.java  |    16 +-
 .../solr/client/solrj/io/stream/SelectStream.java  |    15 +-
 .../solrj/io/stream/SignificantTermsStream.java    |    31 +-
 .../solr/client/solrj/io/stream/SolrStream.java    |    13 +-
 .../solr/client/solrj/io/stream/StatsStream.java   |   286 +-
 .../solr/client/solrj/io/stream/StreamContext.java |    11 +-
 .../client/solrj/io/stream/TextLogitStream.java    |    54 +-
 .../client/solrj/io/stream/TimeSeriesStream.java   |    30 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |    16 +-
 .../solr/client/solrj/io/stream/TupStream.java     |    20 +-
 .../solr/client/solrj/io/stream/TupleStream.java   |     3 +-
 .../solr/client/solrj/io/stream/UpdateStream.java  |    21 +-
 .../solr/client/solrj/io/stream/ZplotStream.java   |    38 +-
 .../client/solrj/io/stream/expr/Explanation.java   |     1 -
 .../solrj/io/stream/expr/StreamExplanation.java    |     1 -
 .../solrj/io/stream/expr/StreamExpression.java     |     6 -
 .../expr/StreamExpressionNamedParameter.java       |     7 -
 .../io/stream/expr/StreamExpressionValue.java      |     9 +-
 .../client/solrj/io/stream/expr/StreamFactory.java |   249 +-
 .../solrj/io/stream/metrics/CountMetric.java       |     4 +-
 .../solrj/io/stream/metrics/PercentileMetric.java  |    84 -
 .../client/solrj/io/stream/metrics/StdMetric.java  |    93 -
 .../solrj/request/AbstractUpdateRequest.java       |     5 -
 .../solrj/request/CollectionAdminRequest.java      |   112 +-
 .../client/solrj/request/CollectionApiMapping.java |    14 +-
 .../solrj/request/ConfigSetAdminRequest.java       |     8 +-
 .../client/solrj/request/CoreAdminRequest.java     |     5 -
 .../solr/client/solrj/request/CoreApiMapping.java  |     3 +-
 .../solrj/request/DelegationTokenRequest.java      |    15 -
 .../client/solrj/request/DirectXmlRequest.java     |     5 -
 .../solrj/request/DocumentAnalysisRequest.java     |     5 -
 .../client/solrj/request/FieldAnalysisRequest.java |     5 -
 .../client/solrj/request/GenericSolrRequest.java   |     5 -
 .../client/solrj/request/HealthCheckRequest.java   |     5 +-
 .../solrj/request/JavaBinUpdateRequestCodec.java   |    19 +-
 .../solr/client/solrj/request/LukeRequest.java     |     5 -
 .../solrj/request/MultiContentWriterRequest.java   |     7 +-
 .../solr/client/solrj/request/QueryRequest.java    |     4 -
 .../solr/client/solrj/request/RequestWriter.java   |    13 +-
 .../apache/solr/client/solrj/request/SolrPing.java |     5 -
 .../solr/client/solrj/request/UpdateRequest.java   |     2 +-
 .../solr/client/solrj/request/V1toV2ApiMapper.java |     1 -
 .../solr/client/solrj/request/V2Request.java       |     5 -
 .../client/solrj/request/beans/PluginMeta.java     |    64 -
 .../solr/client/solrj/request/json/DomainMap.java  |     3 -
 .../client/solrj/request/json/HeatmapFacetMap.java |     3 +-
 .../client/solrj/request/json/JsonFacetMap.java    |     5 +-
 .../solrj/request/json/JsonQueryRequest.java       |     8 -
 .../request/schema/AbstractSchemaRequest.java      |     4 -
 .../solrj/response/AnalysisResponseBase.java       |     3 +-
 .../solrj/response/CollectionAdminResponse.java    |     1 -
 .../solrj/response/ConfigSetAdminResponse.java     |     3 +-
 .../solrj/response/DelegationTokenResponse.java    |     3 -
 .../solr/client/solrj/response/FieldStatsInfo.java |     1 -
 .../client/solrj/response/HealthCheckResponse.java |     1 -
 .../solr/client/solrj/response/PivotField.java     |     5 +-
 .../solr/client/solrj/response/QueryResponse.java  |    11 +-
 .../solr/client/solrj/response/RangeFacet.java     |     5 +-
 .../client/solrj/response/SolrResponseBase.java    |     3 -
 .../client/solrj/response/SpellCheckResponse.java  |     1 -
 .../client/solrj/response/SuggesterResponse.java   |     1 -
 .../solrj/response/json/BucketBasedJsonFacet.java  |     1 -
 .../solrj/response/json/HeatmapJsonFacet.java      |     1 -
 .../solrj/response/json/NestableJsonFacet.java     |     1 -
 .../solrj/response/schema/SchemaResponse.java      |    32 +-
 .../RequestReplicaListTransformerGenerator.java    |     6 +-
 .../solr/client/solrj/util/AsyncListener.java      |    33 -
 .../apache/solr/client/solrj/util/Cancellable.java |    22 -
 .../apache/solr/client/solrj/util/ClientUtils.java |     2 -
 .../java/org/apache/solr/cluster/api/ApiType.java  |    31 -
 .../apache/solr/cluster/api/CollectionConfig.java  |    27 -
 .../org/apache/solr/cluster/api/HashRange.java     |    42 -
 .../java/org/apache/solr/cluster/api/Resource.java |    41 -
 .../java/org/apache/solr/cluster/api/Router.java   |    25 -
 .../java/org/apache/solr/cluster/api/Shard.java    |    39 -
 .../org/apache/solr/cluster/api/ShardReplica.java  |    57 -
 .../org/apache/solr/cluster/api/SimpleMap.java     |    80 -
 .../org/apache/solr/cluster/api/SolrCluster.java   |    48 -
 .../apache/solr/cluster/api/SolrCollection.java    |    34 -
 .../java/org/apache/solr/cluster/api/SolrNode.java |    36 -
 .../org/apache/solr/common/IteratorWriter.java     |     1 -
 .../org/apache/solr/common/LazySolrCluster.java    |   446 -
 .../apache/solr/common/LinkedHashMapWriter.java    |     2 -
 .../org/apache/solr/common/MapSerializable.java    |     1 -
 .../src/java/org/apache/solr/common/MapWriter.java |     1 -
 .../java/org/apache/solr/common/MapWriterMap.java  |     7 +-
 .../org/apache/solr/common/NavigableObject.java    |     6 +-
 .../java/org/apache/solr/common/SimpleZkMap.java   |   139 -
 .../java/org/apache/solr/common/SolrDocument.java  |     7 +-
 .../org/apache/solr/common/SolrDocumentBase.java   |     1 -
 .../org/apache/solr/common/SolrDocumentList.java   |    10 -
 .../java/org/apache/solr/common/SolrException.java |    15 +-
 .../org/apache/solr/common/SolrInputDocument.java  |     1 -
 .../org/apache/solr/common/SolrInputField.java     |     4 +-
 .../java/org/apache/solr/common/cloud/Aliases.java |    12 +-
 .../solr/common/cloud/ClusterProperties.java       |     4 -
 .../org/apache/solr/common/cloud/ClusterState.java |    91 +-
 .../solr/common/cloud/CompositeIdRouter.java       |     2 +-
 .../solr/common/cloud/ConnectionManager.java       |     6 +-
 .../apache/solr/common/cloud/DocCollection.java    |    63 +-
 .../org/apache/solr/common/cloud/DocRouter.java    |    16 +-
 .../solr/common/cloud/NodesSysPropsCacher.java     |     4 +-
 .../java/org/apache/solr/common/cloud/Replica.java |   193 +-
 .../java/org/apache/solr/common/cloud/Slice.java   |     3 -
 .../org/apache/solr/common/cloud/SolrZkClient.java |    49 +-
 .../apache/solr/common/cloud/SolrZooKeeper.java    |     1 -
 .../apache/solr/common/cloud/ZkConfigManager.java  |     3 +-
 .../apache/solr/common/cloud/ZkDynamicConfig.java  |   145 -
 .../solr/common/cloud/ZkMaintenanceUtils.java      |    33 +-
 .../org/apache/solr/common/cloud/ZkNodeProps.java  |    11 +-
 .../apache/solr/common/cloud/ZkStateReader.java    |   364 +-
 .../solr/common/cloud/rule/ImplicitSnitch.java     |     5 +-
 .../org/apache/solr/common/cloud/rule/Snitch.java  |     1 -
 .../solr/common/cloud/rule/SnitchContext.java      |     1 -
 .../solr/common/params/AutoScalingParams.java      |    76 +
 .../solr/common/params/CollectionAdminParams.java  |    11 +-
 .../solr/common/params/CollectionParams.java       |    44 +-
 .../apache/solr/common/params/CommonParams.java    |    33 +-
 .../org/apache/solr/common/params/FacetParams.java |     4 +-
 .../apache/solr/common/params/MapSolrParams.java   |    22 +-
 .../solr/common/params/MultiMapSolrParams.java     |     5 -
 .../org/apache/solr/common/params/SolrParams.java  |     7 +-
 .../apache/solr/common/params/StreamParams.java    |    41 -
 .../common/util/ByteArrayUtf8CharSequence.java     |     6 +-
 .../apache/solr/common/util/CommandOperation.java  |    16 +-
 .../apache/solr/common/util/ContentStreamBase.java |     3 +-
 .../org/apache/solr/common/util/ExecutorUtil.java  |    12 +-
 .../solr/common/util/FastJavaBinDecoder.java       |     6 -
 .../src/java/org/apache/solr/common/util/Hash.java |     2 -
 .../org/apache/solr/common/util/JavaBinCodec.java  |    28 +-
 .../apache/solr/common/util/JsonRecordReader.java  |    10 -
 .../apache/solr/common/util/JsonSchemaCreator.java |     3 +-
 .../solr/common/util/JsonSchemaValidator.java      |    22 +-
 .../apache/solr/common/util/JsonTextWriter.java    |    19 +-
 .../solr/common/util/LinkedSimpleHashMap.java      |    34 -
 .../apache/solr/common/util/MapBackedCache.java    |     4 -
 .../org/apache/solr/common/util/NamedList.java     |    59 +-
 .../src/java/org/apache/solr/common/util/Pair.java |     1 -
 .../java/org/apache/solr/common/util/PathTrie.java |    50 +-
 .../apache/solr/common/util/ReflectMapWriter.java  |    29 +-
 .../org/apache/solr/common/util/RetryUtil.java     |    13 +-
 .../solr/common/util/SolrNamedThreadFactory.java   |    52 -
 .../solr/common/util/SolrjNamedThreadFactory.java  |    49 +
 .../java/org/apache/solr/common/util/StrUtils.java |     2 +-
 .../org/apache/solr/common/util/TextWriter.java    |    21 +-
 .../org/apache/solr/common/util/TimeSource.java    |     4 +-
 .../java/org/apache/solr/common/util/Utils.java    |   192 +-
 .../apache/solr/common/util/ValidatingJsonMap.java |    19 +-
 .../apache/solr/common/util/WrappedSimpleMap.java  |    49 -
 .../apache/solr/common/util/XMLErrorLogger.java    |     4 +-
 solr/solrj/src/java/org/noggit/CharArr.java        |   262 +-
 solr/solrj/src/java/org/noggit/JSONParser.java     |     2 +-
 .../resources/apispec/autoscaling.Commands.json    |   199 +
 .../src/resources/apispec/autoscaling.history.json |    61 +
 .../src/resources/apispec/cluster.Commands.json    |    28 +
 .../resources/apispec/collections.Commands.json    |    15 +
 .../apispec/collections.collection.Commands.json   |     8 +-
 .../collections.collection.Commands.modify.json    |    15 +
 ...collections.collection.shards.shard.delete.json |     2 +-
 ...ons.collection.shards.shard.replica.delete.json |     2 +-
 solr/solrj/src/test-files/log4j2.xml               |    45 +-
 .../src/test-files/solrj/javabin_backcompat.bin    |   Bin 170 -> 169 bytes
 .../solr/autoscaling/testAddMissingReplica.json    |   123 +
 .../autoscaling/testAutoScalingHandlerFailure.json |   141 +
 ...testAutoscalingPreferencesUsedWithNoPolicy.json |    53 +
 .../autoscaling/testComputePlanAfterNodeAdded.json |    16 +
 .../solr/autoscaling/testCoresSuggestions.json     |    17 +
 .../testCreateCollectionWithEmptyPolicy.json       |    20 +
 .../solrj/solr/autoscaling/testDiskSpaceHint.json  |    16 +
 .../solr/autoscaling/testEmptyCollection.json      |    27 +
 .../solrj/solr/autoscaling/testEqualOnNonNode.json |    83 +
 .../solr/autoscaling/testFreeDiskDeviation.json    |    35 +
 .../solr/autoscaling/testFreeDiskSuggestions.json  |    27 +
 .../solr/autoscaling/testFreediskPercentage.json   |    25 +
 .../solrj/solr/autoscaling/testHostAttribute.json  |   119 +
 .../solrj/solr/autoscaling/testInfiniteLoop.json   | 13196 +++++++++++++++++++
 .../solr/autoscaling/testMoveReplicaSuggester.json |    15 +
 .../testMoveReplicasInMultipleCollections.json     |    88 +
 .../solrj/solr/autoscaling/testPolicy.json         |    41 +
 .../solr/autoscaling/testPortSuggestions.json      |    22 +
 .../autoscaling/testReplicaCountSuggestions.json   |    15 +
 .../solr/autoscaling/testReplicaPercentage.json    |    46 +
 .../autoscaling/testReplicaZonesPercentage.json    |    15 +
 .../autoscaling/testScheduledTriggerFailure.json   |    52 +
 .../solrj/solr/autoscaling/testSortError.json      |   225 +
 .../autoscaling/testSuggestionsRebalance2.json     |   130 +
 .../autoscaling/testSuggestionsRebalanceOnly.json  |   105 +
 .../solr/autoscaling/testSysPropSuggestions.json   |   127 +
 .../solr/autoscaling/testSyspropSuggestions1.json  |    24 +
 .../solr/autoscaling/testUnresolvedSuggestion.json |   212 +
 .../solr/autoscaling/testUtilizeNodeFailure.json   |    69 +
 .../solr/autoscaling/testUtilizeNodeFailure2.json  |    66 +
 .../solr/autoscaling/testViolationOutput.json      |    22 +
 .../solrj/solr/autoscaling/testWithCollection.json |    21 +
 .../autoscaling/testWithCollectionMoveReplica.json |    28 +
 .../testWithCollectionMoveVsAddSuggestions.json    |    49 +
 .../autoscaling/testWithCollectionSuggestions.json |    21 +
 ...rconfig-follower1.xml => solrconfig-slave1.xml} |     0
 .../ref_guide_examples/JsonRequestApiTest.java     |     4 +-
 .../UsingSolrJRefGuideExamplesTest.java            |    59 +-
 .../org/apache/solr/client/solrj/GetByIdTest.java  |    27 +-
 .../solr/client/solrj/LargeVolumeTestBase.java     |    10 +-
 .../client/solrj/MergeIndexesExampleTestBase.java  |    15 +-
 .../apache/solr/client/solrj/SolrExampleTests.java |    21 +-
 .../client/solrj/SolrSchemalessExampleTest.java    |     2 -
 .../solr/client/solrj/TestLBHttp2SolrClient.java   |     9 +-
 .../solr/client/solrj/TestLBHttpSolrClient.java    |     9 +-
 .../solr/client/solrj/TestSolrJErrorHandling.java  |    20 +-
 .../solrj/beans/TestDocumentObjectBinder.java      |     1 -
 .../solrj/cloud/autoscaling/ConditionTest.java     |    80 +
 .../autoscaling/MoveReplicaSuggesterTest.java      |   104 +
 .../client/solrj/cloud/autoscaling/TestPolicy.java |  3092 +++++
 .../solrj/cloud/autoscaling/TestPolicy2.java       |   505 +
 .../solrj/cloud/autoscaling/TestPolicy2Old.java    |    26 +
 .../solrj/cloud/autoscaling/TestPolicyOld.java     |    25 +
 .../solrj/embedded/SolrExampleJettyTest.java       |     1 -
 .../solrj/embedded/TestEmbeddedSolrServer.java     |     2 +-
 .../client/solrj/impl/BasicHttpSolrClientTest.java |    53 +-
 .../impl/CloudHttp2SolrClientBadInputTest.java     |     4 +-
 .../solrj/impl/CloudHttp2SolrClientRetryTest.java  |     1 -
 .../solrj/impl/CloudHttp2SolrClientTest.java       |    45 +-
 .../solrj/impl/CloudSolrClientBadInputTest.java    |     4 +-
 .../solrj/impl/CloudSolrClientBuilderTest.java     |     2 +-
 .../solrj/impl/CloudSolrClientCacheTest.java       |    15 +-
 .../solrj/impl/CloudSolrClientRetryTest.java       |     1 -
 .../client/solrj/impl/CloudSolrClientTest.java     |    41 +-
 ...oncurrentUpdateHttp2SolrClientBadInputTest.java |     4 +-
 .../impl/ConcurrentUpdateHttp2SolrClientTest.java  |     6 +-
 .../ConcurrentUpdateSolrClientBadInputTest.java    |     4 +-
 .../ConcurrentUpdateSolrClientBuilderTest.java     |     2 +-
 .../solrj/impl/ConcurrentUpdateSolrClientTest.java |     6 +-
 .../impl/Http2SolrClientCompatibilityTest.java     |     7 +-
 .../client/solrj/impl/Http2SolrClientTest.java     |    44 +-
 .../solr/client/solrj/impl/HttpClientUtilTest.java |    16 +-
 .../solrj/impl/HttpSolrClientBadInputTest.java     |     4 +-
 .../solrj/impl/HttpSolrClientConPoolTest.java      |     4 +-
 .../solrj/impl/LBHttpSolrClientBadInputTest.java   |     4 +-
 .../solr/client/solrj/impl/LBSolrClientTest.java   |    90 -
 .../org/apache/solr/client/solrj/io/TestLang.java  |     4 +-
 .../client/solrj/io/graph/GraphExpressionTest.java |    16 +-
 .../solr/client/solrj/io/graph/GraphTest.java      |    10 +-
 .../apache/solr/client/solrj/io/sql/JdbcTest.java  |     2 -
 .../solrj/io/stream/CloudAuthStreamTest.java       |     9 +-
 .../client/solrj/io/stream/JDBCStreamTest.java     |     4 +-
 .../client/solrj/io/stream/MathExpressionTest.java |   258 +-
 .../client/solrj/io/stream/RecordCountStream.java  |     2 +-
 .../solrj/io/stream/SelectWithEvaluatorsTest.java  |    10 +-
 .../solrj/io/stream/StreamDecoratorTest.java       |    33 +-
 .../solrj/io/stream/StreamExpressionTest.java      |   417 +-
 .../solr/client/solrj/io/stream/StreamingTest.java |    15 +-
 .../solrj/io/stream/eval/AscEvaluatorTest.java     |     6 -
 .../io/stream/eval/ConversionEvaluatorsTest.java   |    27 +-
 .../solrj/io/stream/eval/ReverseEvaluatorTest.java |     1 -
 .../io/stream/eval/TemporalEvaluatorsTest.java     |     4 +-
 .../solrj/io/stream/ops/ConcatOperationTest.java   |     4 +-
 .../client/solrj/io/stream/ops/OperationsTest.java |     4 +-
 .../solr/client/solrj/request/SchemaTest.java      |    14 +-
 .../solrj/request/TestConfigSetAdminRequest.java   |     3 +-
 .../solr/client/solrj/request/TestCoreAdmin.java   |    12 +-
 .../solrj/request/TestUpdateRequestCodec.java      |     6 +-
 .../solr/client/solrj/request/TestV2Request.java   |     6 +-
 .../client/solrj/request/json/DomainMapTest.java   |     7 -
 .../solrj/response/AnlysisResponseBaseTest.java    |     6 +-
 .../response/DocumentAnalysisResponseTest.java     |     2 -
 .../solrj/response/FieldAnalysisResponseTest.java  |     2 -
 .../solrj/response/NoOpResponseParserTest.java     |     2 -
 .../client/solrj/response/QueryResponseTest.java   |     1 -
 .../response/TestDelegationTokenResponse.java      |     2 +-
 ...RequestReplicaListTransformerGeneratorTest.java |    17 +-
 .../org/apache/solr/common/SolrDocumentTest.java   |     7 +-
 .../solr/common/TestToleratedUpdateError.java      |     2 -
 .../apache/solr/common/cloud/SolrZkClientTest.java |    12 +-
 .../cloud/TestCloudCollectionsListeners.java       |   110 +
 .../common/cloud/TestCollectionStateWatchers.java  |    23 +
 .../common/cloud/TestDocCollectionWatcher.java     |    26 +
 .../solr/common/params/CommonParamsTest.java       |     2 -
 .../apache/solr/common/util/JsonValidatorTest.java |     3 -
 .../org/apache/solr/common/util/NamedListTest.java |     5 +-
 .../solr/common/util/TestFastJavabinDecoder.java   |    13 -
 .../apache/solr/common/util/TestJavaBinCodec.java  |   103 +-
 .../solr/common/util/TestJsonRecordReader.java     |     5 -
 .../solr/common/util/TestNamedListCodec.java       |    15 -
 .../org/apache/solr/common/util/TestPathTrie.java  |    10 -
 .../solr/common/util/TestSolrJsonWriter.java       |   102 +-
 .../solr/common/util/TestValidatingJsonMap.java    |     1 -
 .../solr/common/util/TestZkMaintenanceUtils.java   |    55 -
 .../solr/common/util/Utf8CharSequenceTest.java     |     6 -
 solr/test-framework/{README.md => README.txt}      |     0
 solr/test-framework/build.gradle                   |     3 +-
 solr/test-framework/build.xml                      |     2 +-
 solr/test-framework/ivy.xml                        |     2 +-
 .../apache/solr/BaseDistributedSearchTestCase.java |    31 +-
 .../src/java/org/apache/solr/JSONTestUtil.java     |     7 -
 .../org/apache/solr/SolrIgnoredThreadsFilter.java  |     5 -
 .../java/org/apache/solr/SolrJettyTestBase.java    |     2 +-
 .../src/java/org/apache/solr/SolrTestCase.java     |    12 +-
 .../src/java/org/apache/solr/SolrTestCaseHS.java   |    95 +-
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   |   129 +-
 .../solr/analysis/MockCharFilterFactory.java       |     5 -
 .../solr/analysis/MockTokenFilterFactory.java      |     5 -
 .../apache/solr/analysis/MockTokenizerFactory.java |     5 -
 .../solr/cloud/AbstractDistribZkTestBase.java      |    54 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |   183 +-
 .../java/org/apache/solr/cloud/ChaosMonkey.java    |    12 +-
 .../org/apache/solr/cloud/CloudInspectUtil.java    |    23 +-
 .../java/org/apache/solr/cloud/ConfigRequest.java  |     6 -
 .../src/java/org/apache/solr/cloud/IpTables.java   |     4 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |    19 +-
 .../apache/solr/cloud/MultiSolrCloudTestCase.java  |     5 +-
 .../apache/solr/cloud/SolrCloudAuthTestCase.java   |     4 -
 .../org/apache/solr/cloud/SolrCloudTestCase.java   |     9 +-
 .../apache/solr/cloud/StoppableCommitThread.java   |     4 +-
 .../apache/solr/cloud/StoppableSearchThread.java   |     2 +-
 .../java/org/apache/solr/cloud/ZkTestServer.java   |    29 +-
 .../solr/core/MockConcurrentMergeScheduler.java    |     3 +-
 .../apache/solr/core/MockTracerConfigurator.java   |     2 +-
 .../component/TrackingShardHandlerFactory.java     |    67 +-
 .../org/apache/solr/util/RandomMergePolicy.java    |     4 +-
 .../java/org/apache/solr/util/RandomizeSSL.java    |     4 +-
 .../java/org/apache/solr/util/RestTestBase.java    |    71 +-
 .../java/org/apache/solr/util/SSLTestConfig.java   |    26 +-
 .../src/java/org/apache/solr/util/TestHarness.java |    35 +-
 solr/webapp/build.gradle                           |     2 -
 solr/webapp/web/css/angular/collections.css        |     2 +-
 solr/webapp/web/css/angular/dashboard.css          |     4 +-
 solr/webapp/web/css/angular/dataimport.css         |     3 +-
 solr/webapp/web/css/angular/index.css              |     5 -
 solr/webapp/web/css/angular/menu.css               |     3 +-
 solr/webapp/web/css/angular/replication.css        |    10 +-
 solr/webapp/web/css/angular/suggestions.css        |    64 +
 .../img/ico/{node-leader.png => node-master.png}   |   Bin
 .../img/ico/{node-follower.png => node-slave.png}  |   Bin
 solr/webapp/web/index.html                         |    31 +-
 solr/webapp/web/js/angular/app.js                  |     4 +
 solr/webapp/web/js/angular/controllers/cloud.js    |     9 +-
 .../js/angular/controllers/cluster-suggestions.js  |    62 +
 .../web/js/angular/controllers/collections.js      |     8 +-
 .../web/js/angular/controllers/core-overview.js    |     4 +-
 solr/webapp/web/js/angular/controllers/index.js    |     6 -
 solr/webapp/web/js/angular/controllers/login.js    |     2 +-
 .../web/js/angular/controllers/replication.js      |   108 +-
 solr/webapp/web/libs/angular-chosen.min.js         |     4 +-
 solr/webapp/web/partials/cloud.html                |     3 +-
 solr/webapp/web/partials/cluster_suggestions.html  |    49 +
 solr/webapp/web/partials/collection_overview.html  |     6 +
 solr/webapp/web/partials/collections.html          |    20 +
 solr/webapp/web/partials/core_overview.html        |    38 +-
 solr/webapp/web/partials/dataimport.html           |     1 -
 solr/webapp/web/partials/index.html                |    34 -
 solr/webapp/web/partials/login.html                |    17 -
 solr/webapp/web/partials/replication.html          |    62 +-
 2494 files changed, 124129 insertions(+), 59586 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 9945ecb..e9df9b1 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -6,24 +6,11 @@ https://github.com/apache/lucene-solr/blob/master/solr/solr-ref-guide/src/solr-u
 
 ==================  9.0.0 ==================
 
-Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
-
-Upgrade Notes
----------------------
-
-* SOLR-12847: maxShardsPerNode parameter has been removed because it was broken and
-inconsistent with other replica placement strategies. Other relevant placement strategies
-should be used instead, such as autoscaling policy or rules-based placement.
-
-* SOLR-14654 : plugins cannot be loaded using "runtimeLib=true" option. Use the package manager to use
-  and load plugins
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
 
 New Features
 ---------------------
-* SOLR-14440: Introduce new Certificate Authentication Plugin to load Principal from certificate subject. (Mike Drob)
-
-* SOLR-14588: Introduce Circuit Breaker Infrastructure and a JVM heap usage memory tracking circuit breaker implementation (Atri Sharma)
-
+(No changes)
 
 Improvements
 ----------------------
@@ -31,23 +18,8 @@ Improvements
 
 * SOLR-14223: PKI Auth can bootstrap from existing key files instead of creating new keys on startup (Mike Drob)
 
-* SOLR-11725: Use corrected sample formula for computing stdDev and variance in JSON aggregations
-  (hossman, Munendra S N, yonik)
-
-* SOLR-14387: SolrClient.getById() will escape comma separater within ids (Markus Schuch via Mike Drob)
-
-* SOLR-10814: Add short-name feature to RuleBasedAuthz plugin (Mike Drob, Hrishikesh Gadre)
-
-* SOLR-7683 Introduce support to identify Solr internal request types (Atri Sharma, Hrishikesh Gadre)
-
-* SOLR-13528 Rate Limiting in Solr (Atri Sharma, Mike Drob)
-
 Other Changes
 ----------------------
-* SOLR-14656: Autoscaling framework removed (Ishan Chattopadhyaya, noble, Ilan Ginzburg)
-
-* LUCENE-9391: Upgrade HPPC to 0.8.2. (Haoyu Zhai)
-
 * SOLR-10288: Remove non-minified JavaScript from the webapp. (Erik Hatcher, marcussorealheis)
 
 * SOLR-13655:Upgrade Collections.unModifiableSet to Set.of and Set.copyOf (Atri Sharma via Tomás Fernández Löbbe)
@@ -68,527 +40,30 @@ Other Changes
 * SOLR-14256: Remove HashDocSet; add DocSet.getBits() instead.  DocSet is now strictly immutable and ascending order.
   It's now locked-down to external extension; only 2 impls exist.  (David Smiley)
 
-* SOLR-14197: SolrResourceLoader: remove deprecated methods and do other improvements. (David Smiley)
-
-* SOLR-14012: Return long value for unique and hll aggregations irrespective of shard count (Munendra S N, hossman)
-
-* SOLR-14322: AbstractFullDistribZkTestBase.waitForRecoveriesToFinish now takes a timeout and time unit instead of
-  assuming that we are passed value in seconds. (Mike Drob)
-
-* SOLR-13893: Remove support to read BlobRepository's max jar size from deprecated `runtme.lib.size` system property
-  (Erick Erickson, Kesharee Nandan Vishwakarma, Munendra S N)
-
-* SOLR-12720: Remove support for `autoReplicaFailoverWaitAfterExpiration`. (marcussorealheis, shalin)
-
-* SOLR-9909: The deprecated SolrjNamedThreadFactory has been removed. Use SolrNamedThreadFactory instead.
-  (Andras Salamon, shalin)
-
-* SOLR-14420: AuthenticationPlugin.authenticate accepts HttpServletRequest instead of ServletRequest. (Mike Drob)
-
-* SOLR-14429: Convert .txt files to properly formatted .md files. (Tomoko Uchida, Uwe Schindler)
-
-* SOLR-14412: Automatically set urlScheme to https when running secure solr with embedded zookeeper. (Mike Drob)
-  Do not erroneously set solr.jetty.https.port system property when running in http mode (Upendra Penegalapati)
-
-* SOLR-14014: Introducing a system property that allows users to disable the Admin UI, which is enabled by default.
-  If you have security concerns or other reasons to disable the Admin UI, you can modify `SOLR_ADMIN_UI_DISABLED`
-  `solr.in.sh`/`solr.in.cmd` at start. (marcussorealheis)
-
-* SOLR-14486: Autoscaling simulation framework no longer creates /clusterstate.json (format 1),
-  instead it creates individual per-collection /state.json files (format 2). (ab)
-
-* SOLR-12823: Remove /clusterstate.json support, including support for collections created with stateFormat=1,
-  as well as support for Collection API MIGRATESTATEFORMAT action and support for the legacyCloud flag (Ilan Ginzburg).
-
-* LUCENE-9411: Fail complation on warnings, 9x gradle-only (Erick Erickson, Dawid Weiss)
-  Deserves mention here as well as Lucene CHANGES.txt since it affects both.
-
-* SOLR-12847: Remove support for maxShardsPerNode. (ab)
-
-* SOLR-14244: Remove ReplicaInfo. (ab)
-
-* SOLR-14654: Remove plugin loading from .system collection (for 9.0) (noble)
-
-* SOLR-14702: All references to "master" and "slave" replaced with "leader" and "follower" (MarcusSorealheis, 
-  Erick Erickson, Tomás Fernández Löbbe)
-
-Bug Fixes
----------------------
-* SOLR-14546: Fix for a relatively hard to hit issue in OverseerTaskProcessor that could lead to out of order execution
-  of Collection API tasks competing for a lock (Ilan Ginzburg).
-
-==================  8.7.0 ==================
-
-Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
-
-New Features
----------------------
-
-* SOLR-14151 Make schema components load from packages (noble)
-
-* SOLR-14681: Introduce ability to delete .jar stored in the Package Store. (MarcusSorealheis , Mike Drob)
-
-* SOLR-14604: Add the ability to uninstall a package from with the Package CLI. (MarcusSorealheis)
-
-* SOLR-14582: Expose IWC.setMaxCommitMergeWaitMillis in Solr's index config. This is an expert config option that can be
-  set when using a custom MergePolicy (doesn't have any effect on the default MP) (Tomás Fernández Löbbe)
-
-* SOLR-13751: Add BooleanSimilarityFactory class. (Andy Webb via Christine Poerschke)
-
-Improvements
----------------------
-
-* SOLR-14523: Enhance gradle logging calls validation: eliminate getMessage() (Andras Salamon via Erick Erickson)
-
-* SOLR-14537: Improve performance of ExportWriter. (ab, Joel Bernstein)
-
-* SOLR-14566: Request ID's ('rid') are now added by default to distributed search requests, and can be used to correlate
-  logs from the receiving coordinator node with those from downstream shard requests.  This can be disabled by providing a
-  disableRequestId=true request parameter. (Jason Gerlowski)
-
-* SOLR-14635: ThreadDumpHandler has been enhanced to show lock ownership (hossman)
-
-* SOLR-11262: Add support to stream data out using push APIs when wt=xml (yonik, Munendra S N)
-
-* SOLR-13205: Prevent StringIndexOutOfBoundsException when parsing field names in SolrQueryParserBase
-  (pramodkumar9 via Jason Gerlowski)
-
-* SOLR-14651: The MetricsHistoryHandler can more completely disable itself when you tell it to.
-  Also, it now shuts down more thoroughly. (David Smiley)
-
-Optimizations
----------------------
-
-* SOLR-14354: HttpShardHandler send requests in async (Cao Manh Dat).
-
-* SOLR-14610: ReflectMapWriter to use MethodHandle instead of old reflection (noble)
-
-* SOLR-13132: JSON Facet perf improvements to support "sweeping" collection of "relatedness()"
-  (hossman, Michael Gibney)
-
-Bug Fixes
----------------------
-
-* SOLR-11656: TLOG replication doesn't work properly after rebalancing leaders. (Yuki Yano via
-  Erick Erickson)
-
-* SOLR-14516: Fix NPE in JSON response writer(wt=json) with /get when writing non-stored, non-indexed docvalue field
-  from an uncommitted document (noble, Ishan Chattopadhyaya, Munendra S N)
-
-* SOLR-14657: Improve error handling in IndexReader realted metrics that were causing scary ERROR logging
-  if metrics were requested while Solr was in the process of closing/re-opening a new IndexReader. (hossman)
-
-* SOLR-14748: Fix incorrect auth/SSL startup logging (Jason Gerlowski)
-
-* SOLR-14751: Zookeeper Admin screen not working for old ZK versions (janhoy)
-
-* SOLR-14677: Improve DIH termination logic to close all DataSources, EntityProcessors (Jason Gerlowski)
-
-Other Changes
----------------------
-
-* SOLR-14592: Upgrade Zookeeper to 3.6.1. NOTE: this required upgrading netty to 4.1.50 (Erick Erickson)
-
-* SOLR-10742: SolrCores.getNamesForCore is quite inefficient and blocks other core operations.
-  NOTE: this experimental method has been removed (Erick Erickson)
-
-* SOLR-13939: Extract any non-gradle related patches (deprecations, URL fixes, etc.) from gradle effort. NOTE:
-  this will be in several separate commits/pushes. (Erick Erickson)
-
-* SOLR-14637: Update CloudSolrClient examples to remove deprecated method. (Andras Salamon via Eric Pugh)
-
-* SOLR-14676: Update commons-collections to 4.4 and use it in Solr (Erick Erickson)
-
-* SOLR-11868: Deprecate CloudSolrClient.setIdField, use information from Zookeeper (Erick Erickson)
-
-* SOLR-14641: PeerSync, remove canHandleVersionRanges check (Cao Manh Dat)
-
-==================  8.6.1 ==================
-
-Bug Fixes
----------------------
-
-* SOLR-14671: Parsing dynamic ZK config sometimes cause NuberFormatException (janhoy)
-
-==================  8.6.0 ==================
-
-Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
-
-New Features
----------------------
-* SOLR-14210: HealthCheckHandler can now require that all cores are healthy before returning 'OK'
-  To enable, add &requireHealthyCores=true to enable (janhoy, Houston Putman, shalin)
-
-* SOLR-13942: A read API at /api/cluster/zk/* to fetch raw ZK data and view contents of a ZK directory (noble)
-
-* SOLR-14237: A new panel with security info in admin UI's dashboard (Ishan Chattopadhyaya, Moshe Bla)
-
-* SOLR-12131: ExternalRoleRuleBasedAuthorizationPlugin which gets user's roles from request (janhoy)
-
-* SOLR-14478: Allow the diff Stream Evaluator to operate on the rows of a matrix (Joel Bernstein)
-
-* SOLR-14476: Add percentiles and standard deviation aggregations to stats, facet and
-  timeseries Streaming Expressions (Joel Bernstein)
-
-* SOLR-14470: Add streaming expressions to /export handler. (ab, Joel Bernstein)
-
-* SOLR-14404: CoreContainer level custom requesthandlers (noble)
-
-* SOLR-13749: Join queries can now work cross-collection, even when sharded or when spanning nodes.
-  (Dan Fox, Kevin Watters, via Gus Heck, David Smiley)
-
-* SOLR-14481: Add drill Streaming Expression for efficient and accurate high cardinality aggregation.
-  (Joel Bernstein)
-
-* SOLR-14599: Package manager support for cluster level plugins (see SOLR-14404) (Ishan Chattopadhyaya)
-
-* SOLR-14590: Add support for RankFields. RankFields allow the use of per-document scoring factors in a
-  way that lets Solr skip over non-competitive documents when ranking. See SOLR-13289.
-  (Tomás Fernández Löbbe, Varun Thacker)
-
-Improvements
----------------------
-* SOLR-14316: Remove unchecked type conversion warning in JavaBinCodec's readMapEntry's equals() method
-  (Aroop Ganguly, Tomás Fernández Löbbe, Noble Paul, Anshum Gupta)
-
-* SOLR-14260: Make SolrJ ConnectionSocketFactory pluggable via SocketFactoryRegistryProvider setting on HttpClientUtil
-  (Andy Throgmorton via David Smiley)
-
-* SOLR-14342: Load cores in an order that makes collections available sooner and reduces leaderVoteWait timeouts in
-  large SolrCloud clusters. (David Smiley)
-
-* SOLR-14329: Add support to choose collapse group to expand in ExpandComponent based on cost (Munendra S N)
-
-* SOLR-14307: User defined "<cache/>" entries in solrconfig.xml now support enabled="true|false" just like
-  core searcher caches. (hossman)
-
-* SOLR-14364: LTR's SolrFeature "fq" now supports PostFilters (e.g. collapse). (David Smiley)
-
-* SOLR-14396: TaggerRequestHandler should not error on an empty index (Trey Grainger)
-
-* SOLR-12845: Add a default autoscaling cluster policy. (shalin, varunthacker, ab)
-
-* SOLR-14433: Metrics: SolrShardReporter's default metrics list now includes TLOG and UPDATE./update (David Smiley)
-
-* SOLR-14423: Move static SolrClientCache from StreamHandler to CoreContainer for wider reuse and better life-cycle management. (ab)
-
-* SOLR-14407: Handle shards.purpose in the postlogs tool (Joel Bernstein)
-
-* SOLR-13325: ComputePlanAction now supports a collection selector of the form `collections: {policy: my_policy}`
-  which can be used to select multiple collections that match collection property/value pairs. This is useful to
-  maintain a whitelist of collections for which actions are taken without needing to hard code the collection names
-  themselves. The collection hints are pushed down to the policy engine so operations for non-matching collections
-  are not computed at all. (ab, shalin)
-
-* SOLR-14419: json.queries as well as other parameters might be referred via {"param":"ref"} in Query DSL (Mikhail Khludnev)
-
-* SOLR-11334: hl.fl and tv.fl now parse field lists when they have both commas and spaces
-  (David Smiley, Yasufumi Mizoguchi)
-
-* SOLR-14442: bin/solr and bin\solr.cmd invoke jstack <SOLR_PID> before forceful termination, if jstack is available.
-  Also, bin\solr.cmd executes forceful termination even port is unbinded  already (Christine Poerschke via Mikhail Khludnev).
-
-* SOLR-14384: SolrRequestInfo now stacks internally when a new request is set/clear'ed.
-  Also fixes SolrIndexSearcher.warm which should have re-instated previous SRI.
-  (Nazerke Seidan, David Smiley)
-
-* SOLR-14561: CoreAdminAPI's parameters instanceDir and dataDir are now validated, and must be relative to either
-  SOLR_HOME, SOLR_DATA_HOME or coreRootDir. Added new solr.xml config 'allowPaths', controlled by system property
-  'solr.allowPaths' that allows you to add other allowed paths when needed.
-
-* SOLR-13286: Metrics will no longer write a (sometimes large) log message every minute. This can be re-enabled
-  via log4j2.xml if desired, or other HttpSolrCall log messages may be quieted on a per handler basis. (Gus Heck)
-
-* SOLR-14539: Introducing {!bool excludeTags=...} for Query DSL. (Mikhail Khludnev)
-
-Optimizations
----------------------
-* SOLR-8306: Do not collect expand documents when expand.rows=0 (Marshall Sanders, Amelia Henderson)
-
-* SOLR-14340: Remove unnecessary configset verification checks when SolrCloud merely wants to know which configset a
-  collection is using.  Improves CLUSTERSTATUS times for massive clusters.  (Mathieu Marie, David Smiley)
-
-* SOLR-14365: CollapsingQParser - Avoiding always allocate int[] and float[] with size equals to number of unique values.
-  (Cao Manh Dat)
-
-* SOLR-14376: Optimize filter queries that match all docs. (David Smiley)
-
-* LUCENE-7788: fail precommit on unparameterised log messages and examine for wasted work/objects (Erick Erickson)
-
-* SOLR-13289: When the "minExactCount" parameters is provided in queries and it's value is lower than the number of hits,
-  Solr can speedup the query resolution by using the Block-Max WAND algorithm (see LUCENE-8135). When doing this, the
-  value of matching documents in the response (numFound) will be an approximation.
-  (Ishan Chattopadhyaya, Munendra S N, Tomás Fernández Löbbe, David Smiley)
-
-* SOLR-14472: Autoscaling "cores" preference now retrieves the core count more efficiently, and counts all cores.
-  (David Smiley)
-
-* SOLR-14552: Add BlockMax-WAND support to ReRank queries (Tomás Fernández Löbbe)
-
-* SOLR-14554: Add BlockMax-WAND support for queries where the score is requested (Tomás Fernández Löbbe)
-
-* SOLR-14634: Limit the HTTP security headers to "/solr" end point (noble)
-
-Bug Fixes
----------------------
-* SOLR-13264: IndexSizeTrigger aboveOp / belowOp properties not in valid properties.
-  (Christine Poerschke, ab)
-
-* SOLR-13199: Return proper error when invalid parentFilter is passed in ChildDocTransformer
-  (Johannes Kloos, Munendra S N, David Smiley, Mikhail Khludnev)
-
-* SOLR-14347: Autoscaling placement wrong when concurrent replica placements are calculated. (ab)
-
-* SOLR-14128: Improve distributed locking around managed schema upgrade process. (ab)
-
-* SOLR-14302: Ensure Solr always includes the stacktrace for exceptions by using '-OmitStackTraceInFastThrow'
-  (hossman)
-
-* SOLR-14317: HttpClusterStateProvider throws exception when only one node down. (Lyle Wang via Ishan Chattopadhyaya)
-
-* SOLR-14356: PeerSync should not fail with SocketTimeoutException from hanging nodes (Cao Manh Dat)
-
-* SOLR-14402: Avoid creating new exceptions for every request made to MDCAwareThreadPoolExecutor by distributed search.
-  This is a fix for incomplete optimization made by SOLR-11880 in Solr 7.4 which fixed distributed updates but not
-  distributed search. (shalin)
-
-* SOLR-14291: Handle dotted fields in legacy Analytics Component (Anatolii Siuniaev via Mikhail Khludnev)
-
-* SOLR-14371: Zk StatusHandler now parse dynamic zk server config if supported, fixing Admin UI Zookeeper Status
-  screen in case dynamic reconfig host list differs from static zkHost string (janhoy)
-
-* SOLR-14421: New examples in solr.in.cmd in Solr 8.5 don't work as provided (Colvin Cowie via janhoy)
-
-* SOLR-14431: SegmentsInfoRequestHandler does not release IndexWriter (Tiziano Degaetano, ab)
-
-* SOLR-14463: Solr Admin ZkStatus page now works with ZK 3.6, without 'For input string: "null"' error (janhoy, Bernd Wahlen)
-
-* SOLR-14456: Fix Content-Type header usage when a request is forwarded from Solr node to Solr
-  node with compression enabled (samuelgmartinez via Houston Putman)
-
-* SOLR-8394: /admin/luke was always showing 0 for indexHeapUsageBytes. It should work now.
-  (Steve Molloy, Isabelle Giguere, David Smiley)
-
-* SOLR-14492: Fix ArrayIndexOutOfBoundsException in json.facet 'terms' when FacetFieldProcessorByHashDV is
-  used with aggregations over multivalued numeric fields (hossman)
-
-* SOLR-14477: Fix incorrect 'relatedness()' calculations in json.facet 'terms' when 'prefix' option is used
-  (hossman)
-
-* SOLR-14504: ZkController LiveNodesListener has NullPointerException in startup race.
-  (Colvin Cowie via ab)
-
-* SOLR-14498: Upgrade to Caffeine 2.8.4, which fixes the cache poisoning issue. (Jakub Zytka, ab)
-
-* SOLR-14517: Dont ignore 'mm' localparam on edismax queries using operators (Yuriy Koval via Jason Gerlowski)
-
-* SOLR-14491: Intercepting internode requests in KerberosPlugin when HTTP/2 client is used (Ishan Chattopadhyaya, Moshe Bla)
-
-* SOLR-14525: SolrCoreAware, ResourceLoaderAware should be honored for plugin loaded from packages (noble)
-
-* SOLR-9679: When removing zk node /security.json, security is now disabled gracefully (janhoy)
-
-* SOLR-14520: Fixed server errors from the json.facet allBuckets:true option when combined with refine:true
-  (Michael Gibney, hossman)
-
-* SOLR-14467: Fix relatedness() stat in json.facets to no longer cause server errors (or nonsense results)
-  when combined with allBuckets:true.  (Michael Gibney, hossman)
-
-* SOLR-13203: Return 400 status code on invalid dynamic field for Edismax's user Fields
-  (Johannes Kloos, mrsoong via Munendra S N)
-
-* SOLR-14550: Fix duplicates issue in Atomic updates with add-distinct (Thomas Corthals, Munendra S N)
-
-* SOLR-14345: Return proper error message when non-BinaryResponseParser is used in solrJ (Munendra S N)
-
-* SOLR-14516: NPE in JsonTextWriter (noble)
-
-* SOLR-14577: Return 400 BAD REQUEST when field is missing on a Terms query parser request
-  (Tomás Fernández Löbbe)
-
-* SOLR-14409: Existing violations allow bypassing policy rules when adding new replicas (noble, ab)
-
-* SOLR-14584: Correct SOLR_SSL_KEY_STORE and SOLR_SSL_TRUST_STORE example comments in solr.in.sh and solr.in.cmd files
-  (Aren Cambre via Christine Poerschke)
-
-* SOLR-14628: hl.fragsizeIsMinimum now defaults to true, thus fragments size like previous to Solr 8.5 and addresses a
-  significant performance regression. (David Smiley, Michal Hlavac)
-
-Other Changes
----------------------
-* SOLR-14197: SolrResourceLoader: marked many methods as deprecated, and in some cases rerouted exiting logic to avoid
-  them. (David Smiley)
-
-* SOLR-14312: Upgrade Zookeeper to 3.5.7 (Erick Erickson)
-
-* SOLR-14296: Update netty to 4.1.46 (Andras Solaman via Erick Erickson)
-
-* SOLR-10157: Improve error messages when unknown aggregations are specified in the request (hossman, Munendra S N)
-
-* SOLR-13944: Remove redundant checks in SpellCheckCollator and add tests for spellcheck with collapse
-  (Stefan, Munendra S N, Tomas Eduardo Fernandez Lobbe)
-
-* SOLR-12353: SolrDispatchFilter expensive non-conditional debug line degrades performance (Pascal Proulx via Erick Erickson)
-
-* SOLR-13842: Remove redundant defaults from ImplicitPlugins.json (Munendra S N)
-
-* SOLR-13893: BlobRepository reads max jar size from `runtime.lib.size` system property. Old `runtme.lib.size` is Deprecated
-  (Erick Erickson, Kesharee Nandan Vishwakarma, Munendra S N)
-
-* SOLR-14367: Upgrade Tika to 1.24 (Mibo via Erick Erickson)
-
-* SOLR-14351: Hardened MDC logging; sometimes info was absent (David Smiley)
-
-* SOLR-14386: Update Jetty to 9.4.27 and dropwizard-metrics version to 4.1.5 (Erick Erickson)
-
-* SOLR-9909: SolrjNamedThreadFactory is deprecated in favor of SolrNamedThreadFactory. DefaultSolrThreadFactory is
-  removed from solr-core in favor of SolrNamedThreadFactory in solrj package and all solr-core classes now use
-  SolrNamedThreadFactory. (Andras Salamon, shalin)
-
-* SOLR-14391: Removed internal-ish ScoreFilter marker interface; only used by {!collapse}.  Removed needless code in
-  SolrIndexSearcher.getDocSet(List<Query>) (processes some filter queries).  (David Smiley)
-
-* SOLR-13886: HDFSSyncSliceTest and SyncSliceTest started failing frequently (Kevin Risden)
-
-* SOLR-14173: Major redesign of the Solr Reference Guide (Cassandra Targett)
-
-* SOLR-14461: Replaced commons-fileupload dependency with using Jetty's facilities. (David Smiley)
-
-* SOLR-14466: Upgrade log4j2 to latest release (2.13.2) (Erick Erickson)
-
-* SOLR-11934: Visit Solr logging, it's too noisy. Note particularly that the messages for
-  opening a new searcher have changed and include the autowarm time. (Erick Erickson)
-
-* SOLR-7880: Update commons-cli to 1.4 (Erick Erickson)
-
-* SOLR-14226: Fix or suppress 14 resource leak warnings in apache/solr/core (Andras Salaman via
-  Erick Erickson)
-
-* SOLR-14482: Fix or suppress warnings in solr/search/facet (Erick Erickson)
-
-* SOLR-14485: Fix or suppress 11 resource leak warnings in apache/solr/cloud (Andras Salaman via
-  Erick Erickson)
-
-* SOLR-14495: Fix or suppress warnings in solr/search/function (Erick Erickson)
-
-* SOLR-14280: Improve error reporting in SolrConfig (Andras Salamon via Jason Gerlowski)
-
-* SOLR-14474: Fix remaining auxilliary class warnings in Solr (Erick Erickson)
-
-* SOLR-14519: Fix or suppress warnings in solr/cloud/autoscaling/ (Erick Erickson)
-
-* SOLR-14526: fix or suppress warnings in apache/solr/core (Erick Erickson)
-
-* SOLR-14533: Fix or suppress warnings in solr/handler/admin (Andras Salamon, Erick Erickson)
-
-* SOLR-14535: Fix or suppress warnings in apache/solr/handler/component (Erick Erickson)
-
-* SOLR-14538: Fix or suppress remaining warnings in apache/solr/handler (Erick Erickson)
-
-* SOLR-14536: Fix or suppress warnings in apache/solr/common (Erick Erickson)
-
-* SOLR-14480: Fix or suppress warnings in solr/cloud/api (Erick Erickson)
-
-* SOLR-13492: Ensure explicit GCs are concurrent by adding '+ExplicitGCInvokesConcurrent'.
-  (Guna Sekhar Dora, Shawn Heisey, Munendra S N)
-
-* SOLR-14542: Fix or suppress warnings in solr/handler/dataimport (Erick Erickson)
-
-* SOLR-14544: Fix or suppress warnings in solr/client/solrj/io/eval (Erick Erickson)
-
-* SOLR-14543: Fix or suppress warnings in apache/solr/search (Erick Erickson)
-
-* SOLR-14545: Fix or suppress warnings in apache/solr/update (Erick Erickson)
-
-* SOLR-14548: Address warning: static member should be qualified by type name (Mike Drob)
-
-* SOLR-14547: Fix or suppress warnings in solr/client/solrj/io/stream (Erick Erickson)
-
-* SOLR-14455: Fix or suppress warnings in solr/test-framework (Erick Erickson)
-
-* SOLR-14559: Fix or suppress warnings in solr/core/src/java/org/apache/solr/util,
-  response, cloud, security, schema, api (Erick Erickson)
-
-* SOLR-14563: Fix or suppress warnings in solr/contrib (Erick Erickson)
-
-* SOLR-14565: Fix or suppress warnings in solrj/impl and solrj/io/graph (Erick Erickson)
-
-* SOLR-14564: Fix or suppress remaining warnings in solr/core (Erick Erickson)
-
-* SOLR-14567: Fix or suppress remaining warnings in solrj (Erick Erickson)
-
-* SOLR-14556: Fix or suppress warnings in solrj/cloud/autoscaling (Erick Erickson)
-
-* SOLR-14573: Fix or suppress warnings in solrj/src/test (Erick Erickson)
-
-* SOLR-14574: Fix or suppress warnings in solr/core/src/test (parts 1 and 2) (Erick Erickson)
-
-* SOLR-13268: Clean up any test failures resulting from defaulting to async logging (Erick Erickson)
-
-* LUCENE-9411: Fail complation on warnings, 9x gradle-only (Erick Erickson, Dawid Weiss)
-  Only mentioned in 8.6 because I backported some more warning suppressions but not
-  the fail-on-warnings.
-
-* SOLR-14589: Remove IntelliJ //noinspection comments (Erick Erickson)
-
-* SOLR-14541: Ensure classes that implement equals implement hashCode or suppress warnings
-  (gezapeti, Ilan Ginsburg, Erick Erickson)
-
-* SOLR-14022: Deprecate CDCR (Joel Bernstein, Ishan Chattopadhyaya)
-
-* SOLR-14066: Data Import Handler is deprecated. It is scheduled to be removed as of 9.0 and a community supported
-  package for the same may now be used instead. (Ishan Chattopadhyaya, janhoy)
-
-* SOLR-14021: HDFS support is deprecated. It is scheduled to be removed as of 9.0. Please see JIRA for more details.
-  (Joel Bernstein, Ishan Chattopadhyaya)
-
-* SOLR-14603: Upgrade Restlet to 2.4.3 (marcussorealheis)
-
-==================  8.5.2 ==================
-
-Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
-
-Bug Fixes
----------------------
-
-* SOLR-14411: Fix Admin UI collection/core drop-downs placeholder text. Completes work started in SOLR-14359 (janhoy)
-
-* SOLR-14471: Fix bug in shards.preference behavior, base replica selection strategy not applied to the last group of
-  equivalent replicas. (Michael Gibney via Tomás Fernández Löbbe)
-
-==================  8.5.1 ==================
-
-Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
-
-Bug Fixes
----------------------
-
-* SOLR-14359: Admin UI collection/core drop-downs had wrong placeholder text. Fixed by upgrading angular-chosen
-  This fix was incomplete, see SOLR-14411 for the followup (janhoy)
-
 ==================  8.5.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
 
 New Features
 ---------------------
-* SOLR-12490: Introducing json.queries in JSON Request API. Every property of this object holds one or many named
-   Query DSL queries. It's optional and doesn't impact response without explicit referencing these queries by names
+ * SOLR-12490: Introducing json.queries in JSON Request API. Every property of this object holds one or many named 
+   Query DSL queries. It's optional and doesn't impact response without explicit referencing these queries by names 
    (Anatolii Siuniaev via Mikhail Khludnev)
 
-* SOLR-14130: Add postlogs command line tool for indexing Solr logs (Joel Bernstein)
+ * SOLR-14130: Add postlogs command line tool for indexing Solr logs (Joel Bernstein)
 
-* SOLR-13749: New cross collection join filter (XCJF) (Dan Fox, Kevin Watters, via Gus Heck)
+ * SOLR-13749: New cross collection join filter (XCJF) (Dan Fox, Kevin Watters, via Gus Heck)
 
-* SOLR-12325: Introducing uniqueBlock({!v=type:parent}) aggregation (Anatolii Siuniaev via Mikhail Khludnev)
+ * SOLR-13892: New "top-level" docValues join implementation (Jason Gerlowski, Joel Bernstein)
 
-* SOLR-14241: New delete() Stream Decorator (hossman)
+ * SOLR-12325: Introducing uniqueBlock({!v=type:parent}) aggregation (Anatolii Siuniaev via Mikhail Khludnev)
 
-* SOLR-14139: Support backtick phrase queries in Streaming Expressions (Joel Bernstein)
+ * SOLR-14242: HdfsDirectory now supports indexing geo-points, ranges or shapes. (Adrien Grand)
 
-* SOLR-12238: Synonyms can be individually boosted by marking them with '|<boost>' in
-  the synonyms file, and adding a DelimitedBoostTokenFilter to the analysis chain
-  (Alessandro Benedetti, Alan Woodward)
+ * SOLR-14241: New delete() Stream Decorator (hossman)
+
+ * SOLR-13965: In GraphHandler, support <expressible> configuration and deprecate <streamFunctions> configuration.
+   (Eric Pugh via Christine Poerschke)
 
 Improvements
 ---------------------
@@ -613,6 +88,8 @@ Improvements
 * SOLR-13984: Java's SecurityManager sandbox can be enabled via environment variable,
   SOLR_SECURITY_MANAGER_ENABLED=true. (rmuir)
 
+* SOLR-13808: filter in BoolQParser and {"bool":{"filter":..}} in Query DSL are cached by default (Mikhail Khludnev)
+
 * SOLR-14129: Reuse Jackson ObjectMapper in AuditLoggerPlugin (janhoy)
 
 * LUCENE-9093: The Unified highlighter has two new passage sizing parameters, hl.fragAlignRatio and
@@ -634,18 +111,13 @@ Improvements
 
 * SOLR-14270: export command to have an option to write to a zip file (noble)
 
+* SOLR-14114: Add WARN to Solr log that embedded ZK is not supported in production (janhoy)
+
 * SOLR-14286: Upgrade Jaegar to 1.1.0 (Cao Manh Dat)
 
 * SOLR-14281: Make sharedLib configurable through system property. Also allow multiple paths, separated by comma.
   See Reference Guide 'format-of-solr-xml.adoc' and comment in 'solr.in.sh' for details (janhoy)
 
-* SOLR-13892: New "top-level" docValues join implementation (Jason Gerlowski, Joel Bernstein)
-
-* SOLR-14242: HdfsDirectory now supports indexing geo-points, ranges or shapes. (Adrien Grand)
-
-* SOLR-13965: In GraphHandler, support <expressible> configuration and deprecate <streamFunctions> configuration.
-   (Eric Pugh via Christine Poerschke)
-
 Optimizations
 ---------------------
 
@@ -654,8 +126,6 @@ Optimizations
   terms queries that are searching 500 or more terms.  Users wishing to ignore this heuristic can choose the
   docValuesTermsFilterTopLevel or docValuesTermsFilterPerSegment methods directly. (Jason Gerlowski, Joel Bernstein, David Smiley)
 
-* SOLR-13808: filter in BoolQParser and {"bool":{"filter":..}} in Query DSL are cached by default (Mikhail Khludnev)
-
 * SOLR-14040: The shareSchema solr.xml option now supports SolrCloud.  shareSchema is useful when you have many
   cores per node and large schemas.  (David Smiley)
 
@@ -724,10 +194,6 @@ Bug Fixes
 
 * SOLR-14287: Admin UI Properties screen does not show colons (janhoy)
 
-* SOLR-14299: IndexFetcher doesn't reset error count to 0 after the last packet is received (Pushkar Raste via Mike Drob)
-
-* SOLR-14073: Fix segment look ahead NPE in CollapsingQParserPlugin (Joel Bernstein)
-
 Other Changes
 ---------------------
 
@@ -762,11 +228,6 @@ Other Changes
 
 * SOLR-10306: Document in Reference Guide how to disable or reduce swapping (janhoy)
 
-* SOLR-13983: Process execution is removed from SystemInfoHandler. A best-effort attempt to
-execute `uname -a` and "`uptime`" on non-Windows platforms is no longer made. (rmuir)
-
-* SOLR-14114: Add WARN to Solr log that embedded ZK is not supported in production (janhoy)
-
 ==================  8.4.1 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
@@ -2981,7 +2442,7 @@ Upgrade Notes
   start scripts will no longer attempt this nor move existing console or GC logs into logs/archived either (SOLR-12144).
 
 * SOLR-11673: Slave doesn't commit empty index when completely new index is detected on master during replication.
-  To return the previous behavior pass false to skipCommitOnLeaderVersionZero in slave section of replication
+  To return the previous behavior pass false to skipCommitOnMasterVersionZero in slave section of replication
   handler configuration, or pass it to the fetchindex command.
 
 * SOLR-11453: Configuring slowQueryThresholdMillis now logs slow requests to a separate file - solr_slow_requests.log.
@@ -3141,7 +2602,7 @@ Bug Fixes
 * SOLR-12155: Exception from UnInvertedField constructor puts threads to infinite wait.
  (Andrey Kudryavtsev, Mikhail Khludnev)
 
-* SOLR-12201: TestReplicationHandler.doTestIndexFetchOnLeaderRestart(): handle unexpected replication failures
+* SOLR-12201: TestReplicationHandler.doTestIndexFetchOnMasterRestart(): handle unexpected replication failures
   (Steve Rowe)
 
 * SOLR-12190: Need to properly escape output in GraphMLResponseWriter. (yonik)
@@ -3777,7 +3238,7 @@ Other Changes
 * SOLR-12067: Increase autoAddReplicas default 30 second wait time to 120 seconds.
   (Varun Thacker, Mark Miller via shalin)
 
-* SOLR-12078: Fixed reproducable Failure in TestReplicationHandler.doTestIndexFetchOnLeaderRestart that happened
+* SOLR-12078: Fixed reproducable Failure in TestReplicationHandler.doTestIndexFetchOnMasterRestart that happened
   due to using stale http connections. (Gus Heck, shalin)
 
 * SOLR-12099: Remove reopenReaders attribute from 'IndexConfig in SolrConfig' page in ref guide. (shalin)
@@ -7116,8 +6577,8 @@ Other Changes
   (David Smiley)
 
 * SOLR-8842: security rules made more foolproof by asking the requesthandler  about the well known
-  permission name.  The APIs are also modified to ue 'index' as the unique identifier instead of name.
-  Name is an optional attribute  now and only to be used when specifying well-known permissions (noble)
+  permission name.
  The APIs are also modified to ue 'index' as the unique identifier instead of name.
+  Name is an optional attribute
  now and only to be used when specifying well-known permissions (noble)
 
 * SOLR-5616: Simplifies grouping code to use ResponseBuilder.needDocList() to determine if it needs to
   generate a doc list for grouped results. (Steven Bower, Keith Laban, Dennis Gove)
diff --git a/solr/NOTICE.txt b/solr/NOTICE.txt
index f60d6b4..c3213f8 100644
--- a/solr/NOTICE.txt
+++ b/solr/NOTICE.txt
@@ -49,7 +49,7 @@ Copyright (C) 2010-2014 James Burke, https://github.com/jrburke/requirejs
 This product includes angular-utf8-base64.js Javascript library created by Andrey Bezyazychniy
 Copyright (c) 2014 Andrey Bezyazychniy, https://github.com/stranger82/angular-utf8-base64
 
-This product includes code copied and modified from the www-authenticate Javascript library
+This product includes code copied and modified from the www-authenticate Javascript library 
 Copyright (c) 2013 Randy McLaughlin, MIT-license, https://github.com/randymized/www-authenticate
 
 This product includes fugue icons created by Yusuke Kamiyamane
@@ -76,6 +76,10 @@ the Apache Blur incubating project and are Apache License 2.0.
 ASM (Java bytecode manipulation and analysis framework): http://asm.ow2.org/
 Copyright (c) 2000-2005 INRIA, France Telecom
 
+This project includes portions of the Jekyll Documentation Theme
+Copyright (c) 2016 Tom Johnson
+License: MIT https://github.com/tomjohnson1492/documentation-theme-jekyll/blob/gh-pages/licenses/LICENSE
+
 This project includes templates from the Asciidoctor HTML5 backend converter
 Copyright (c) 2014-2018 Jakub Jirutka
 License: MIT https://github.com/jirutka/asciidoctor-html5s/blob/master/LICENSE
@@ -84,10 +88,6 @@ This project includes the Navgoco JQuery plugin
 Copyright (c) 2013 Christopher Tsoulloftas, http://www.komposta.net
 License: BSD https://github.com/tefra/navgoco/blob/master/LICENSE-BSD
 
-This project includes the Malihu Custom Scrollbar Plugin
-Copyright (c) Manos Malihutsakis, http://manos.malihu.gr/
-License: MIT https://github.com/malihu/malihu-custom-scrollbar-plugin/blob/master/LICENSE.txt
-
 =========================================================================
 ==  Antlr2 Notice                                                       ==
 =========================================================================
@@ -160,11 +160,6 @@ http://bitbucket.org/jpbarrette/moman/overview/
 The class org.apache.lucene.util.WeakIdentityMap was derived from
 the Apache CXF project and is Apache License 2.0.
 
-The class org.apache.lucene.util.compress.LZ4 is a Java rewrite of the LZ4
-compression library (https://github.com/lz4/lz4/tree/dev/lib) that is licensed
-under the 2-clause BSD license.
-(https://opensource.org/licenses/bsd-license.php)
-
 The Google Code Prettify is Apache License 2.0.
 See http://code.google.com/p/google-code-prettify/
 
diff --git a/solr/README.md b/solr/README.md
deleted file mode 100644
index 66e2fff..0000000
--- a/solr/README.md
+++ /dev/null
@@ -1,217 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
-Welcome to the Apache Solr project!
------------------------------------
-
-Solr is the popular, blazing fast open source enterprise search platform
-from the Apache Lucene project.
-
-For a complete description of the Solr project, team composition, source
-code repositories, and other details, please see the Solr web site at
-https://lucene.apache.org/solr
-
-
-Getting Started
----------------
-
-To start Solr for the first time after installation, simply do:
-
-```
-  bin/solr start
-```
-
-This will launch a standalone Solr server in the background of your shell,
-listening on port 8983. Alternatively, you can launch Solr in "cloud" mode,
-which allows you to scale out using sharding and replication. To launch Solr
-in cloud mode, do:
-
-```
-  bin/solr start -cloud
-```
-
-To see all available options for starting Solr, please do:
-
-```
-  bin/solr start -help
-```
-
-After starting Solr, create either a core or collection depending on whether
-Solr is running in standalone (core) or SolrCloud mode (collection) by doing:
-
-```
-  bin/solr create -c <name>
-```
-
-This will create a collection that uses a data-driven schema which tries to guess
-the correct field type when you add documents to the index. To see all available
-options for creating a new collection, execute:
-
-```
-  bin/solr create -help
-```
-
-After starting Solr, direct your Web browser to the Solr Admin Console at:
-
-```
-  http://localhost:8983/solr/
-```
-
-When finished with your Solr installation, shut it down by executing:
-
-```
-  bin/solr stop -all
-```
-
-The `-p PORT` option can also be used to identify the Solr instance to shutdown,
-where more than one Solr is running on the machine.
-
-
-Solr Examples
----------------
-
-Solr includes a few examples to help you get started. To run a specific example, do:
-
-```
-  bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:
-
-    cloud        : SolrCloud example
-    dih          : Data Import Handler (rdbms, mail, atom, tika)
-    schemaless   : Schema-less example (schema is inferred from data during indexing)
-    techproducts : Kitchen sink example providing comprehensive examples of Solr features
-```
-
-For instance, if you want to run the Solr Data Import Handler example, do:
-
-```
-  bin/solr -e dih
-```
-
-Indexing Documents
----------------
-
-To add documents to the index, use bin/post.  For example:
-
-```
-     bin/post -c <collection_name> example/exampledocs/*.xml
-```
-
-For more information about Solr examples please read...
-
- * [example/README.md](example/README.md)
-   
-For more information about the "Solr Home" and Solr specific configuration
- 
- * https://lucene.apache.org/solr/guide/solr-tutorial.html
-   
-For a Solr tutorial
- 
- * https://lucene.apache.org/solr/resources.html
-
-For a list of other tutorials and introductory articles.
-
-or linked from "docs/index.html" in a binary distribution.
-
-Also, there are Solr clients for many programming languages, see
-
-  * https://wiki.apache.org/solr/IntegratingSolr
-
-
-Files included in an Apache Solr binary distribution
-----------------------------------------------------
-
-```
-server/
-  A self-contained Solr instance, complete with a sample
-  configuration and documents to index. Please see: bin/solr start -help
-  for more information about starting a Solr server.
-
-example/
-  Contains example documents and an alternative Solr home
-  directory containing examples of how to use the Data Import Handler,
-  see example/example-DIH/README.md for more information.
-
-dist/solr-<component>-XX.jar
-  The Apache Solr libraries.  To compile Apache Solr Plugins,
-  one or more of these will be required.  The core library is
-  required at a minimum. (see http://wiki.apache.org/solr/SolrPlugins
-  for more information).
-
-docs/index.html
-  A link to the online version of Apache Solr Javadoc API documentation and Tutorial
-```
-
-Instructions for Building Apache Solr from Source
--------------------------------------------------
-
-1. Download the Java 11 JDK (Java Development Kit) or later from https://jdk.java.net/
-   You will need the JDK installed, and the $JAVA_HOME/bin (Windows: %JAVA_HOME%\bin)
-   folder included on your command path. To test this, issue a "java -version" command
-   from your shell (command prompt) and verify that the Java version is 11 or later.
-
-2. Download the Apache Ant binary distribution (1.8.2+) from
-   http://ant.apache.org/  You will need Ant installed and the $ANT_HOME/bin (Windows:
-   %ANT_HOME%\bin) folder included on your command path. To test this, issue a
-   "ant -version" command from your shell (command prompt) and verify that Ant is
-   available.
-
-   You will also need to install Apache Ivy binary distribution (2.2.0) from
-   http://ant.apache.org/ivy/ and place ivy-2.2.0.jar file in ~/.ant/lib -- if you skip
-   this step, the Solr build system will offer to do it for you.
-
-3. Download the Apache Solr distribution, linked from the above web site.
-   Unzip the distribution to a folder of your choice, e.g. C:\solr or ~/solr
-   Alternately, you can obtain a copy of the latest Apache Solr source code
-   directly from the GIT repository:
-
-     https://lucene.apache.org/solr/versioncontrol.html
-
-4. Navigate to the "solr" folder and issue an "ant" command to see the available options
-   for building, testing, and packaging Solr.
-
-   NOTE:
-   To see Solr in action, you may want to use the "ant server" command to build
-   and package Solr into the server directory. See also server/README.md.
-
-
-Export control
--------------------------------------------------
-This distribution includes cryptographic software.  The country in
-which you currently reside may have restrictions on the import,
-possession, use, and/or re-export to another country, of
-encryption software.  BEFORE using any encryption software, please
-check your country's laws, regulations and policies concerning the
-import, possession, or use, and re-export of encryption software, to
-see if this is permitted.  See <http://www.wassenaar.org/> for more
-information.
-
-The U.S. Government Department of Commerce, Bureau of Industry and
-Security (BIS), has classified this software as Export Commodity
-Control Number (ECCN) 5D002.C.1, which includes information security
-software using or performing cryptographic functions with asymmetric
-algorithms.  The form and manner of this Apache Software Foundation
-distribution makes it eligible for export under the License Exception
-ENC Technology Software Unrestricted (TSU) exception (see the BIS
-Export Administration Regulations, Section 740.13) for both object
-code and source code.
-
-The following provides more details on the included cryptographic
-software:
-
-Apache Solr uses the Apache Tika which uses the Bouncy Castle generic encryption libraries for
-extracting text content and metadata from encrypted PDF files.
-See http://www.bouncycastle.org/ for more details on Bouncy Castle.
diff --git a/solr/README.txt b/solr/README.txt
new file mode 100644
index 0000000..80d26d5
--- /dev/null
+++ b/solr/README.txt
@@ -0,0 +1,189 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+Welcome to the Apache Solr project!
+-----------------------------------
+
+Solr is the popular, blazing fast open source enterprise search platform
+from the Apache Lucene project.
+
+For a complete description of the Solr project, team composition, source
+code repositories, and other details, please see the Solr web site at
+http://lucene.apache.org/solr
+
+
+Getting Started
+---------------
+
+To start Solr for the first time after installation, simply do:
+
+  bin/solr start
+
+This will launch a standalone Solr server in the background of your shell,
+listening on port 8983. Alternatively, you can launch Solr in "cloud" mode,
+which allows you to scale out using sharding and replication. To launch Solr
+in cloud mode, do:
+
+  bin/solr start -cloud
+
+To see all available options for starting Solr, please do:
+
+  bin/solr start -help
+
+After starting Solr, create either a core or collection depending on whether
+Solr is running in standalone (core) or SolrCloud mode (collection) by doing:
+
+  bin/solr create -c <name>
+
+This will create a collection that uses a data-driven schema which tries to guess
+the correct field type when you add documents to the index. To see all available
+options for creating a new collection, execute:
+
+  bin/solr create -help
+
+After starting Solr, direct your Web browser to the Solr Admin Console at:
+
+  http://localhost:8983/solr/
+
+When finished with your Solr installation, shut it down by executing:
+
+  bin/solr stop -all
+
+The `-p PORT` option can also be used to identify the Solr instance to shutdown,
+where more than one Solr is running on the machine.
+
+
+Solr Examples
+---------------
+
+Solr includes a few examples to help you get started. To run a specific example, do:
+
+  bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:
+
+    cloud        : SolrCloud example
+    dih          : Data Import Handler (rdbms, mail, atom, tika)
+    schemaless   : Schema-less example (schema is inferred from data during indexing)
+    techproducts : Kitchen sink example providing comprehensive examples of Solr features
+
+For instance, if you want to run the Solr Data Import Handler example, do:
+
+  bin/solr -e dih
+
+
+Indexing Documents
+---------------
+
+To add documents to the index, use bin/post.  For example:
+
+     bin/post -c <collection_name> example/exampledocs/*.xml
+
+For more information about Solr examples please read...
+
+ * example/README.txt
+   For more information about the "Solr Home" and Solr specific configuration
+ * https://lucene.apache.org/solr/guide/solr-tutorial.html
+   For a Solr tutorial
+ * http://lucene.apache.org/solr/resources.html
+   For a list of other tutorials and introductory articles.
+
+or linked from "docs/index.html" in a binary distribution.
+
+Also, there are Solr clients for many programming languages, see
+   http://wiki.apache.org/solr/IntegratingSolr
+
+
+Files included in an Apache Solr binary distribution
+----------------------------------------------------
+
+server/
+  A self-contained Solr instance, complete with a sample
+  configuration and documents to index. Please see: bin/solr start -help
+  for more information about starting a Solr server.
+
+example/
+  Contains example documents and an alternative Solr home
+  directory containing examples of how to use the Data Import Handler,
+  see example/example-DIH/README.txt for more information.
+
+dist/solr-<component>-XX.jar
+  The Apache Solr libraries.  To compile Apache Solr Plugins,
+  one or more of these will be required.  The core library is
+  required at a minimum. (see http://wiki.apache.org/solr/SolrPlugins
+  for more information).
+
+docs/index.html
+  A link to the online version of Apache Solr Javadoc API documentation and Tutorial
+
+
+Instructions for Building Apache Solr from Source
+-------------------------------------------------
+
+1. Download the Java 11 JDK (Java Development Kit) or later from https://jdk.java.net/
+   You will need the JDK installed, and the $JAVA_HOME/bin (Windows: %JAVA_HOME%\bin)
+   folder included on your command path. To test this, issue a "java -version" command
+   from your shell (command prompt) and verify that the Java version is 11 or later.
+
+2. Download the Apache Ant binary distribution (1.8.2+) from
+   http://ant.apache.org/  You will need Ant installed and the $ANT_HOME/bin (Windows:
+   %ANT_HOME%\bin) folder included on your command path. To test this, issue a
+   "ant -version" command from your shell (command prompt) and verify that Ant is
+   available.
+
+   You will also need to install Apache Ivy binary distribution (2.2.0) from
+   http://ant.apache.org/ivy/ and place ivy-2.2.0.jar file in ~/.ant/lib -- if you skip
+   this step, the Solr build system will offer to do it for you.
+
+3. Download the Apache Solr distribution, linked from the above web site.
+   Unzip the distribution to a folder of your choice, e.g. C:\solr or ~/solr
+   Alternately, you can obtain a copy of the latest Apache Solr source code
+   directly from the GIT repository:
+
+     http://lucene.apache.org/solr/versioncontrol.html
+
+4. Navigate to the "solr" folder and issue an "ant" command to see the available options
+   for building, testing, and packaging Solr.
+
+   NOTE:
+   To see Solr in action, you may want to use the "ant server" command to build
+   and package Solr into the server directory. See also server/README.txt.
+
+
+Export control
+-------------------------------------------------
+This distribution includes cryptographic software.  The country in
+which you currently reside may have restrictions on the import,
+possession, use, and/or re-export to another country, of
+encryption software.  BEFORE using any encryption software, please
+check your country's laws, regulations and policies concerning the
+import, possession, or use, and re-export of encryption software, to
+see if this is permitted.  See <http://www.wassenaar.org/> for more
+information.
+
+The U.S. Government Department of Commerce, Bureau of Industry and
+Security (BIS), has classified this software as Export Commodity
+Control Number (ECCN) 5D002.C.1, which includes information security
+software using or performing cryptographic functions with asymmetric
+algorithms.  The form and manner of this Apache Software Foundation
+distribution makes it eligible for export under the License Exception
+ENC Technology Software Unrestricted (TSU) exception (see the BIS
+Export Administration Regulations, Section 740.13) for both object
+code and source code.
+
+The following provides more details on the included cryptographic
+software:
+    Apache Solr uses the Apache Tika which uses the Bouncy Castle generic encryption libraries for
+    extracting text content and metadata from encrypted PDF files.
+    See http://www.bouncycastle.org/ for more details on Bouncy Castle.
diff --git a/solr/bin/solr b/solr/bin/solr
index 7e3cf0c6..11f5081 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -103,17 +103,10 @@ fi
 
 if [ -n "$SOLR_JAVA_HOME" ]; then
   JAVA="$SOLR_JAVA_HOME/bin/java"
-  JSTACK="$SOLR_JAVA_HOME/bin/jstack"
 elif [ -n "$JAVA_HOME" ]; then
-  for java in "$JAVA_HOME"/bin/amd64 "$JAVA_HOME"/bin; do
-    if [ -x "$java/java" ]; then
-      JAVA="$java/java"
-      if [ -x "$java/jstack" ]; then
-        JSTACK="$java/jstack"
-      else
-        echo >&2 "The currently defined JAVA_HOME ($JAVA_HOME) refers to a location"
-        echo >&2 "where java was found but jstack was not found. Continuing."
-      fi
+  for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
+    if [ -x "$java" ]; then
+      JAVA="$java"
       break
     fi
   done
@@ -126,7 +119,6 @@ elif [ -n "$JAVA_HOME" ]; then
   fi
 else
   JAVA=java
-  JSTACK=jstack
 fi
 
 if [ -z "$SOLR_STOP_WAIT" ]; then
@@ -330,7 +322,7 @@ function print_usage() {
   if [ -z "$CMD" ]; then
     echo ""
     echo "Usage: solr COMMAND OPTIONS"
-    echo "       where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, export"
+    echo "       where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, autoscaling, export"
     echo ""
     echo "  Standalone server example (start Solr running in the background on port 8984):"
     echo ""
@@ -829,7 +821,6 @@ function run_package() {
 
 # tries to gracefully stop Solr using the Jetty
 # stop command and if that fails, then uses kill -9
-# (will attempt to jstack before killing)
 function stop_solr() {
 
   DIR="$1"
@@ -866,15 +857,11 @@ function stop_solr() {
 
   CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
   if [ "$CHECK_PID" != "" ]; then
-    if [ "$JSTACK" != "" ]; then
-      echo -e "Solr process $SOLR_PID is still running; jstacking it now."
-      $JSTACK $SOLR_PID
-    fi
     echo -e "Solr process $SOLR_PID is still running; forcefully killing it now."
     kill -9 $SOLR_PID
     echo "Killed process $SOLR_PID"
     rm -f "$SOLR_PID_DIR/solr-$SOLR_PORT.pid"
-    sleep 10
+    sleep 1
   fi
 
   CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
@@ -1417,6 +1404,11 @@ if [[ "$SCRIPT_CMD" == "zk" ]]; then
 fi
 
 
+if [[ "$SCRIPT_CMD" == "autoscaling" ]]; then
+  run_tool autoscaling $@
+  exit $?
+fi
+
 if [[ "$SCRIPT_CMD" == "export" ]]; then
   run_tool export $@
   exit $?
@@ -2105,14 +2097,6 @@ else
   SECURITY_MANAGER_OPTS=()
 fi
 
-# Enable ADMIN UI by default, and give the option for users to disable it
-if [ "$SOLR_ADMIN_UI_DISABLED" == "true" ]; then
-  SOLR_ADMIN_UI="-DdisableAdminUI=true"
-  echo -e "ADMIN UI Disabled"
-else
-  SOLR_ADMIN_UI="-DdisableAdminUI=false"
-fi
-
 JAVA_MEM_OPTS=()
 if [ -z "$SOLR_HEAP" ] && [ -n "$SOLR_JAVA_MEM" ]; then
   JAVA_MEM_OPTS=($SOLR_JAVA_MEM)
@@ -2147,8 +2131,7 @@ function start_solr() {
         '-XX:+ParallelRefProcEnabled' \
         '-XX:MaxGCPauseMillis=250' \
         '-XX:+UseLargePages' \
-        '-XX:+AlwaysPreTouch' \
-        '-XX:+ExplicitGCInvokesConcurrent')
+        '-XX:+AlwaysPreTouch')
   else
     GC_TUNE=($GC_TUNE)
   fi
@@ -2159,7 +2142,7 @@ function start_solr() {
   fi
 
   # If SSL-related system props are set, add them to SOLR_OPTS
-  if [ "$SOLR_SSL_ENABLED" == "true" ]; then
+  if [ "$SOLR_SSL_ENABLED" ]; then
     # If using SSL and solr.jetty.https.port not set explicitly, use the jetty.port
     SSL_PORT_PROP="-Dsolr.jetty.https.port=$SOLR_PORT"
     SOLR_OPTS+=($SOLR_SSL_OPTS "$SSL_PORT_PROP")
@@ -2221,11 +2204,9 @@ function start_solr() {
   SOLR_START_OPTS=('-server' "${JAVA_MEM_OPTS[@]}" "${GC_TUNE[@]}" "${GC_LOG_OPTS[@]}" "${IP_ACL_OPTS[@]}" \
     "${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}" $SOLR_LOG_LEVEL_OPT -Dsolr.log.dir="$SOLR_LOGS_DIR" \
     "-Djetty.port=$SOLR_PORT" "-DSTOP.PORT=$stop_port" "-DSTOP.KEY=$STOP_KEY" \
-    # '-OmitStackTraceInFastThrow' ensures stack traces in errors,
-    # users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow
-    "${SOLR_HOST_ARG[@]}" "-Duser.timezone=$SOLR_TIMEZONE" "-XX:-OmitStackTraceInFastThrow" \
+    "${SOLR_HOST_ARG[@]}" "-Duser.timezone=$SOLR_TIMEZONE" \
     "-Djetty.home=$SOLR_SERVER_DIR" "-Dsolr.solr.home=$SOLR_HOME" "-Dsolr.data.home=$SOLR_DATA_HOME" "-Dsolr.install.dir=$SOLR_TIP" \
-    "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}" "${SOLR_ADMIN_UI}")
+    "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}")
 
   if [ "$SOLR_MODE" == "solrcloud" ]; then
     IN_CLOUD_MODE=" in SolrCloud mode"
diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd
index 8fb5e7a..2f28bd6 100755
--- a/solr/bin/solr.cmd
+++ b/solr/bin/solr.cmd
@@ -224,6 +224,7 @@ IF "%1"=="version" goto get_version
 IF "%1"=="-v" goto get_version
 IF "%1"=="-version" goto get_version
 IF "%1"=="assert" goto run_assert
+IF "%1"=="autoscaling" goto run_autoscaling
 IF "%1"=="export" goto run_export
 IF "%1"=="package" goto run_package
 
@@ -302,7 +303,7 @@ goto done
 :script_usage
 @echo.
 @echo Usage: solr COMMAND OPTIONS
-@echo        where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, export
+@echo        where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, autoscaling, export
 @echo.
 @echo   Standalone server example (start Solr running in the background on port 8984):
 @echo.
@@ -1041,10 +1042,13 @@ IF "%SCRIPT_CMD%"=="stop" (
                 del "%SOLR_TIP%"\bin\solr-!SOME_SOLR_PORT!.port
                 timeout /T 5
                 REM Kill it if it is still running after the graceful shutdown
-                IF EXIST "%JAVA_HOME%\bin\jstack.exe" (
-                  qprocess "%%k" >nul 2>nul && "%JAVA_HOME%\bin\jstack.exe" %%k && taskkill /f /PID %%k
-                ) else (
-                  qprocess "%%k" >nul 2>nul && taskkill /f /PID %%k
+                For /f "tokens=2,5" %%M in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
+                  IF "%%N"=="%%k" (
+                    IF "%%M"=="%SOLR_JETTY_HOST%:!SOME_SOLR_PORT!" (
+                      @echo Forcefully killing process %%N
+                      taskkill /f /PID %%N
+                    )
+                  )
                 )
               )
             )
@@ -1068,10 +1072,13 @@ IF "%SCRIPT_CMD%"=="stop" (
           del "%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port
           timeout /T 5
           REM Kill it if it is still running after the graceful shutdown
-          IF EXIST "%JAVA_HOME%\bin\jstack.exe" (
-            qprocess "%%N" >nul 2>nul && "%JAVA_HOME%\bin\jstack.exe" %%N && taskkill /f /PID %%N
-          ) else (
-            qprocess "%%N" >nul 2>nul && taskkill /f /PID %%N
+          For /f "tokens=2,5" %%j in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":%SOLR_PORT% "') do (
+            IF "%%N"=="%%k" (
+              IF "%%j"=="%SOLR_JETTY_HOST%:%SOLR_PORT%" (
+                @echo Forcefully killing process %%N
+                taskkill /f /PID %%N
+              )
+            )
           )
         )
       )
@@ -1192,13 +1199,6 @@ IF "%SOLR_SECURITY_MANAGER_ENABLED%"=="true" (
 -Dsolr.internal.network.permission=*
 )
 
-REM Enable ADMIN UI by default, and give the option for users to disable it
-IF "%SOLR_ADMIN_UI_DISABLED%"=="true" (
-  set DISABLE_ADMIN_UI="true"
-) else (
-  set DISABLE_ADMIN_UI="false"
-)
-
 IF NOT "%SOLR_HEAP%"=="" set SOLR_JAVA_MEM=-Xms%SOLR_HEAP% -Xmx%SOLR_HEAP%
 IF "%SOLR_JAVA_MEM%"=="" set SOLR_JAVA_MEM=-Xms512m -Xmx512m
 IF "%SOLR_JAVA_STACK_SIZE%"=="" set SOLR_JAVA_STACK_SIZE=-Xss256k
@@ -1211,8 +1211,7 @@ IF "%GC_TUNE%"=="" (
     -XX:+ParallelRefProcEnabled ^
     -XX:MaxGCPauseMillis=250 ^
     -XX:+UseLargePages ^
-    -XX:+AlwaysPreTouch ^
-    -XX:+ExplicitGCInvokesConcurrent
+    -XX:+AlwaysPreTouch
 )
 
 if !JAVA_MAJOR_VERSION! GEQ 9  (
@@ -1285,11 +1284,7 @@ IF "%verbose%"=="1" (
 )
 
 set START_OPTS=-Duser.timezone=%SOLR_TIMEZONE%
-REM '-OmitStackTraceInFastThrow' ensures stack traces in errors,
-REM users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow
-set "START_OPTS=%START_OPTS% -XX:-OmitStackTraceInFastThrow"
 set START_OPTS=%START_OPTS% !GC_TUNE! %GC_LOG_OPTS%
-set START_OPTS=%START_OPTS% -DdisableAdminUI=%DISABLE_ADMIN_UI%
 IF NOT "!CLOUD_MODE_OPTS!"=="" set "START_OPTS=%START_OPTS% !CLOUD_MODE_OPTS!"
 IF NOT "!IP_ACL_OPTS!"=="" set "START_OPTS=%START_OPTS% !IP_ACL_OPTS!"
 IF NOT "%REMOTE_JMX_OPTS%"=="" set "START_OPTS=%START_OPTS% %REMOTE_JMX_OPTS%"
@@ -1453,6 +1448,13 @@ if errorlevel 1 (
 )
 goto done
 
+:run_autoscaling
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+  -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+  -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+  org.apache.solr.util.SolrCLI %* 
+goto done:
+
 :run_export
 "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
   -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
diff --git a/solr/bin/solr.in.cmd b/solr/bin/solr.in.cmd
index 0c752da..f018f31 100755
--- a/solr/bin/solr.in.cmd
+++ b/solr/bin/solr.in.cmd
@@ -35,7 +35,6 @@ REM set GC_LOG_OPTS=-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+Prin
 
 REM Various GC settings have shown to work well for a number of common Solr workloads.
 REM See solr.cmd GC_TUNE for the default list.
-REM set GC_TUNE=-XX:+ExplicitGCInvokesConcurrent
 REM set GC_TUNE=-XX:SurvivorRatio=4
 REM set GC_TUNE=%GC_TUNE% -XX:TargetSurvivorRatio=90
 REM set GC_TUNE=%GC_TUNE% -XX:MaxTenuringThreshold=8
@@ -48,7 +47,8 @@ REM set GC_TUNE=%GC_TUNE% -XX:+UseCMSInitiatingOccupancyOnly
 REM set GC_TUNE=%GC_TUNE% -XX:CMSInitiatingOccupancyFraction=50
 REM set GC_TUNE=%GC_TUNE% -XX:CMSMaxAbortablePrecleanTime=6000
 REM set GC_TUNE=%GC_TUNE% -XX:+CMSParallelRemarkEnabled
-REM set GC_TUNE=%GC_TUNE% -XX:+ParallelRefProcEnabled      etc.
+REM set GC_TUNE=%GC_TUNE% -XX:+ParallelRefProcEnabled
+REM set GC_TUNE=%GC_TUNE% -XX:-OmitStackTraceInFastThrow    etc.
 
 REM Set the ZooKeeper connection string if using an external ZooKeeper ensemble
 REM e.g. host1:2181,host2:2181/chroot
@@ -132,9 +132,9 @@ REM to enable https module with custom jetty configuration.
 REM set SOLR_SSL_ENABLED=true
 REM Uncomment to set SSL-related system properties
 REM Be sure to update the paths to the correct keystore for your environment
-REM set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.p12
+REM set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
 REM set SOLR_SSL_KEY_STORE_PASSWORD=secret
-REM set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.p12
+REM set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
 REM set SOLR_SSL_TRUST_STORE_PASSWORD=secret
 REM Require clients to authenticate
 REM set SOLR_SSL_NEED_CLIENT_AUTH=false
@@ -168,13 +168,13 @@ REM * javax.net.ssl.keyStorePassword
 REM * javax.net.ssl.trustStorePassword
 REM More info: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CredentialProviderAPI.html
 REM set SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH=localjceks://file/home/solr/hadoop-credential-provider.jceks
-REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.ssl.credential.provider.chain=hadoop
+REM set SOLR_OPTS=" -Dsolr.ssl.credential.provider.chain=hadoop"
 
 REM Settings for authentication
 REM Please configure only one of SOLR_AUTHENTICATION_CLIENT_BUILDER or SOLR_AUTH_TYPE parameters
 REM set SOLR_AUTHENTICATION_CLIENT_BUILDER=org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory
 REM set SOLR_AUTH_TYPE=basic
-REM set SOLR_AUTHENTICATION_OPTS=-Dbasicauth=solr:SolrRocks
+REM set SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"
 
 REM Settings for ZK ACL
 REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
@@ -187,29 +187,20 @@ REM When running Solr in non-cloud mode and if planning to do distributed search
 REM list of hosts needs to be whitelisted or Solr will forbid the request. The whitelist can be configured in solr.xml,
 REM or if you are using the OOTB solr.xml, can be specified using the system property "solr.shardsWhitelist". Alternatively
 REM host checking can be disabled by using the system property "solr.disable.shardsWhitelist"
-REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.shardsWhitelist=http://localhost:8983,http://localhost:8984
+REM set SOLR_OPTS="%SOLR_OPTS% -Dsolr.shardsWhitelist=http://localhost:8983,http://localhost:8984"
 
 REM For a visual indication in the Admin UI of what type of environment this cluster is, configure
 REM a -Dsolr.environment property below. Valid values are prod, stage, test, dev, with an optional
 REM label or color, e.g. -Dsolr.environment=test,label=Functional+test,color=brown
-REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.environment=prod
+REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.environment=prod"
 
 REM Specifies the path to a common library directory that will be shared across all cores.
 REM Any JAR files in this directory will be added to the search path for Solr plugins.
 REM If the specified path is not absolute, it will be relative to `%SOLR_HOME%`.
-REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.sharedLib=/path/to/lib
+REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.sharedLib=/path/to/lib"
 
 REM Runs solr in a java security manager sandbox. This can protect against some attacks.
 REM Runtime properties are passed to the security policy file (server\etc\security.policy)
 REM You can also tweak via standard JDK files such as ~\.java.policy, see https://s.apache.org/java8policy
 REM This is experimental! It may not work at all with Hadoop/HDFS features.
-REM set SOLR_SECURITY_MANAGER_ENABLED=true
-REM This variable provides you with the option to disable the Admin UI. if you uncomment the variable below and
-REM change the value to true. The option is configured as a system property as defined in SOLR_START_OPTS in the start
-REM scripts.
-REM set SOLR_ADMIN_UI_DISABLED=false
-
-REM Solr is by default allowed to read and write data from/to SOLR_HOME and a few other well defined locations
-REM Sometimes it may be necessary to place a core or a backup on a different location or a different disk
-REM This parameter lets you specify file system path(s) to explicitly allow. The special value of '*' will allow any path
-REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.allowPaths=D:\,E:\other\path"
+REM set SOLR_SECURITY_MANAGER_ENABLED=true
\ No newline at end of file
diff --git a/solr/bin/solr.in.sh b/solr/bin/solr.in.sh
index 2192aa4..3b31cdc 100644
--- a/solr/bin/solr.in.sh
+++ b/solr/bin/solr.in.sh
@@ -47,7 +47,6 @@
 
 # These GC settings have shown to work well for a number of common Solr workloads
 #GC_TUNE=" \
-#-XX:+ExplicitGCInvokesConcurrent \
 #-XX:SurvivorRatio=4 \
 #-XX:TargetSurvivorRatio=90 \
 #-XX:MaxTenuringThreshold=8 \
@@ -59,7 +58,8 @@
 #-XX:CMSInitiatingOccupancyFraction=50 \
 #-XX:CMSMaxAbortablePrecleanTime=6000 \
 #-XX:+CMSParallelRemarkEnabled \
-#-XX:+ParallelRefProcEnabled        etc.
+#-XX:+ParallelRefProcEnabled \
+#-XX:-OmitStackTraceInFastThrow  etc.
 
 # Set the ZooKeeper connection string if using an external ZooKeeper ensemble
 # e.g. host1:2181,host2:2181/chroot
@@ -152,9 +152,9 @@
 #SOLR_SSL_ENABLED=true
 # Uncomment to set SSL-related system properties
 # Be sure to update the paths to the correct keystore for your environment
-#SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.p12
+#SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
 #SOLR_SSL_KEY_STORE_PASSWORD=secret
-#SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.p12
+#SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
 #SOLR_SSL_TRUST_STORE_PASSWORD=secret
 # Require clients to authenticate
 #SOLR_SSL_NEED_CLIENT_AUTH=false
@@ -235,12 +235,4 @@
 # You can also tweak via standard JDK files such as ~/.java.policy, see https://s.apache.org/java8policy
 # This is experimental! It may not work at all with Hadoop/HDFS features.
 #SOLR_SECURITY_MANAGER_ENABLED=true
-# This variable provides you with the option to disable the Admin UI. if you uncomment the variable below and
-# change the value to true. The option is configured as a system property as defined in SOLR_START_OPTS in the start
-# scripts.
-# SOLR_ADMIN_UI_DISABLED=false
-
-# Solr is by default allowed to read and write data from/to SOLR_HOME and a few other well defined locations
-# Sometimes it may be necessary to place a core or a backup on a different location or a different disk
-# This parameter lets you specify file system path(s) to explicitly allow. The special value of '*' will allow any path
-#SOLR_OPTS="$SOLR_OPTS -Dsolr.allowPaths=/mnt/bigdisk,/other/path"
+
diff --git a/solr/build.gradle b/solr/build.gradle
index 9edc4d1..148c8e8 100644
--- a/solr/build.gradle
+++ b/solr/build.gradle
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-description = 'Parent project for Apache Solr'
-
 subprojects {
   group "org.apache.solr"
 }
\ No newline at end of file
diff --git a/solr/build.xml b/solr/build.xml
index c3cf6bc..f20727e 100644
--- a/solr/build.xml
+++ b/solr/build.xml
@@ -57,7 +57,7 @@
         <attribute name="Main-Class" value="org.apache.solr.util.SimplePostTool"/>
       </manifest>
     </jar>
-    <echo>See ${common-solr.dir}/README.md for how to run the Solr server.</echo>
+    <echo>See ${common-solr.dir}/README.txt for how to run the Solr server.</echo>
   </target>
   
   <target name="run-example" depends="server"
@@ -207,8 +207,8 @@
     </xslt>
     
     <markdown todir="${javadoc.dir}">
-      <fileset dir="site" includes="**/*.md" excludes="**/*.template.md"/>
-      <globmapper from="*.md" to="*.html"/>
+      <fileset dir="site" includes="**/*.mdtext"/>
+      <globmapper from="*.mdtext" to="*.html"/>
     </markdown>
 
     <copy todir="${javadoc.dir}">
@@ -459,7 +459,7 @@
                   fullpath="${fullnamever}/solr/LUCENE_CHANGES.txt" />
       <tarfileset dir="${src.export.dir}"
                   prefix="${fullnamever}"
-                  excludes="solr/example/**/*.sh solr/example/**/bin/ solr/scripts/** gradle/wrapper/gradle-wrapper.jar"/>
+                  excludes="solr/example/**/*.sh solr/example/**/bin/ solr/scripts/**"/>
       <tarfileset dir="${src.export.dir}"
                   prefix="${fullnamever}"
                   filemode="755"
@@ -530,8 +530,8 @@
                   fullpath="${fullnamever}/LUCENE_CHANGES.txt" />
       <tarfileset dir="."
                   prefix="${fullnamever}"
-                  includes="LICENSE.txt NOTICE.txt CHANGES.txt README.md site/SYSTEM_REQUIREMENTS.md
-                            bin/** server/** example/** contrib/**/lib/** contrib/**/conf/** contrib/**/README.md
+                  includes="LICENSE.txt NOTICE.txt CHANGES.txt README.txt SYSTEM_REQUIREMENTS.txt
+                            bin/** server/** example/** contrib/**/lib/** contrib/**/conf/** contrib/**/README.txt
                             licenses/**"
                   excludes="licenses/README.committers.txt **/data/ **/logs/* 
                             **/classes/ **/*.sh **/ivy.xml **/build.xml
diff --git a/solr/contrib/analysis-extras/README.md b/solr/contrib/analysis-extras/README.md
deleted file mode 100644
index 29f4219..0000000
--- a/solr/contrib/analysis-extras/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-Apache Solr - Analysis Extras
-=============================
-
-The analysis-extras plugin provides additional analyzers that rely
-upon large dependencies/dictionaries.
-
-It includes integration with ICU for multilingual support,
-analyzers for Chinese and Polish, and integration with
-OpenNLP for multilingual tokenization, part-of-speech tagging
-lemmatization, phrase chunking, and named-entity recognition.
-
-Each of the jars below relies upon including `/dist/solr-analysis-extras-X.Y.jar`
-in the `solrconfig.xml`
-
-* ICU relies upon `lucene-libs/lucene-analyzers-icu-X.Y.jar`
-and `lib/icu4j-X.Y.jar`
-
-* Smartcn relies upon `lucene-libs/lucene-analyzers-smartcn-X.Y.jar`
-
-* Stempel relies on `lucene-libs/lucene-analyzers-stempel-X.Y.jar`
-
-* Morfologik relies on `lucene-libs/lucene-analyzers-morfologik-X.Y.jar`
-and `lib/morfologik-*.jar`
-
-* OpenNLP relies on `lucene-libs/lucene-analyzers-opennlp-X.Y.jar`
-and `lib/opennlp-*.jar`
diff --git a/solr/contrib/analysis-extras/README.txt b/solr/contrib/analysis-extras/README.txt
new file mode 100644
index 0000000..236195e
--- /dev/null
+++ b/solr/contrib/analysis-extras/README.txt
@@ -0,0 +1,23 @@
+The analysis-extras plugin provides additional analyzers that rely
+upon large dependencies/dictionaries.
+
+It includes integration with ICU for multilingual support,
+analyzers for Chinese and Polish, and integration with
+OpenNLP for multilingual tokenization, part-of-speech tagging
+lemmatization, phrase chunking, and named-entity recognition.
+
+Each of the jars below relies upon including /dist/solr-analysis-extras-X.Y.jar 
+in the solrconfig.xml
+
+ICU relies upon lucene-libs/lucene-analyzers-icu-X.Y.jar
+and lib/icu4j-X.Y.jar
+
+Smartcn relies upon lucene-libs/lucene-analyzers-smartcn-X.Y.jar
+
+Stempel relies on lucene-libs/lucene-analyzers-stempel-X.Y.jar
+
+Morfologik relies on lucene-libs/lucene-analyzers-morfologik-X.Y.jar
+and lib/morfologik-*.jar
+
+OpenNLP relies on lucene-libs/lucene-analyzers-opennlp-X.Y.jar
+and lib/opennlp-*.jar
diff --git a/solr/contrib/analysis-extras/build.gradle b/solr/contrib/analysis-extras/build.gradle
index c39629a..1a3a423 100644
--- a/solr/contrib/analysis-extras/build.gradle
+++ b/solr/contrib/analysis-extras/build.gradle
@@ -18,8 +18,6 @@
 
 apply plugin: 'java-library'
 
-description = 'Additional analysis components'
-
 dependencies {
   api project(':solr:core')
 
diff --git a/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java b/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
index 2fdbd01..d69c367 100644
--- a/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
+++ b/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
@@ -215,7 +215,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
 
   @SuppressWarnings("unchecked")
   @Override
-  public void init(@SuppressWarnings({"rawtypes"})NamedList args) {
+  public void init(NamedList args) {
 
     // high level (loose) check for which type of config we have.
     //
@@ -260,7 +260,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
    * "source" and "dest" init params do <em>not</em> exist.
    */
   @SuppressWarnings("unchecked")
-  private void initSimpleRegexReplacement(@SuppressWarnings({"rawtypes"})NamedList args) {
+  private void initSimpleRegexReplacement(NamedList args) {
     // The syntactic sugar for the case where there is only one regex pattern for source and the same pattern
     // is used for the destination pattern...
     //
@@ -316,7 +316,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
    * "source" and "dest" init params <em>do</em> exist.
    */
   @SuppressWarnings("unchecked")
-  private void initSourceSelectorSyntax(@SuppressWarnings({"rawtypes"})NamedList args) {
+  private void initSourceSelectorSyntax(NamedList args) {
     // Full and complete syntax where source and dest are mandatory.
     //
     // source may be a single string or a selector.
@@ -340,7 +340,6 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
     if (1 == sources.size()) {
       if (sources.get(0) instanceof NamedList) {
         // nested set of selector options
-        @SuppressWarnings({"rawtypes"})
         NamedList selectorConfig = (NamedList) args.remove(SOURCE_PARAM);
 
         srcInclusions = parseSelectorParams(selectorConfig);
@@ -356,7 +355,6 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
             throw new SolrException(SERVER_ERROR, "Init param '" + SOURCE_PARAM +
                 "' child 'exclude' must be <lst/>");
           }
-          @SuppressWarnings({"rawtypes"})
           NamedList exc = (NamedList) excObj;
           srcExclusions.add(parseSelectorParams(exc));
           if (0 < exc.size()) {
@@ -389,7 +387,6 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
     }
 
     if (d instanceof NamedList) {
-      @SuppressWarnings({"rawtypes"})
       NamedList destList = (NamedList) d;
 
       Object patt = destList.remove(PATTERN_PARAM);
@@ -492,7 +489,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
             if (matcher.find()) {
               resolvedDest = matcher.replaceAll(dest);
             } else {
-              log.debug("srcSelector.shouldMutate('{}') returned true, " +
+              log.debug("srcSelector.shouldMutate(\"{}\") returned true, " +
                   "but replacement pattern did not match, field skipped.", fname);
               continue;
             }
@@ -574,7 +571,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
   }
 
   /** macro */
-  private static SelectorParams parseSelectorParams(@SuppressWarnings({"rawtypes"})NamedList args) {
+  private static SelectorParams parseSelectorParams(NamedList args) {
     return FieldMutatingUpdateProcessorFactory.parseSelectorParams(args);
   }
 }
diff --git a/solr/contrib/analytics/build.gradle b/solr/contrib/analytics/build.gradle
index 91e165a..9f975d2 100644
--- a/solr/contrib/analytics/build.gradle
+++ b/solr/contrib/analytics/build.gradle
@@ -17,8 +17,6 @@
 
 apply plugin: 'java-library'
 
-description = 'Analytics Package'
-
 dependencies {
   implementation project(':solr:core')
   testImplementation project(':solr:test-framework')
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
index 1bd4334..9407d1d 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
@@ -849,43 +849,43 @@ public class ExpressionFactory {
   public static interface ConstantFunction {
     AnalyticsValueStream apply(String t) throws SolrException;
   }
-  static class VariableFunctionInfo {
-    public String[] params;
-    public String returnSignature;
-  }
-  static class WeightedMeanVariableFunction {
-    public static final String name = "wmean";
-    public static final String params = "a,b";
-    public static final String function = DivideFunction.name+"("+SumFunction.name+"("+MultFunction.name+"(a,b)),"+SumFunction.name+"("+FilterFunction.name+"(b,"+ExistsFunction.name+"(a))))";
-  }
-  static class SumOfSquaresVariableFunction {
-    public static final String name = "sumofsquares";
-    public static final String params = "a";
-    public static final String function = SumFunction.name+"("+PowerFunction.name+"(a,2))";
-  }
-  static class SquareRootVariableFunction {
-    public static final String name = "sqrt";
-    public static final String params = "a";
-    public static final String function = PowerFunction.name+"(a,0.5)";
-  }
-  static class VarianceVariableFunction {
-    public static final String name = "variance";
-    public static final String params = "a";
-    public static final String function = SubtractFunction.name+"("+MeanFunction.name+"("+PowerFunction.name+"(a,2)),"+PowerFunction.name+"("+MeanFunction.name+"(a),2))";
-  }
-  static class SandardDeviationVariableFunction {
-    public static final String name = "stddev";
-    public static final String params = "a";
-    public static final String function = SquareRootVariableFunction.name+"("+VarianceVariableFunction.name+"(a))";
-  }
-  static class CSVVariableFunction {
-    public static final String name = "csv";
-    public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
-    public static final String function = SeparatedConcatFunction.name+"(',',a)";
-  }
-  static class CSVOutputVariableFunction {
-    public static final String name = "csv_output";
-    public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
-    public static final String function = "concat_sep(',',a"+ExpressionFactory.variableForEachSep+FillMissingFunction.name+"("+SeparatedConcatFunction.name+"(';',"+ExpressionFactory.variableForEachParam+"),''))";
-  }
 }
+class VariableFunctionInfo {
+  public String[] params;
+  public String returnSignature;
+}
+class WeightedMeanVariableFunction {
+  public static final String name = "wmean";
+  public static final String params = "a,b";
+  public static final String function = DivideFunction.name+"("+SumFunction.name+"("+MultFunction.name+"(a,b)),"+SumFunction.name+"("+FilterFunction.name+"(b,"+ExistsFunction.name+"(a))))";
+}
+class SumOfSquaresVariableFunction {
+  public static final String name = "sumofsquares";
+  public static final String params = "a";
+  public static final String function = SumFunction.name+"("+PowerFunction.name+"(a,2))";
+}
+class SquareRootVariableFunction {
+  public static final String name = "sqrt";
+  public static final String params = "a";
+  public static final String function = PowerFunction.name+"(a,0.5)";
+}
+class VarianceVariableFunction {
+  public static final String name = "variance";
+  public static final String params = "a";
+  public static final String function = SubtractFunction.name+"("+MeanFunction.name+"("+PowerFunction.name+"(a,2)),"+PowerFunction.name+"("+MeanFunction.name+"(a),2))";
+}
+class SandardDeviationVariableFunction {
+  public static final String name = "stddev";
+  public static final String params = "a";
+  public static final String function = SquareRootVariableFunction.name+"("+VarianceVariableFunction.name+"(a))";
+}
+class CSVVariableFunction {
+  public static final String name = "csv";
+  public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
+  public static final String function = SeparatedConcatFunction.name+"(',',a)";
+}
+class CSVOutputVariableFunction {
+  public static final String name = "csv_output";
+  public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
+  public static final String function = "concat_sep(',',a"+ExpressionFactory.variableForEachSep+FillMissingFunction.name+"("+SeparatedConcatFunction.name+"(';',"+ExpressionFactory.variableForEachParam+"),''))";
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
index d6ff05e..d06bba8 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
@@ -72,44 +72,43 @@ public class PivotFacet extends AnalyticsFacet implements StreamingFacet {
   public Iterable<Map<String,Object>> createResponse() {
     return pivotHead.createResponse();
   }
+}
+/**
+ * Typed Pivot class that stores the overall Pivot data and head of the Pivot node chain.
+ *
+ * This class exists so that the {@link PivotFacet} class doesn't have to be typed ( {@code <T>} ).
+ */
+class PivotHead<T> implements StreamingFacet {
+  private final PivotNode<T> topPivot;
+  private final Map<String, T> pivotValues;
 
-  /**
-   * Typed Pivot class that stores the overall Pivot data and head of the Pivot node chain.
-   *
-   * This class exists so that the {@link PivotFacet} class doesn't have to be typed ( {@code <T>} ).
-   */
-  private static class PivotHead<T> implements StreamingFacet {
-    private final PivotNode<T> topPivot;
-    private final Map<String, T> pivotValues;
-
-    public PivotHead(PivotNode<T> topPivot) {
-      this.topPivot = topPivot;
-      this.pivotValues = new HashMap<>();
-    }
-
-    public void setReductionCollectionManager(ReductionCollectionManager collectionManager) {
-      topPivot.setReductionCollectionManager(collectionManager);
-    }
-
-    public void setExpressionCalculator(ExpressionCalculator expressionCalculator) {
-      topPivot.setExpressionCalculator(expressionCalculator);
-    }
-
-    @Override
-    public void addFacetValueCollectionTargets() {
-      topPivot.addFacetValueCollectionTargets(pivotValues);
-    }
-
-    public void importShardData(DataInput input) throws IOException {
-      topPivot.importPivot(input, pivotValues);
-    }
-
-    public void exportShardData(DataOutput output) throws IOException {
-      topPivot.exportPivot(output, pivotValues);
-    }
-
-    public Iterable<Map<String,Object>> createResponse() {
-      return topPivot.getPivotedResponse(pivotValues);
-    }
+  public PivotHead(PivotNode<T> topPivot) {
+    this.topPivot = topPivot;
+    this.pivotValues = new HashMap<>();
   }
-}
+
+  public void setReductionCollectionManager(ReductionCollectionManager collectionManager) {
+    topPivot.setReductionCollectionManager(collectionManager);
+  }
+
+  public void setExpressionCalculator(ExpressionCalculator expressionCalculator) {
+    topPivot.setExpressionCalculator(expressionCalculator);
+  }
+
+  @Override
+  public void addFacetValueCollectionTargets() {
+    topPivot.addFacetValueCollectionTargets(pivotValues);
+  }
+
+  public void importShardData(DataInput input) throws IOException {
+    topPivot.importPivot(input, pivotValues);
+  }
+
+  public void exportShardData(DataOutput output) throws IOException {
+    topPivot.exportPivot(output, pivotValues);
+  }
+
+  public Iterable<Map<String,Object>> createResponse() {
+    return topPivot.getPivotedResponse(pivotValues);
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
index 2e82f62..f344d8b 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
@@ -19,14 +19,15 @@ package org.apache.solr.analytics.facet;
 import java.util.Map;
 import java.util.function.Consumer;
 
+import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.search.Filter;
 import org.apache.solr.search.QParser;
-import org.apache.solr.search.QueryUtils;
 
 /**
  * A facet that breaks down the data by additional Solr Queries.
@@ -50,7 +51,10 @@ public class QueryFacet extends AbstractSolrQueryFacet {
       }
       // The searcher sends docIds to the QueryFacetAccumulator which forwards
       // them to <code>collectQuery()</code> in this class for collection.
-      Query queryQuery = QueryUtils.combineQueryAndFilter(q, filter);
+      Query queryQuery = new BooleanQuery.Builder()
+          .add(q, Occur.MUST)
+          .add(filter, Occur.FILTER)
+          .build();
 
       ReductionDataCollection dataCol = collectionManager.newDataCollection();
       reductionData.put(queryName, dataCol);
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
index ac9bf16..defc9d9 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
@@ -20,7 +20,9 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.function.Consumer;
 
+import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
 import org.apache.solr.analytics.util.FacetRangeGenerator;
 import org.apache.solr.analytics.util.FacetRangeGenerator.FacetRange;
@@ -29,7 +31,6 @@ import org.apache.solr.common.params.FacetParams.FacetRangeOther;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.Filter;
-import org.apache.solr.search.QueryUtils;
 
 /**
  * A facet that groups data by a discrete set of ranges.
@@ -65,7 +66,10 @@ public class RangeFacet extends AbstractSolrQueryFacet {
       Query q = sf.getType().getRangeQuery(null, sf, range.lower, range.upper, range.includeLower,range.includeUpper);
       // The searcher sends docIds to the RangeFacetAccumulator which forwards
       // them to <code>collectRange()</code> in this class for collection.
-      Query rangeQuery = QueryUtils.combineQueryAndFilter(q, filter);
+      Query rangeQuery = new BooleanQuery.Builder()
+          .add(q, Occur.MUST)
+          .add(filter, Occur.FILTER)
+          .build();
 
       ReductionDataCollection dataCol = collectionManager.newDataCollection();
       reductionData.put(range.toString(), dataCol);
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
index 4b7497d..1ecc930 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
@@ -17,6 +17,7 @@
 package org.apache.solr.analytics.function.mapping;
 
 import org.apache.solr.analytics.ExpressionFactory.CreatorFunction;
+import org.apache.solr.analytics.function.mapping.ComparisonFunction.CompResultFunction;
 import org.apache.solr.analytics.util.function.BooleanConsumer;
 import org.apache.solr.analytics.value.AnalyticsValue;
 import org.apache.solr.analytics.value.AnalyticsValueStream;
@@ -140,183 +141,178 @@ public class ComparisonFunction {
   private static CompResultFunction reverse(CompResultFunction original) {
     return val -> original.apply(val*-1);
   }
+}
+/**
+ * A comparison function for two {@link DoubleValue}s.
+ */
+class CompareDoubleValueFunction extends AbstractBooleanValue {
+  private final DoubleValue exprA;
+  private final DoubleValue exprB;
+  private final CompResultFunction comp;
+  private final String name;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-  /**
-   * A comparison function for two {@link DoubleValue}s.
-   */
-  static class CompareDoubleValueFunction extends AbstractBooleanValue {
-    private final DoubleValue exprA;
-    private final DoubleValue exprB;
-    private final CompResultFunction comp;
-    private final String name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public CompareDoubleValueFunction(String name, DoubleValue exprA, DoubleValue exprB, CompResultFunction comp) {
-      this.name = name;
-      this.exprA = exprA;
-      this.exprB = exprB;
-      this.comp = comp;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
-    }
-
-    private boolean exists = false;
-    @Override
-    public boolean getBoolean() {
-      double valueA = exprA.getDouble();
-      double valueB = exprB.getDouble();
-      exists = exprA.exists() && exprB.exists();
-      return exists ? comp.apply(Double.compare(valueA,valueB)) : false;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public CompareDoubleValueFunction(String name, DoubleValue exprA, DoubleValue exprB, CompResultFunction comp) {
+    this.name = name;
+    this.exprA = exprA;
+    this.exprB = exprB;
+    this.comp = comp;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
   }
 
-  /**
-   * A comparison function for a {@link DoubleValue} and a {@link DoubleValueStream}.
-   */
-  static class CompareDoubleStreamFunction extends AbstractBooleanValueStream {
-    private final DoubleValue baseExpr;
-    private final DoubleValueStream compExpr;
-    private final CompResultFunction comp;
-    private final String name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public CompareDoubleStreamFunction(String name, DoubleValue baseExpr, DoubleValueStream compExpr, CompResultFunction comp) throws SolrException {
-      this.name = name;
-      this.baseExpr = baseExpr;
-      this.compExpr = compExpr;
-      this.comp = comp;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-    }
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      double baseValue = baseExpr.getDouble();
-      if (baseExpr.exists()) {
-        compExpr.streamDoubles(compValue -> cons.accept(comp.apply(Double.compare(baseValue,compValue))));
-      }
-    }
+  private boolean exists = false;
+  @Override
+  public boolean getBoolean() {
+    double valueA = exprA.getDouble();
+    double valueB = exprB.getDouble();
+    exists = exprA.exists() && exprB.exists();
+    return exists ? comp.apply(Double.compare(valueA,valueB)) : false;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
   }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A comparison function for a {@link DoubleValue} and a {@link DoubleValueStream}.
+ */
+class CompareDoubleStreamFunction extends AbstractBooleanValueStream {
+  private final DoubleValue baseExpr;
+  private final DoubleValueStream compExpr;
+  private final CompResultFunction comp;
+  private final String name;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-  /**
-   * A comparison function for two {@link DateValue}s.
-   */
-  static class CompareDateValueFunction extends AbstractBooleanValue {
-    private final DateValue exprA;
-    private final DateValue exprB;
-    private final CompResultFunction comp;
-    private final String name;
-    private final String funcStr;
-    private final ExpressionType funcType;
+  public CompareDoubleStreamFunction(String name, DoubleValue baseExpr, DoubleValueStream compExpr, CompResultFunction comp) throws SolrException {
+    this.name = name;
+    this.baseExpr = baseExpr;
+    this.compExpr = compExpr;
+    this.comp = comp;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+  }
 
-    public CompareDateValueFunction(String name, DateValue exprA, DateValue exprB, CompResultFunction comp) {
-      this.name = name;
-      this.exprA = exprA;
-      this.exprB = exprB;
-      this.comp = comp;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    double baseValue = baseExpr.getDouble();
+    if (baseExpr.exists()) {
+      compExpr.streamDoubles(compValue -> cons.accept(comp.apply(Double.compare(baseValue,compValue))));
     }
+  }
 
-    private boolean exists = false;
-    @Override
-    public boolean getBoolean() {
-      long valueA = exprA.getLong();
-      long valueB = exprB.getLong();
-      exists = exprA.exists() && exprB.exists();
-      return exists ? comp.apply(Long.compare(valueA,valueB)) : false;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A comparison function for two {@link DateValue}s.
+ */
+class CompareDateValueFunction extends AbstractBooleanValue {
+  private final DateValue exprA;
+  private final DateValue exprB;
+  private final CompResultFunction comp;
+  private final String name;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public CompareDateValueFunction(String name, DateValue exprA, DateValue exprB, CompResultFunction comp) {
+    this.name = name;
+    this.exprA = exprA;
+    this.exprB = exprB;
+    this.comp = comp;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
   }
 
-  /**
-   * A comparison function for a {@link DateValue} and a {@link DateValueStream}.
-   */
-  static class CompareDateStreamFunction extends AbstractBooleanValueStream {
-    private final DateValue baseExpr;
-    private final DateValueStream compExpr;
-    private final CompResultFunction comp;
-    private final String name;
-    private final String funcStr;
-    private final ExpressionType funcType;
+  private boolean exists = false;
+  @Override
+  public boolean getBoolean() {
+    long valueA = exprA.getLong();
+    long valueB = exprB.getLong();
+    exists = exprA.exists() && exprB.exists();
+    return exists ? comp.apply(Long.compare(valueA,valueB)) : false;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    public CompareDateStreamFunction(String name, DateValue baseExpr, DateValueStream compExpr, CompResultFunction comp) throws SolrException {
-      this.name = name;
-      this.baseExpr = baseExpr;
-      this.compExpr = compExpr;
-      this.comp = comp;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A comparison function for a {@link DateValue} and a {@link DateValueStream}.
+ */
+class CompareDateStreamFunction extends AbstractBooleanValueStream {
+  private final DateValue baseExpr;
+  private final DateValueStream compExpr;
+  private final CompResultFunction comp;
+  private final String name;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      long baseValue = baseExpr.getLong();
-      if (baseExpr.exists()) {
-        compExpr.streamLongs(compValue -> cons.accept(comp.apply(Long.compare(baseValue,compValue))));
-      }
-    }
+  public CompareDateStreamFunction(String name, DateValue baseExpr, DateValueStream compExpr, CompResultFunction comp) throws SolrException {
+    this.name = name;
+    this.baseExpr = baseExpr;
+    this.compExpr = compExpr;
+    this.comp = comp;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    long baseValue = baseExpr.getLong();
+    if (baseExpr.exists()) {
+      compExpr.streamLongs(compValue -> cons.accept(comp.apply(Long.compare(baseValue,compValue))));
     }
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
index 93fee3e..8a57561 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
@@ -62,100 +62,97 @@ public class DateMathFunction {
       throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires a date as the first parameter.");
     }
   });
+}
+/**
+ * DateMath function that supports {@link DateValue}s.
+ */
+class DateMathValueFunction extends AbstractDateValue {
+  private final DateValue dateParam;
+  private final String mathParam;
+  DateMathParser parser = new DateMathParser();
+  public static final String name = DateMathFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  /**
-   * DateMath function that supports {@link DateValue}s.
-   */
-  static class DateMathValueFunction extends AbstractDateValue {
-    private final DateValue dateParam;
-    private final String mathParam;
-    DateMathParser parser = new DateMathParser();
-    public static final String name = DateMathFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateMathValueFunction(DateValue dateParam, ConstantStringValue mathParam) throws SolrException {
-      this.dateParam = dateParam;
-      this.mathParam = "NOW" + mathParam.getString();
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
-    }
-
-    private boolean exists = false;
+  public DateMathValueFunction(DateValue dateParam, ConstantStringValue mathParam) throws SolrException {
+    this.dateParam = dateParam;
+    this.mathParam = "NOW" + mathParam.getString();
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
+  }
 
-    @Override
-    public long getLong() {
-      Date date = getDate();
-      return (exists) ? date.getTime() : 0;
-    }
-    @Override
-    public Date getDate() {
-      Date date = dateParam.getDate();
-      if (dateParam.exists()) {
-        exists = true;
-        return DateMathParser.parseMath(date,mathParam);
-      } else {
-        exists = false;
-        return null;
-      }
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  private boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public long getLong() {
+    Date date = getDate();
+    return (exists) ? date.getTime() : 0;
+  }
+  @Override
+  public Date getDate() {
+    Date date = dateParam.getDate();
+    if (dateParam.exists()) {
+      exists = true;
+      return DateMathParser.parseMath(date,mathParam);
+    } else {
+      exists = false;
+      return null;
     }
   }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-  /**
-   * DateMath function that supports {@link DateValueStream}s.
-   */
-  static class DateMathStreamFunction extends AbstractDateValueStream {
-    private final DateValueStream dateParam;
-    private final String mathParam;
-    public static final String name = DateMathFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateMathStreamFunction(DateValueStream dateParam, ConstantStringValue mathParam) throws SolrException {
-      this.dateParam = dateParam;
-      this.mathParam = "NOW" + mathParam.getString();
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * DateMath function that supports {@link DateValueStream}s.
+ */
+class DateMathStreamFunction extends AbstractDateValueStream {
+  private final DateValueStream dateParam;
+  private final String mathParam;
+  public static final String name = DateMathFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      streamDates(value -> cons.accept(value.getTime()));
-    }
-    @Override
-    public void streamDates(Consumer<Date> cons) {
-      dateParam.streamDates(value -> cons.accept(DateMathParser.parseMath(value, mathParam)));
-    }
+  public DateMathStreamFunction(DateValueStream dateParam, ConstantStringValue mathParam) throws SolrException {
+    this.dateParam = dateParam;
+    this.mathParam = "NOW" + mathParam.getString();
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    streamDates(value -> cons.accept(value.getTime()));
+  }
+  @Override
+  public void streamDates(Consumer<Date> cons) {
+    dateParam.streamDates(value -> cons.accept(DateMathParser.parseMath(value, mathParam)));
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
index 9462e43..83c0ba7 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
@@ -61,151 +61,146 @@ public class DateParseFunction {
           "Incorrect parameter: "+params[0].getExpressionStr());
     }
   });
-
-  static class LongToDateParseFunction extends AbstractDateValue {
-    private final LongValue param;
-    public static final String name = DateParseFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongToDateParseFunction(LongValue param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
-
-    @Override
-    public long getLong() {
-      return param.getLong();
-    }
-    @Override
-    public boolean exists() {
-      return param.exists();
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+class LongToDateParseFunction extends AbstractDateValue {
+  private final LongValue param;
+  public static final String name = DateParseFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongToDateParseFunction(LongValue param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
   }
 
-  static class LongStreamToDateParseFunction extends AbstractDateValueStream {
-    private final LongValueStream param;
-    public static final String name = DateParseFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongStreamToDateParseFunction(LongValueStream param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
-
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      param.streamLongs(cons);
-    }
+  @Override
+  public long getLong() {
+    return param.getLong();
+  }
+  @Override
+  public boolean exists() {
+    return param.exists();
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongStreamToDateParseFunction extends AbstractDateValueStream {
+  private final LongValueStream param;
+  public static final String name = DateParseFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongStreamToDateParseFunction(LongValueStream param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
   }
 
-  static class StringToDateParseFunction extends AbstractDateValue {
-    private final StringValue param;
-    public static final String name = DateParseFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    param.streamLongs(cons);
+  }
 
-    public StringToDateParseFunction(StringValue param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringToDateParseFunction extends AbstractDateValue {
+  private final StringValue param;
+  public static final String name = DateParseFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringToDateParseFunction(StringValue param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+  }
 
-    private boolean exists = false;
-    @Override
-    public long getLong() {
-      long value = 0;
-      try {
-        String paramStr = param.getString();
-        exists = param.exists();
-        if (exists) {
-          value = Instant.parse(paramStr).toEpochMilli();
-        }
-      } catch (DateTimeParseException e) {
-        exists = false;
+  private boolean exists = false;
+  @Override
+  public long getLong() {
+    long value = 0;
+    try {
+      String paramStr = param.getString();
+      exists = param.exists();
+      if (exists) {
+        value = Instant.parse(paramStr).toEpochMilli();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+    } catch (DateTimeParseException e) {
+      exists = false;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class StringStreamToDateParseFunction extends AbstractDateValueStream {
-    private final StringValueStream param;
-    public static final String name = DateParseFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StringStreamToDateParseFunction(StringValueStream param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringStreamToDateParseFunction extends AbstractDateValueStream {
+  private final StringValueStream param;
+  public static final String name = DateParseFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringStreamToDateParseFunction(StringValueStream param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+  }
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      param.streamStrings(value -> {
-        try {
-          cons.accept(Instant.parse(value).toEpochMilli());
-        } catch (DateTimeParseException e) {}
-      });
-    }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    param.streamStrings(value -> {
+      try {
+        cons.accept(Instant.parse(value).toEpochMilli());
+      } catch (DateTimeParseException e) {}
+    });
+  }
 
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
 }
-
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
index fcc8400..c8881ee 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
@@ -20,6 +20,8 @@ import java.util.function.IntConsumer;
 import java.util.function.LongConsumer;
 
 import org.apache.solr.analytics.ExpressionFactory.CreatorFunction;
+import org.apache.solr.analytics.function.mapping.DecimalNumericConversionFunction.ConvertDoubleFunction;
+import org.apache.solr.analytics.function.mapping.DecimalNumericConversionFunction.ConvertFloatFunction;
 import org.apache.solr.analytics.value.AnalyticsValueStream;
 import org.apache.solr.analytics.value.DoubleValue;
 import org.apache.solr.analytics.value.DoubleValueStream;
@@ -101,7 +103,7 @@ public class DecimalNumericConversionFunction {
   public static class RoundFunction {
     public static final String name = "round";
     public static final CreatorFunction creatorFunction = (params -> {
-      return DecimalNumericConversionFunction.createDecimalConversionFunction(name, val -> Math.round(val), val -> Math.round(val), params);
+      return DecimalNumericConversionFunction.createDecimalConversionFunction(name, val -> (int)Math.round(val), val -> (long)Math.round(val), params);
     });
   }
 
@@ -114,161 +116,156 @@ public class DecimalNumericConversionFunction {
   public static interface ConvertDoubleFunction {
     public long convert(double value);
   }
+}
+/**
+ * A function to convert a {@link FloatValue} to a {@link IntValue}.
+ */
+class ConvertFloatValueFunction extends AbstractIntValue {
+  private final String name;
+  private final FloatValue param;
+  private final ConvertFloatFunction conv;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-  /**
-   * A function to convert a {@link FloatValue} to a {@link IntValue}.
-   */
-  static class ConvertFloatValueFunction extends AbstractIntValue {
-    private final String name;
-    private final FloatValue param;
-    private final ConvertFloatFunction conv;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public ConvertFloatValueFunction(String name, FloatValue param, ConvertFloatFunction conv) {
-      this.name = name;
-      this.param = param;
-      this.conv = conv;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-    }
-
-    @Override
-    public int getInt() {
-      return conv.convert(param.getFloat());
-    }
-    @Override
-    public boolean exists() {
-      return param.exists();
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public ConvertFloatValueFunction(String name, FloatValue param, ConvertFloatFunction conv) {
+    this.name = name;
+    this.param = param;
+    this.conv = conv;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
   }
 
-  /**
-   * A function to convert a {@link FloatValueStream} to a {@link IntValueStream}.
-   */
-  static class ConvertFloatStreamFunction extends AbstractIntValueStream {
-    private final String name;
-    private final FloatValueStream param;
-    private final ConvertFloatFunction conv;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public ConvertFloatStreamFunction(String name, FloatValueStream param, ConvertFloatFunction conv) {
-      this.name = name;
-      this.param = param;
-      this.conv = conv;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-    }
-
-    @Override
-    public void streamInts(IntConsumer cons) {
-      param.streamFloats( value -> cons.accept(conv.convert(value)));
-    }
+  @Override
+  public int getInt() {
+    return conv.convert(param.getFloat());
+  }
+  @Override
+  public boolean exists() {
+    return param.exists();
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A function to convert a {@link FloatValueStream} to a {@link IntValueStream}.
+ */
+class ConvertFloatStreamFunction extends AbstractIntValueStream {
+  private final String name;
+  private final FloatValueStream param;
+  private final ConvertFloatFunction conv;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-  /**
-   * A function to convert a {@link DoubleValue} to a {@link LongValue}.
-   */
-  static class ConvertDoubleValueFunction extends AbstractLongValue {
-    private final String name;
-    private final DoubleValue param;
-    private final ConvertDoubleFunction conv;
-    private final String funcStr;
-    private final ExpressionType funcType;
+  public ConvertFloatStreamFunction(String name, FloatValueStream param, ConvertFloatFunction conv) {
+    this.name = name;
+    this.param = param;
+    this.conv = conv;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+  }
 
-    public ConvertDoubleValueFunction(String name, DoubleValue param, ConvertDoubleFunction conv) {
-      this.name = name;
-      this.param = param;
-      this.conv = conv;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-    }
+  @Override
+  public void streamInts(IntConsumer cons) {
+    param.streamFloats( value -> cons.accept(conv.convert(value)));
+  }
 
-    @Override
-    public long getLong() {
-      return conv.convert(param.getDouble());
-    }
-    @Override
-    public boolean exists() {
-      return param.exists();
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A function to convert a {@link DoubleValue} to a {@link LongValue}.
+ */
+class ConvertDoubleValueFunction extends AbstractLongValue {
+  private final String name;
+  private final DoubleValue param;
+  private final ConvertDoubleFunction conv;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public ConvertDoubleValueFunction(String name, DoubleValue param, ConvertDoubleFunction conv) {
+    this.name = name;
+    this.param = param;
+    this.conv = conv;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
   }
 
-  /**
-   * A function to convert a {@link DoubleValueStream} to a {@link LongValueStream}.
-   */
-  static class ConvertDoubleStreamFunction extends AbstractLongValueStream {
-    private final String name;
-    private final DoubleValueStream param;
-    private final ConvertDoubleFunction conv;
-    private final String funcStr;
-    private final ExpressionType funcType;
+  @Override
+  public long getLong() {
+    return conv.convert(param.getDouble());
+  }
+  @Override
+  public boolean exists() {
+    return param.exists();
+  }
 
-    public ConvertDoubleStreamFunction(String name, DoubleValueStream param, ConvertDoubleFunction conv) {
-      this.name = name;
-      this.param = param;
-      this.conv = conv;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A function to convert a {@link DoubleValueStream} to a {@link LongValueStream}.
+ */
+class ConvertDoubleStreamFunction extends AbstractLongValueStream {
+  private final String name;
+  private final DoubleValueStream param;
+  private final ConvertDoubleFunction conv;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      param.streamDoubles( value -> cons.accept(conv.convert(value)));
-    }
+  public ConvertDoubleStreamFunction(String name, DoubleValueStream param, ConvertDoubleFunction conv) {
+    this.name = name;
+    this.param = param;
+    this.conv = conv;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    param.streamDoubles( value -> cons.accept(conv.convert(value)));
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
index 9d1bbf2..18a8bce 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
@@ -73,171 +73,166 @@ public class EqualFunction {
     }
     throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires that at least 1 parameter be single-valued.");
   });
-
-  /**
-   * An equal function for two {@link BooleanValue}s.
-   */
-  static class BooleanValueEqualFunction extends AbstractBooleanValue {
-    private final BooleanValue exprA;
-    private final BooleanValue exprB;
-    public static final String name = EqualFunction.name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public BooleanValueEqualFunction(BooleanValue exprA, BooleanValue exprB) {
-      this.exprA = exprA;
-      this.exprB = exprB;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
-    }
-
-    private boolean exists = false;
-    @Override
-    public boolean getBoolean() {
-      boolean valueA = exprA.getBoolean();
-      boolean valueB = exprB.getBoolean();
-      exists = exprA.exists() && exprB.exists();
-      return exists ? valueA == valueB : false;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+/**
+ * An equal function for two {@link BooleanValue}s.
+ */
+class BooleanValueEqualFunction extends AbstractBooleanValue {
+  private final BooleanValue exprA;
+  private final BooleanValue exprB;
+  public static final String name = EqualFunction.name;
+  private final String funcStr;
+  private final ExpressionType funcType;
+
+  public BooleanValueEqualFunction(BooleanValue exprA, BooleanValue exprB) {
+    this.exprA = exprA;
+    this.exprB = exprB;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
   }
 
-  /**
-   * An equal function for a {@link BooleanValue} and a {@link BooleanValueStream}.
-   */
-  static class BooleanStreamEqualFunction extends AbstractBooleanValueStream {
-    private final BooleanValue baseExpr;
-    private final BooleanValueStream compExpr;
-    public static final String name = EqualFunction.name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public BooleanStreamEqualFunction(BooleanValue baseExpr, BooleanValueStream compExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.compExpr = compExpr;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-    }
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      boolean baseValue = baseExpr.getBoolean();
-      if (baseExpr.exists()) {
-        compExpr.streamBooleans(compValue -> cons.accept(baseValue == compValue));
-      }
-    }
+  private boolean exists = false;
+  @Override
+  public boolean getBoolean() {
+    boolean valueA = exprA.getBoolean();
+    boolean valueB = exprB.getBoolean();
+    exists = exprA.exists() && exprB.exists();
+    return exists ? valueA == valueB : false;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * An equal function for a {@link BooleanValue} and a {@link BooleanValueStream}.
+ */
+class BooleanStreamEqualFunction extends AbstractBooleanValueStream {
+  private final BooleanValue baseExpr;
+  private final BooleanValueStream compExpr;
+  public static final String name = EqualFunction.name;
+  private final String funcStr;
+  private final ExpressionType funcType;
+
+  public BooleanStreamEqualFunction(BooleanValue baseExpr, BooleanValueStream compExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.compExpr = compExpr;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
   }
 
-  /**
-   * A catch-all equal function for two {@link AnalyticsValue}s.
-   */
-  static class ValueEqualFunction extends AbstractBooleanValue {
-    private final AnalyticsValue exprA;
-    private final AnalyticsValue exprB;
-    public static final String name = EqualFunction.name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public ValueEqualFunction(AnalyticsValue exprA, AnalyticsValue exprB) {
-      this.exprA = exprA;
-      this.exprB = exprB;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    boolean baseValue = baseExpr.getBoolean();
+    if (baseExpr.exists()) {
+      compExpr.streamBooleans(compValue -> cons.accept(baseValue == compValue));
     }
+  }
 
-    private boolean exists = false;
-    @Override
-    public boolean getBoolean() {
-      Object valueA = exprA.getObject();
-      Object valueB = exprB.getObject();
-      exists = exprA.exists() && exprB.exists();
-      return exists ? valueA.equals(valueB) : false;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A catch-all equal function for two {@link AnalyticsValue}s.
+ */
+class ValueEqualFunction extends AbstractBooleanValue {
+  private final AnalyticsValue exprA;
+  private final AnalyticsValue exprB;
+  public static final String name = EqualFunction.name;
+  private final String funcStr;
+  private final ExpressionType funcType;
+
+  public ValueEqualFunction(AnalyticsValue exprA, AnalyticsValue exprB) {
+    this.exprA = exprA;
+    this.exprB = exprB;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  private boolean exists = false;
+  @Override
+  public boolean getBoolean() {
+    Object valueA = exprA.getObject();
+    Object valueB = exprB.getObject();
+    exists = exprA.exists() && exprB.exists();
+    return exists ? valueA.equals(valueB) : false;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  /**
-   * A catch-all equal function for an {@link AnalyticsValue} and an {@link AnalyticsValueStream}.
-   */
-  static class StreamEqualFunction extends AbstractBooleanValueStream {
-    private final AnalyticsValue baseExpr;
-    private final AnalyticsValueStream compExpr;
-    public static final String name = EqualFunction.name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public StreamEqualFunction(AnalyticsValue baseExpr, AnalyticsValueStream compExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.compExpr = compExpr;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A catch-all equal function for an {@link AnalyticsValue} and an {@link AnalyticsValueStream}.
+ */
+class StreamEqualFunction extends AbstractBooleanValueStream {
+  private final AnalyticsValue baseExpr;
+  private final AnalyticsValueStream compExpr;
+  public static final String name = EqualFunction.name;
+  private final String funcStr;
+  private final ExpressionType funcType;
+
+  public StreamEqualFunction(AnalyticsValue baseExpr, AnalyticsValueStream compExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.compExpr = compExpr;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+  }
 
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      Object baseValue = baseExpr.getObject();
-      if (baseExpr.exists()) {
-        compExpr.streamObjects(compValue -> cons.accept(baseValue.equals(compValue)));
-      }
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    Object baseValue = baseExpr.getObject();
+    if (baseExpr.exists()) {
+      compExpr.streamObjects(compValue -> cons.accept(baseValue.equals(compValue)));
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
 }
-
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
index 44f571d..0e28917 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
@@ -42,85 +42,82 @@ public class ExistsFunction {
     }
     return new ValueStreamExistsFunction(param);
   });
+}
+/**
+ * Exists function that supports {@link AnalyticsValueStream}s.
+ */
+class ValueStreamExistsFunction extends AbstractBooleanValue {
+  private final AnalyticsValueStream param;
+  public static final String name = ExistsFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  /**
-   * Exists function that supports {@link AnalyticsValueStream}s.
-   */
-  static class ValueStreamExistsFunction extends AbstractBooleanValue {
-    private final AnalyticsValueStream param;
-    public static final String name = ExistsFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public ValueStreamExistsFunction(AnalyticsValueStream param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
-
-    private boolean exists;
-    @Override
-    public boolean getBoolean() {
-      exists = false;
-      param.streamObjects(val -> exists = true);
-      return exists;
-    }
-    @Override
-    public boolean exists() {
-      return true;
-    }
+  public ValueStreamExistsFunction(AnalyticsValueStream param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  private boolean exists;
+  @Override
+  public boolean getBoolean() {
+    exists = false;
+    param.streamObjects(val -> exists = true);
+    return exists;
+  }
+  @Override
+  public boolean exists() {
+    return true;
   }
 
-  /**
-   * Exists function that supports {@link AnalyticsValue}s.
-   */
-  static class ValueExistsFunction extends AbstractBooleanValue {
-    private final AnalyticsValue param;
-    public static final String name = ExistsFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * Exists function that supports {@link AnalyticsValue}s.
+ */
+class ValueExistsFunction extends AbstractBooleanValue {
+  private final AnalyticsValue param;
+  public static final String name = ExistsFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    public ValueExistsFunction(AnalyticsValue param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
+  public ValueExistsFunction(AnalyticsValue param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+  }
 
-    @Override
-    public boolean getBoolean() {
-      param.getObject();
-      return param.exists();
-    }
-    @Override
-    public boolean exists() {
-      return true;
-    }
+  @Override
+  public boolean getBoolean() {
+    param.getObject();
+    return param.exists();
+  }
+  @Override
+  public boolean exists() {
+    return true;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
 }
-
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
index 592fc1a..7bc38fd 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
@@ -128,733 +128,716 @@ public class FillMissingFunction {
     }
     return new StreamFillMissingFunction(baseExpr,fillExpr);
   });
-
-  static class StreamFillMissingFunction extends AbstractAnalyticsValueStream implements Consumer<Object> {
-    private final AnalyticsValueStream baseExpr;
-    private final AnalyticsValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StreamFillMissingFunction(AnalyticsValueStream baseExpr, AnalyticsValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-    Consumer<Object> cons;
-
-    @Override
-    public void streamObjects(Consumer<Object> cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamObjects(this);
-      if (!exists) {
-        fillExpr.streamObjects(cons);
-      }
-    }
-    @Override
-    public void accept(Object value) {
-      exists = true;
-      cons.accept(value);
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+class StreamFillMissingFunction extends AbstractAnalyticsValueStream implements Consumer<Object> {
+  private final AnalyticsValueStream baseExpr;
+  private final AnalyticsValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StreamFillMissingFunction(AnalyticsValueStream baseExpr, AnalyticsValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class ValueFillMissingFunction extends AbstractAnalyticsValue {
-    private final AnalyticsValue baseExpr;
-    private final AnalyticsValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
+  Consumer<Object> cons;
 
-    public ValueFillMissingFunction(AnalyticsValue baseExpr, AnalyticsValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public Object getObject() {
-      Object value = baseExpr.getObject();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getObject();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamObjects(Consumer<Object> cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamObjects(this);
+    if (!exists) {
+      fillExpr.streamObjects(cons);
     }
   }
-
-  static class BooleanStreamFillMissingFunction extends AbstractBooleanValueStream implements BooleanConsumer {
-    private final BooleanValueStream baseExpr;
-    private final BooleanValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanStreamFillMissingFunction(BooleanValueStream baseExpr, BooleanValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-    BooleanConsumer cons;
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamBooleans(this);
-      if (!exists) {
-        fillExpr.streamBooleans(cons);
-      }
-    }
-    @Override
-    public void accept(boolean value) {
-      exists = true;
-      cons.accept(value);
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public void accept(Object value) {
+    exists = true;
+    cons.accept(value);
   }
 
-  static class BooleanFillMissingFunction extends AbstractBooleanValue {
-    private final BooleanValue baseExpr;
-    private final BooleanValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanFillMissingFunction(BooleanValue baseExpr, BooleanValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public boolean getBoolean() {
-      boolean value = baseExpr.getBoolean();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getBoolean();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
-
-  static class IntStreamFillMissingFunction extends AbstractIntValueStream implements IntConsumer {
-    private final IntValueStream baseExpr;
-    private final IntValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntStreamFillMissingFunction(IntValueStream baseExpr, IntValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-    IntConsumer cons;
-
-    @Override
-    public void streamInts(IntConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamInts(this);
-      if (!exists) {
-        fillExpr.streamInts(cons);
-      }
-    }
-    @Override
-    public void accept(int value) {
-      exists = true;
-      cons.accept(value);
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
   }
-
-  static class IntFillMissingFunction extends AbstractIntValue {
-    private final IntValue baseExpr;
-    private final IntValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntFillMissingFunction(IntValue baseExpr, IntValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public int getInt() {
-      int value = baseExpr.getInt();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getInt();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class ValueFillMissingFunction extends AbstractAnalyticsValue {
+  private final AnalyticsValue baseExpr;
+  private final AnalyticsValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public ValueFillMissingFunction(AnalyticsValue baseExpr, AnalyticsValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class LongStreamFillMissingFunction extends AbstractLongValueStream implements LongConsumer {
-    private final LongValueStream baseExpr;
-    private final LongValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongStreamFillMissingFunction(LongValueStream baseExpr, LongValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-    LongConsumer cons;
+  boolean exists = false;
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamLongs(this);
-      if (!exists) {
-        fillExpr.streamLongs(cons);
-      }
-    }
-    @Override
-    public void accept(long value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public Object getObject() {
+    Object value = baseExpr.getObject();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getObject();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanStreamFillMissingFunction extends AbstractBooleanValueStream implements BooleanConsumer {
+  private final BooleanValueStream baseExpr;
+  private final BooleanValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public BooleanStreamFillMissingFunction(BooleanValueStream baseExpr, BooleanValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class LongFillMissingFunction extends AbstractLongValue {
-    private final LongValue baseExpr;
-    private final LongValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
+  BooleanConsumer cons;
 
-    public LongFillMissingFunction(LongValue baseExpr, LongValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamBooleans(this);
+    if (!exists) {
+      fillExpr.streamBooleans(cons);
     }
+  }
+  @Override
+  public void accept(boolean value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanFillMissingFunction extends AbstractBooleanValue {
+  private final BooleanValue baseExpr;
+  private final BooleanValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public BooleanFillMissingFunction(BooleanValue baseExpr, BooleanValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public long getLong() {
-      long value = baseExpr.getLong();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getLong();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public boolean getBoolean() {
+    boolean value = baseExpr.getBoolean();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getBoolean();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class FloatStreamFillMissingFunction extends AbstractFloatValueStream implements FloatConsumer {
-    private final FloatValueStream baseExpr;
-    private final FloatValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public FloatStreamFillMissingFunction(FloatValueStream baseExpr, FloatValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class IntStreamFillMissingFunction extends AbstractIntValueStream implements IntConsumer {
+  private final IntValueStream baseExpr;
+  private final IntValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public IntStreamFillMissingFunction(IntValueStream baseExpr, IntValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    boolean exists = false;
-    FloatConsumer cons;
+  boolean exists = false;
+  IntConsumer cons;
 
-    @Override
-    public void streamFloats(FloatConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamFloats(this);
-      if (!exists) {
-        fillExpr.streamFloats(cons);
-      }
-    }
-    @Override
-    public void accept(float value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public void streamInts(IntConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamInts(this);
+    if (!exists) {
+      fillExpr.streamInts(cons);
     }
+  }
+  @Override
+  public void accept(int value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class IntFillMissingFunction extends AbstractIntValue {
+  private final IntValue baseExpr;
+  private final IntValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public IntFillMissingFunction(IntValue baseExpr, IntValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class FloatFillMissingFunction extends AbstractFloatValue {
-    private final FloatValue baseExpr;
-    private final FloatValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public FloatFillMissingFunction(FloatValue baseExpr, FloatValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public int getInt() {
+    int value = baseExpr.getInt();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getInt();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongStreamFillMissingFunction extends AbstractLongValueStream implements LongConsumer {
+  private final LongValueStream baseExpr;
+  private final LongValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongStreamFillMissingFunction(LongValueStream baseExpr, LongValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public float getFloat() {
-      float value = baseExpr.getFloat();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getFloat();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
+  LongConsumer cons;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamLongs(this);
+    if (!exists) {
+      fillExpr.streamLongs(cons);
     }
   }
+  @Override
+  public void accept(long value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-  static class DoubleStreamFillMissingFunction extends AbstractDoubleValueStream implements DoubleConsumer {
-    private final DoubleValueStream baseExpr;
-    private final DoubleValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DoubleStreamFillMissingFunction(DoubleValueStream baseExpr, DoubleValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongFillMissingFunction extends AbstractLongValue {
+  private final LongValue baseExpr;
+  private final LongValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongFillMissingFunction(LongValue baseExpr, LongValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    boolean exists = false;
-    DoubleConsumer cons;
+  boolean exists = false;
 
-    @Override
-    public void streamDoubles(DoubleConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamDoubles(this);
-      if (!exists) {
-        fillExpr.streamDoubles(cons);
-      }
-    }
-    @Override
-    public void accept(double value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public long getLong() {
+    long value = baseExpr.getLong();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getLong();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatStreamFillMissingFunction extends AbstractFloatValueStream implements FloatConsumer {
+  private final FloatValueStream baseExpr;
+  private final FloatValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public FloatStreamFillMissingFunction(FloatValueStream baseExpr, FloatValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class DoubleFillMissingFunction extends AbstractDoubleValue {
-    private final DoubleValue baseExpr;
-    private final DoubleValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
+  FloatConsumer cons;
 
-    public DoubleFillMissingFunction(DoubleValue baseExpr, DoubleValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public void streamFloats(FloatConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamFloats(this);
+    if (!exists) {
+      fillExpr.streamFloats(cons);
     }
+  }
+  @Override
+  public void accept(float value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatFillMissingFunction extends AbstractFloatValue {
+  private final FloatValue baseExpr;
+  private final FloatValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public FloatFillMissingFunction(FloatValue baseExpr, FloatValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public double getDouble() {
-      double value = baseExpr.getDouble();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getDouble();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public float getFloat() {
+    float value = baseExpr.getFloat();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getFloat();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class DateStreamFillMissingFunction extends AbstractDateValueStream implements LongConsumer {
-    private final DateValueStream baseExpr;
-    private final DateValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateStreamFillMissingFunction(DateValueStream baseExpr, DateValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleStreamFillMissingFunction extends AbstractDoubleValueStream implements DoubleConsumer {
+  private final DoubleValueStream baseExpr;
+  private final DoubleValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DoubleStreamFillMissingFunction(DoubleValueStream baseExpr, DoubleValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    boolean exists = false;
-    LongConsumer cons;
+  boolean exists = false;
+  DoubleConsumer cons;
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamLongs(this);
-      if (!exists) {
-        fillExpr.streamLongs(cons);
-      }
-    }
-    @Override
-    public void accept(long value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public void streamDoubles(DoubleConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamDoubles(this);
+    if (!exists) {
+      fillExpr.streamDoubles(cons);
     }
+  }
+  @Override
+  public void accept(double value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleFillMissingFunction extends AbstractDoubleValue {
+  private final DoubleValue baseExpr;
+  private final DoubleValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DoubleFillMissingFunction(DoubleValue baseExpr, DoubleValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class DateFillMissingFunction extends AbstractDateValue {
-    private final DateValue baseExpr;
-    private final DateValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public DateFillMissingFunction(DateValue baseExpr, DateValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public double getDouble() {
+    double value = baseExpr.getDouble();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getDouble();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DateStreamFillMissingFunction extends AbstractDateValueStream implements LongConsumer {
+  private final DateValueStream baseExpr;
+  private final DateValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DateStreamFillMissingFunction(DateValueStream baseExpr, DateValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public long getLong() {
-      long value = baseExpr.getLong();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getLong();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
+  LongConsumer cons;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamLongs(this);
+    if (!exists) {
+      fillExpr.streamLongs(cons);
     }
   }
+  @Override
+  public void accept(long value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-  static class StringStreamFillMissingFunction extends AbstractStringValueStream implements Consumer<String> {
-    private final StringValueStream baseExpr;
-    private final StringValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StringStreamFillMissingFunction(StringValueStream baseExpr, StringValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DateFillMissingFunction extends AbstractDateValue {
+  private final DateValue baseExpr;
+  private final DateValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DateFillMissingFunction(DateValue baseExpr, DateValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    boolean exists = false;
-    Consumer<String> cons;
+  boolean exists = false;
 
-    @Override
-    public void streamStrings(Consumer<String> cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamStrings(this);
-      if (!exists) {
-        fillExpr.streamStrings(cons);
-      }
-    }
-    @Override
-    public void accept(String value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public long getLong() {
+    long value = baseExpr.getLong();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getLong();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringStreamFillMissingFunction extends AbstractStringValueStream implements Consumer<String> {
+  private final StringValueStream baseExpr;
+  private final StringValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringStreamFillMissingFunction(StringValueStream baseExpr, StringValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class StringFillMissingFunction extends AbstractStringValue {
-    private final StringValue baseExpr;
-    private final StringValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
+  Consumer<String> cons;
 
-    public StringFillMissingFunction(StringValue baseExpr, StringValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public void streamStrings(Consumer<String> cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamStrings(this);
+    if (!exists) {
+      fillExpr.streamStrings(cons);
     }
+  }
+  @Override
+  public void accept(String value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringFillMissingFunction extends AbstractStringValue {
+  private final StringValue baseExpr;
+  private final StringValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringFillMissingFunction(StringValue baseExpr, StringValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public String getString() {
-      String value = baseExpr.getString();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getString();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public String getString() {
+    String value = baseExpr.getString();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getString();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
index f266e79..6dac746 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
@@ -128,613 +128,596 @@ public class FilterFunction {
     }
     return new StreamFilterFunction(baseExpr,filterExpr);
   });
-
-  static class StreamFilterFunction extends AbstractAnalyticsValueStream {
-    private final AnalyticsValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StreamFilterFunction(AnalyticsValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    @Override
-    public void streamObjects(Consumer<Object> cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamObjects(cons);
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+class StreamFilterFunction extends AbstractAnalyticsValueStream {
+  private final AnalyticsValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StreamFilterFunction(AnalyticsValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
   }
 
-  static class ValueFilterFunction extends AbstractAnalyticsValue {
-    private final AnalyticsValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public ValueFilterFunction(AnalyticsValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public Object getObject() {
-      Object value = baseExpr.getObject();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamObjects(Consumer<Object> cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamObjects(cons);
     }
   }
 
-  static class BooleanStreamFilterFunction extends AbstractBooleanValueStream {
-    private final BooleanValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanStreamFilterFunction(BooleanValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamBooleans(cons);
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
-
-  static class BooleanFilterFunction extends AbstractBooleanValue {
-    private final BooleanValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanFilterFunction(BooleanValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public boolean getBoolean() {
-      boolean value = baseExpr.getBoolean();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
   }
-
-  static class IntStreamFilterFunction extends AbstractIntValueStream {
-    private final IntValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntStreamFilterFunction(IntValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    @Override
-    public void streamInts(IntConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamInts(cons);
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
-
-  static class IntFilterFunction extends AbstractIntValue {
-    private final IntValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntFilterFunction(IntValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public int getInt() {
-      int value = baseExpr.getInt();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+class ValueFilterFunction extends AbstractAnalyticsValue {
+  private final AnalyticsValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public ValueFilterFunction(AnalyticsValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
   }
 
-  static class LongStreamFilterFunction extends AbstractLongValueStream {
-    private final LongValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public LongStreamFilterFunction(LongValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamLongs(cons);
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public Object getObject() {
+    Object value = baseExpr.getObject();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class LongFilterFunction extends AbstractLongValue {
-    private final LongValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongFilterFunction(LongValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public long getLong() {
-      long value = baseExpr.getLong();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanStreamFilterFunction extends AbstractBooleanValueStream {
+  private final BooleanValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public BooleanStreamFilterFunction(BooleanValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamBooleans(cons);
     }
   }
 
-  static class FloatStreamFilterFunction extends AbstractFloatValueStream {
-    private final FloatValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public FloatStreamFilterFunction(FloatValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanFilterFunction extends AbstractBooleanValue {
+  private final BooleanValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public BooleanFilterFunction(BooleanValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public void streamFloats(FloatConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamFloats(cons);
-      }
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public boolean getBoolean() {
+    boolean value = baseExpr.getBoolean();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class FloatFilterFunction extends AbstractFloatValue {
-    private final FloatValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class IntStreamFilterFunction extends AbstractIntValueStream {
+  private final IntValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public IntStreamFilterFunction(IntValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    public FloatFilterFunction(FloatValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  @Override
+  public void streamInts(IntConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamInts(cons);
     }
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class IntFilterFunction extends AbstractIntValue {
+  private final IntValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public IntFilterFunction(IntValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public float getFloat() {
-      float value = baseExpr.getFloat();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public int getInt() {
+    int value = baseExpr.getInt();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class DoubleStreamFilterFunction extends AbstractDoubleValueStream {
-    private final DoubleValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DoubleStreamFilterFunction(DoubleValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongStreamFilterFunction extends AbstractLongValueStream {
+  private final LongValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongStreamFilterFunction(LongValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public void streamDoubles(DoubleConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamDoubles(cons);
-      }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamLongs(cons);
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongFilterFunction extends AbstractLongValue {
+  private final LongValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongFilterFunction(LongValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
   }
 
-  static class DoubleFilterFunction extends AbstractDoubleValue {
-    private final DoubleValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public DoubleFilterFunction(DoubleValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public long getLong() {
+    long value = baseExpr.getLong();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatStreamFilterFunction extends AbstractFloatValueStream {
+  private final FloatValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public FloatStreamFilterFunction(FloatValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public double getDouble() {
-      double value = baseExpr.getDouble();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
+  @Override
+  public void streamFloats(FloatConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamFloats(cons);
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatFilterFunction extends AbstractFloatValue {
+  private final FloatValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public FloatFilterFunction(FloatValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
   }
 
-  static class DateStreamFilterFunction extends AbstractDateValueStream {
-    private final DateValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public DateStreamFilterFunction(DateValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public float getFloat() {
+    float value = baseExpr.getFloat();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamLongs(cons);
-      }
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleStreamFilterFunction extends AbstractDoubleValueStream {
+  private final DoubleValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DoubleStreamFilterFunction(DoubleValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamDoubles(DoubleConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamDoubles(cons);
     }
   }
 
-  static class DateFilterFunction extends AbstractDateValue {
-    private final DateValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleFilterFunction extends AbstractDoubleValue {
+  private final DoubleValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DoubleFilterFunction(DoubleValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    public DateFilterFunction(DateValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  boolean exists = false;
 
-    boolean exists = false;
+  @Override
+  public double getDouble() {
+    double value = baseExpr.getDouble();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public long getLong() {
-      long value = baseExpr.getLong();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DateStreamFilterFunction extends AbstractDateValueStream {
+  private final DateValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DateStreamFilterFunction(DateValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamLongs(cons);
     }
   }
 
-  static class StringStreamFilterFunction extends AbstractStringValueStream {
-    private final StringValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StringStreamFilterFunction(StringValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DateFilterFunction extends AbstractDateValue {
+  private final DateValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DateFilterFunction(DateValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public void streamStrings(Consumer<String> cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamStrings(cons);
-      }
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public long getLong() {
+    long value = baseExpr.getLong();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class StringFilterFunction extends AbstractStringValue {
-    private final StringValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringStreamFilterFunction extends AbstractStringValueStream {
+  private final StringValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringStreamFilterFunction(StringValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    public StringFilterFunction(StringValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  @Override
+  public void streamStrings(Consumer<String> cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamStrings(cons);
     }
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringFilterFunction extends AbstractStringValue {
+  private final StringValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringFilterFunction(StringValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public String getString() {
-      String value = baseExpr.getString();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getString() {
+    String value = baseExpr.getString();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
index a506e46..ff28b90 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
@@ -172,738 +172,722 @@ public class IfFunction extends AbstractAnalyticsValueStream {
   public ExpressionType getExpressionType() {
     return funcType;
   }
+}
+class ValueIfFunction extends AbstractAnalyticsValue {
+  private final BooleanValue ifExpr;
+  private final AnalyticsValue thenExpr;
+  private final AnalyticsValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class ValueIfFunction extends AbstractAnalyticsValue {
-    private final BooleanValue ifExpr;
-    private final AnalyticsValue thenExpr;
-    private final AnalyticsValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public ValueIfFunction(BooleanValue ifExpr, AnalyticsValue thenExpr, AnalyticsValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public ValueIfFunction(BooleanValue ifExpr, AnalyticsValue thenExpr, AnalyticsValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public Object getObject() {
-      exists = false;
-      Object value = null;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getObject();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getObject();
-          exists = elseExpr.exists();
-        }
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public Object getObject() {
+    exists = false;
+    Object value = null;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getObject();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getObject();
+        exists = elseExpr.exists();
+      }
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class BooleanStreamIfFunction extends AbstractBooleanValueStream {
-    private final BooleanValue ifExpr;
-    private final BooleanValueStream thenExpr;
-    private final BooleanValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanStreamIfFunction(BooleanValue ifExpr, BooleanValueStream thenExpr, BooleanValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamBooleans(cons);
-        }
-        else {
-          elseExpr.streamBooleans(cons);
-        }
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanStreamIfFunction extends AbstractBooleanValueStream {
+  private final BooleanValue ifExpr;
+  private final BooleanValueStream thenExpr;
+  private final BooleanValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class BooleanIfFunction extends AbstractBooleanValue {
-    private final BooleanValue ifExpr;
-    private final BooleanValue thenExpr;
-    private final BooleanValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanIfFunction(BooleanValue ifExpr, BooleanValue thenExpr, BooleanValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  public BooleanStreamIfFunction(BooleanValue ifExpr, BooleanValueStream thenExpr, BooleanValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
+
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamBooleans(cons);
+      }
+      else {
+        elseExpr.streamBooleans(cons);
+      }
     }
+  }
 
-    private boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanIfFunction extends AbstractBooleanValue {
+  private final BooleanValue ifExpr;
+  private final BooleanValue thenExpr;
+  private final BooleanValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public boolean getBoolean() {
-      exists = false;
-      boolean value = false;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getBoolean();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getBoolean();
-          exists = elseExpr.exists();
-        }
+  public BooleanIfFunction(BooleanValue ifExpr, BooleanValue thenExpr, BooleanValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
+
+  private boolean exists = false;
+
+  @Override
+  public boolean getBoolean() {
+    exists = false;
+    boolean value = false;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getBoolean();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getBoolean();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class IntStreamIfFunction extends AbstractIntValueStream {
+  private final BooleanValue ifExpr;
+  private final IntValueStream thenExpr;
+  private final IntValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class IntStreamIfFunction extends AbstractIntValueStream {
-    private final BooleanValue ifExpr;
-    private final IntValueStream thenExpr;
-    private final IntValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntStreamIfFunction(BooleanValue ifExpr, IntValueStream thenExpr, IntValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public IntStreamIfFunction(BooleanValue ifExpr, IntValueStream thenExpr, IntValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamInts(IntConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamInts(cons);
-        }
-        else {
-          elseExpr.streamInts(cons);
-        }
+  @Override
+  public void streamInts(IntConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamInts(cons);
+      }
+      else {
+        elseExpr.streamInts(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class IntIfFunction extends AbstractIntValue {
+  private final BooleanValue ifExpr;
+  private final IntValue thenExpr;
+  private final IntValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class IntIfFunction extends AbstractIntValue {
-    private final BooleanValue ifExpr;
-    private final IntValue thenExpr;
-    private final IntValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntIfFunction(BooleanValue ifExpr, IntValue thenExpr, IntValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public IntIfFunction(BooleanValue ifExpr, IntValue thenExpr, IntValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public int getInt() {
-      exists = false;
-      int value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getInt();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getInt();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public int getInt() {
+    exists = false;
+    int value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getInt();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getInt();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongStreamIfFunction extends AbstractLongValueStream {
+  private final BooleanValue ifExpr;
+  private final LongValueStream thenExpr;
+  private final LongValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class LongStreamIfFunction extends AbstractLongValueStream {
-    private final BooleanValue ifExpr;
-    private final LongValueStream thenExpr;
-    private final LongValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongStreamIfFunction(BooleanValue ifExpr, LongValueStream thenExpr, LongValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public LongStreamIfFunction(BooleanValue ifExpr, LongValueStream thenExpr, LongValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamLongs(cons);
-        }
-        else {
-          elseExpr.streamLongs(cons);
-        }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamLongs(cons);
+      }
+      else {
+        elseExpr.streamLongs(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongIfFunction extends AbstractLongValue {
+  private final BooleanValue ifExpr;
+  private final LongValue thenExpr;
+  private final LongValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class LongIfFunction extends AbstractLongValue {
-    private final BooleanValue ifExpr;
-    private final LongValue thenExpr;
-    private final LongValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongIfFunction(BooleanValue ifExpr, LongValue thenExpr, LongValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public LongIfFunction(BooleanValue ifExpr, LongValue thenExpr, LongValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public long getLong() {
-      exists = false;
-      long value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getLong();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getLong();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public long getLong() {
+    exists = false;
+    long value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getLong();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getLong();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
   }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatStreamIfFunction extends AbstractFloatValueStream {
+  private final BooleanValue ifExpr;
+  private final FloatValueStream thenExpr;
+  private final FloatValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class FloatStreamIfFunction extends AbstractFloatValueStream {
-    private final BooleanValue ifExpr;
-    private final FloatValueStream thenExpr;
-    private final FloatValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public FloatStreamIfFunction(BooleanValue ifExpr, FloatValueStream thenExpr, FloatValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public FloatStreamIfFunction(BooleanValue ifExpr, FloatValueStream thenExpr, FloatValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamFloats(FloatConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamFloats(cons);
-        }
-        else {
-          elseExpr.streamFloats(cons);
-        }
+  @Override
+  public void streamFloats(FloatConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamFloats(cons);
+      }
+      else {
+        elseExpr.streamFloats(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class FloatIfFunction extends AbstractFloatValue {
+  private final BooleanValue ifExpr;
+  private final FloatValue thenExpr;
+  private final FloatValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class FloatIfFunction extends AbstractFloatValue {
-    private final BooleanValue ifExpr;
-    private final FloatValue thenExpr;
-    private final FloatValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public FloatIfFunction(BooleanValue ifExpr, FloatValue thenExpr, FloatValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public FloatIfFunction(BooleanValue ifExpr, FloatValue thenExpr, FloatValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public float getFloat() {
-      exists = false;
-      float value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getFloat();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getFloat();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public float getFloat() {
+    exists = false;
+    float value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getFloat();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getFloat();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleStreamIfFunction extends AbstractDoubleValueStream {
+  private final BooleanValue ifExpr;
+  private final DoubleValueStream thenExpr;
+  private final DoubleValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class DoubleStreamIfFunction extends AbstractDoubleValueStream {
-    private final BooleanValue ifExpr;
-    private final DoubleValueStream thenExpr;
-    private final DoubleValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DoubleStreamIfFunction(BooleanValue ifExpr, DoubleValueStream thenExpr, DoubleValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public DoubleStreamIfFunction(BooleanValue ifExpr, DoubleValueStream thenExpr, DoubleValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamDoubles(DoubleConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamDoubles(cons);
-        }
-        else {
-          elseExpr.streamDoubles(cons);
-        }
+  @Override
+  public void streamDoubles(DoubleConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamDoubles(cons);
+      }
+      else {
+        elseExpr.streamDoubles(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleIfFunction extends AbstractDoubleValue {
+  private final BooleanValue ifExpr;
+  private final DoubleValue thenExpr;
+  private final DoubleValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class DoubleIfFunction extends AbstractDoubleValue {
-    private final BooleanValue ifExpr;
-    private final DoubleValue thenExpr;
-    private final DoubleValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DoubleIfFunction(BooleanValue ifExpr, DoubleValue thenExpr, DoubleValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public DoubleIfFunction(BooleanValue ifExpr, DoubleValue thenExpr, DoubleValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public double getDouble() {
-      exists = false;
-      double value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getDouble();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getDouble();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public double getDouble() {
+    exists = false;
+    double value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getDouble();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getDouble();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class DateStreamIfFunction extends AbstractDateValueStream {
+  private final BooleanValue ifExpr;
+  private final DateValueStream thenExpr;
+  private final DateValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class DateStreamIfFunction extends AbstractDateValueStream {
-    private final BooleanValue ifExpr;
-    private final DateValueStream thenExpr;
-    private final DateValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateStreamIfFunction(BooleanValue ifExpr, DateValueStream thenExpr, DateValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public DateStreamIfFunction(BooleanValue ifExpr, DateValueStream thenExpr, DateValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamLongs(cons);
-        }
-        else {
-          elseExpr.streamLongs(cons);
-        }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamLongs(cons);
+      }
+      else {
+        elseExpr.streamLongs(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class DateIfFunction extends AbstractDateValue {
+  private final BooleanValue ifExpr;
+  private final DateValue thenExpr;
+  private final DateValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class DateIfFunction extends AbstractDateValue {
-    private final BooleanValue ifExpr;
-    private final DateValue thenExpr;
-    private final DateValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateIfFunction(BooleanValue ifExpr, DateValue thenExpr, DateValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public DateIfFunction(BooleanValue ifExpr, DateValue thenExpr, DateValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public long getLong() {
-      exists = false;
-      long value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getLong();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getLong();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public long getLong() {
+    exists = false;
+    long value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getLong();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getLong();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class StringStreamIfFunction extends AbstractStringValueStream {
-    private final BooleanValue ifExpr;
-    private final StringValueStream thenExpr;
-    private final StringValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringStreamIfFunction extends AbstractStringValueStream {
+  private final BooleanValue ifExpr;
+  private final StringValueStream thenExpr;
+  private final StringValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    public StringStreamIfFunction(BooleanValue ifExpr, StringValueStream thenExpr, StringValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public StringStreamIfFunction(BooleanValue ifExpr, StringValueStream thenExpr, StringValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamStrings(Consumer<String> cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamStrings(cons);
-        }
-        else {
-          elseExpr.streamStrings(cons);
-        }
+  @Override
+  public void streamStrings(Consumer<String> cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamStrings(cons);
+      }
+      else {
+        elseExpr.streamStrings(cons);
       }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
     }
   }
 
-  static class StringIfFunction extends AbstractStringValue {
-    private final BooleanValue ifExpr;
-    private final StringValue thenExpr;
-    private final StringValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringIfFunction extends AbstractStringValue {
+  private final BooleanValue ifExpr;
+  private final StringValue thenExpr;
+  private final StringValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    public StringIfFunction(BooleanValue ifExpr, StringValue thenExpr, StringValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public StringIfFunction(BooleanValue ifExpr, StringValue thenExpr, StringValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public String getString() {
-      exists = false;
-      String value = null;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getString();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getString();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public String getString() {
+    exists = false;
+    String value = null;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getString();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getString();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
-}
... 258652 lines suppressed ...