                              Apache Solr Release Notes

This file lists Solr's raw release notes with details of every change to Solr.
Most people will find the solr-upgrade-notes.adoc file more approachable.
https://github.com/apache/lucene-solr/blob/master/solr/solr-ref-guide/src/solr-upgrade-notes.adoc

==================  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

New Features
---------------------
* SOLR-14789: Migrate docker image creation from docker-solr repo to solr/docker. (Houston Putman, Martijn Koster, Tim Potter, David Smiley, janhoy, Mike Drob)

* 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)


Improvements
----------------------
* LUCENE-8984: MoreLikeThis MLT is biased for uncommon fields (Andy Hind via Anshum Gupta)

* 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)

* SOLR-14615: CPU Utilization Based Circuit Breaker (Atri Sharma)

* SOLR-14799: JWT authentication plugin only requires "sub" claim when principalClaim=sub. (Erik Hatcher)

* SOLR-14878: Report solr.xml's coreRootDirectory property via System Settings API, when set (Alexandre Rafalovitch)

* SOLR-14880: Support coreRootDirectory setting when create new cores from command line, in standalone mode (Alexandre Rafalovitch)

Other Changes
----------------------
* SOLR-14656: Autoscaling framework removed (Ishan Chattopadhyaya, noble, Ilan Ginzburg)

* SOLR-14616: CDCR support removed (Ishan Chattopadhyaya)

* 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)

* SOLR-13797: SolrResourceLoader no longer caches bad results when asked for wrong type (Mike Drob)

* LUCENE-9092: Upgrade Carrot2 to 3.16.2 (Dawid Weiss).

* LUCENE-9080: Upgrade ICU4j to 62.2 and make regenerate work (Erick Erickson)

* SOLR-14271: Remove duplicate async id check meant for pre Solr 8 versions (Anshum Gupta)

* SOLR-14272: Remove autoReplicaFailoverBadNodeExpiration and autoReplicaFailoverWorkLoopDelay for 9.0 as it was
  deprecated in 7.1 (Anshum Gupta)

* SOLR-14258: DocList no longer extends DocSet. (David Smiley)

* 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)

* LUCENE-9433: Remove Ant support from trunk (Erick Erickson, Uwe Schindler et.al.)

* SOLR-14783: Remove Data Import Handler (DIH), previously deprecated (Alexandre Rafalovitch)

* SOLR-14846: Backup/Restore classes no longer take Optional method parameters and will accept nulls instead. (Mike Drob)

* LUCENE-9531: Consolidated CharStream and FastCharStream classes: these have been moved from each query parser
               package to org.apache.lucene.queryparser.charstream (Dawid Weiss).

* SOLR-9607: Remove /terms configuration from solrconfig.xml, as implicit definition is up-to-par now (Alexandre Rafalovitch)

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)

* SOLR-14875: Make SolrEventListeners load from packages (noble)

* SOLR-10391: ConfigSet handler now supports overrides on existing configsets. (Tomás Fernández Löbbe)

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)

* SOLR-14722: Track timeAllowed from earlier in the request lifecycle. (David Smiley)

* SOLR-13438: On deleting a collection, its config set will also be deleted iff it has been auto-created, and not used by any other collection (Anderson Dorow)

* SOLR-14802: geodist: Support most (all?) spatial field types as an argument like LLPSF, SRPTFT, and others.
  (Tom Edge, Craig Wrigglesworth)

* SOLR-14859: DateRangeField now throws errors when invalid field/fieldType options specified; no longer silently accepts incompatible option values
  (Jason Gerlowski, Chris Hostetter, Munendra S N)

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)

* SOLR-14422: Admin UI shows Angular placeholders on first load / refresh.  (Colvin Cowie via Eric Pugh)

* SOLR-14819: Fix inefficient iterator pattern in JsonSchemaValidator. (Thomas DuBuisson via Bruno Roustant)

* SOLR-14658: SolrJ's CollectionAdminRequest.collectionStatus(collection) would internally get 
  all collection statuses instead of just the specified collection. (Andy Vuong)

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)

* SOLR-14703: Fix edismax replacement of all whitespace characters with spaces (Yuriy Koval via Jason Gerlowski)

* SOLR-14700: Avoid NullPointerException in TupleStream.getShards() when streamContext is null.
  (Mads Bondo Dydensborg, Christine Poerschke, Mike Drob)

* SOLR-14752: Fix error in Zookeeper status when Prometheus plugin is enabled in ZK (Philipp Trulson via janhoy)

* SOLR-14774: HealthCheckHandler is no longer an implicit SolrCore handler and can be configured from solr.xml
  (Tomás Fernándex Löbbe)

* SOLR-14714: Solr.cmd in windows loads the incorrect jetty module when using java>=9 (Endika Posadas via
  Erick Erickson)

* SOLR-14821: {!terms} docValuesTermsFilterTopLevel method now works with single-valued strings (Anatolii Siuniaev
  via 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)

* SOLR-14731: Rename @SolrSingleThreaded to @SolrThreadUnsafe, mark DistribPackageStore with the annotation
  (marcussorealheis)

* SOLR-14579: Comment SolrJ 'Utils' generic map functions 
  (Megan Carey and a lot of education from Uwe Schindler via Erick Erickson)

* SOLR-10471: Update default Zookeeper session timeout to 30s in bin/solr and bin/solr.cmd
  (Michael Braun, Markus Jelsma via Munendra S N)

* SOLR-14876: Upgrade to zookeeper 3.6.2 (odidev via Erick Erickson)

==================  8.6.2 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Bug Fixes
---------------------
* SOLR-14751: Zookeeper Admin screen not working for old ZK versions (janhoy)

==================  8.6.1 ==================

Bug Fixes
---------------------

* SOLR-14665, SOLR-14706: Revert SOLR-12845 adding of default autoscaling cluster policy, due to performance
 issues. (Ishan Chattopadhyaya, Houston Putman, Gus Heck, ab)

* 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
   (Anatolii Siuniaev via Mikhail Khludnev)

* 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-12325: Introducing uniqueBlock({!v=type:parent}) aggregation (Anatolii Siuniaev via Mikhail Khludnev)

* SOLR-14241: New delete() Stream Decorator (hossman)

* SOLR-14139: Support backtick phrase queries in Streaming Expressions (Joel Bernstein)

* 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)

Improvements
---------------------
* SOLR-14120: Define JavaScript methods 'includes' and 'startsWith' to ensure AdminUI can be displayed when using
  Internet Explorer 11 (jafurrer).

* SOLR-14042: Fix varargs precommit warnings (Andraas Salamon via Jason Gerlowski)

* SOLR-14095: Replace Java serialization with Javabin in the Overseer queues (Tomás Fernández Löbbe)

* SOLR-14125: Make <expressible> plugins work with packages (noble)

* SOLR-14138: Jetty's NCSA-formatted RequestLog can be enabled via environment variable,
  SOLR_REQUESTLOG_ENABLED=true. This will respect SOLR_LOGS_DIR if it is set. (rmuir)

* SOLR-14136: Jetty's InetAccessHandler can be enabled via environment variables,
  SOLR_IP_WHITELIST and SOLR_IP_BLACKLIST. These variables can restrict access to
  Solr based on IP addresses/networks. (rmuir)

* SOLR-14131: Add maxQueryLength option to DirectSolrSpellchecker. (Andy Webb via Bruno Roustant)

* SOLR-13984: Java's SecurityManager sandbox can be enabled via environment variable,
  SOLR_SECURITY_MANAGER_ENABLED=true. (rmuir)

* SOLR-14129: Reuse Jackson ObjectMapper in AuditLoggerPlugin (janhoy)

* LUCENE-9093: The Unified highlighter has two new passage sizing parameters, hl.fragAlignRatio and
  hl.fragsizeIsMinimum, with defaults that aim to better center matches in fragments than previously. See the ref guide.
  Regardless of the settings, the passages may be sized differently than before. (Nándor Mátravölgyi, David Smiley)

* SOLR-14154: Return correct isolation level when retrieving it from the SQL Connection (Nick Vercammen, Kevin Risden)

* SOLR-14132: Upgrade Angular JS 1.3.8 to 1.7.9 (Kevin Risden)

* SOLR-14221: Upgrade restlet to version 2.4.0 (janhoy)

* SOLR-10567: Add Support for DateRangeField in JSON Facet range (Stephen Weiss, Munendra S N)

* SOLR-14245: Validate Replica / ReplicaInfo on creation. (ab)

* SOLR-14194: Highlighting now works when the uniqueKey field is not stored but has docValues.  And the original
  highlighter can now highlight text fields from docValues. (Andrzej Wislowski, David Smiley)

* SOLR-14270: export command to have an option to write to a zip file (noble)

* 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
---------------------

* SOLR-13890: Add "top-level" DV implementation for {!terms} queries.  This approach tends to be more efficient for
  queries with very large numbers of terms.  The new implementation is used by default for method=docValuesTermsFilter
  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)

Bug Fixes
---------------------

* SOLR-14099: Fixed @LogLevel annotation in test-framework to correctly 'unset' Loggers after test (hossman)

* SOLR-14017: Ensure bin/solr's -q and -v options work with examples (Andy Vuong via Jason Gerlowski)

* SOLR-14122: SimUtils converts v2 to v1 request params incorrectly. (Li Cao, ab)

* SOLR-13089: Fix lsof edge cases in the solr CLI script (Martijn Koster via janhoy)

* SOLR-14198: Nullpointer exception in AuditEvent when initialized from AuthorizationContext (janhoy)

* SOLR-6613: TextField.analyzeMultiTerm does not throw an exception when Analyzer returns no terms. (Bruno Roustant)

* SOLR-14192: Race condition between SchemaManager and ZkIndexSchemaReader. (ab)

* SOLR-12859: Fixed DocExpirationUpdateProcessorFactory to work with BasicAuth and other auth plugins
  that delegate to PKI for server initiated node-to-node communication. (hossman)

* SOLR-11746: Adding existence queries for PointFields. DocValuesFieldExistsQuery and NormsFieldExistsQuery are used for existence queries when possible. (Houston Putman, hossman, Kai Chan)

* SOLR-14207: Fix logging statements with less or more arguments than placeholders. (shalin)

* SOLR-14172: Collection metadata remains in zookeeper if too many shards are requested. This also fixes a bug where
  an inability to assign a node based on existing autoscaling policy resulted in a server error instead of a bad request.
  (Andras Salamon, Kevin Risden, shalin)

* SOLR-14196: AdminUI login not working for JWTAuth when blockUnknown=false (janhoy)

* SOLR-14205: Do not fail when given timeout to connectionImpl.isValid() = 0 (Nick Vercammen via Kevin Risden)

* SOLR-11554: Support handling OPTIONS request for Hadoop authentication filter (Peter Cseh via Kevin Risden)

* SOLR-14189: Switch from String.trim() to StringUtils.isBlank() in query parsers (Andy Webb via Uwe Schindler)

* SOLR-13897: Fix unsafe publication of Terms object in ZkShardTerms that can cause visibility issues
  and race conditions under contention. (shalin)

* SOLR-14090: Handle the case in `delete-copy-field` when source is a dynamic field (Frank Iversen, Munendra S N)

* SOLR-14219: SOLR-14095 Introduced an issue for rolling restarts (Incompatible Java serialization). This change
  Fixes the compatibility issue while keeping the functionality in SOLR-14095. (Andy Webb, Tomás Fernández Löbbe)

* SOLR-13887: Use default idleTimeout instead of 0 for HTTP2 requests. (Houston Putman)

* SOLR-14038: Admin UI display for "state.json" should be in a scollable region (Kevin Risden)

* SOLR-14058: Fix IndexOutOfBoundsException in PeerSync that can prevent nodes from recovering
  under certain circumstances. (yonik)

* SOLR-13041: Add hashCode for autoscaling.Condition to accompany the already present equals.
  (Zsolt Gyulavari via Christine Poerschke)

* SOLR-12550: ConcurrentUpdateSolrClient doesn't respect timeouts for commits and optimize.
  (Marc A. Morissette, Bérénice MAUREL via shalin)

* SOLR-14250: Do not log error when trying to consume non-existing input stream due to Expect: 100-continue (janhoy)

* SOLR-13411: Deny atomic update for route.field, uniqueKey, version and throw exception. (Dr Oleg Savrasov via Mikhail Khludnev)

* SOLR-14252: Avoid NullPointerException in AggregateMetric. (Andy Webb via ab)

* 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
---------------------

* SOLR-14047: Make sure tests don't pickup other Hadoop installs (Kevin Risden)

* SOLR-14054: Upgrade to Tika 1.23 when available (Tim Allison)

* SOLR-14091: Remove deprecated soLingerTime when configuring Jetty connector (Matthias Krueger via Kevin Risden)

* SOLR-13778: Solrj client will retry requests on SSLException with a suppressed SocketException
  (very likely a hard-closed socket connection).

* SOLR-14169: Fix 20 Resource Leak warnings in SolrJ's apache/solr/common (Andras Salamon via Tomás Fernández Löbbe)

* SOLR-14184: Internal 'test' variable DirectUpdateHandler2.commitOnClose has been removed and replaced with
  TestInjection.skipIndexWriterCommitOnClose.  Users that modified DUH2.commitOnClose in test cases for custom
  plugins/modicitations should now use TestInjection instead.  (hossman)

* SOLR-14248: Improve ClusterStateMockUtil and make its methods public. (shalin)

* SOLR-14209: Upgrade JQuery to 3.4.1 (Kevin Risden)

* SOLR-13996: Refactor HttpShardHandler.prepDistributed method. (shalin)

* SOLR-13794: Replace redundent test only copy of '_default' configset with SolrTestCase logic to correctly
  set 'solr.default.confdir' system property (hossman)

* SOLR-14263: Update jvm-settings.adoc (Erick Erickson)

* SOLR-11035: (at least) 2 distinct failures possible when clients attempt searches
  during SolrCore reload. Removed Bandaid kludge. (Erick Erickson)

* 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.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 2.0 and Velocity Tools 3.0
Apache ZooKeeper 3.5.5
Jetty 9.4.19.v20190610

Upgrade Notes
---------------------

* SOLR-14158: Package manager now stores keys in package store instead of ZK. If you're using package manager and have already
  added any repositories, then you would need to re-add all the keys from /keys/exe location, one-by-one, using:
  "bin/solr add-key <keyfile.der>"

Bug Fixes
----------------------

* SOLR-14106: Cleanup Jetty SslContextFactory usage (Ryan Rockenbaugh, Jan Hoydahl, Kevin Risden)

* SOLR-14109: Always log to stdout from server/scripts/cloud-scripts/zkcli.{bat|sh} (janhoy)

* SOLR-14165: SolrResponse serialVersionUID has changed in a backward incompatible way (Andy Webb via noble)

* SOLR-14163: SOLR_SSL_CLIENT_HOSTNAME_VERIFICATION needs to work with Jetty server/client SSL contexts (Kevin Risden)

Improvements
---------------------

* SOLR-14158: Package manager to store public keys in a special "trusted" location instead of in ZooKeeper
  (noble, Ishan Chattopadhyaya)

==================  8.4.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 2.0 and Velocity Tools 3.0
Apache ZooKeeper 3.5.5
Jetty 9.4.19.v20190610

Upgrade Notes
---------------------

* SOLR-13823: org.apache.solr.search.grouping.distributed.command.QueryCommand.Builder has new method 'setMainQuery' which is used
  to set top-level query. build() would fail if called without setting mainQuery.

* SOLR-13817: Deprecate legacy SolrCache implementations. Users are encouraged to transition their
  configurations to use org.apache.solr.search.CaffeineCache instead. (ab)

* SOLR-13982: Some security-related http headers such as Content-Security-Policy are now set. If you have custom html served
  up by Solr's http server that contains inline javascript, it will no longer execute in modern browsers. You can fix your JS
  code to not run inline anymore, or edit etc/jetty.xml and weaken the CSP, or remove/alter the headers with a reverse proxy. (rmuir)

* SOLR-13806: QueryResponse.getExplainMap() type has changed from Map<String, String> to Map<String, Object>
  in order to accommodate structured explanations. This is a partially back-compatible change - compiled
  third-party components will work the same as before due to type erasure but source code changes may be
  required.

* SOLR-14025: VelocityResponseWriter has been hardened - only trusted configsets can render configset provided
  templates and rendering templates from request parameters has been removed.

* SOLR-13904: timeAllowed parameter is allowed to have 0 value (Houston Putman, Mikhail Khludnev)

* SOLR-13970: Using Collapse filter or expand component with grouping is explicitly disallowed as the combination
  would cause inconsistent behavior and NPEs.

* SOLR-13978: The default configset no longer has the following:
    - Library inclusions (<lib ../>) for extraction, solr-cell libs, clustering, velocity, LTR and language identifier
    - /browse, /tvrh and /update/extract handlers
    - TermVector component (if someone wants it, can be added using config APIs)
    - XSLT response writer
    - Velocity response writer
  If you want to use them in your collections, please add them to your configset manually or through the Config APIs.

* SOLR-14071: Untrusted configsets (ones that are uploaded via unsecured configset API) cannot use <lib> directive.
  Consider enabling authentication/authorization so that the uploaded configsets are trusted.
  Note: If you already have a collection using untrusted configset that uses <lib> directive, it will not load after
  upgrading to 8.4. You can re-upload your configset using "bin/solr zk -upconfig .." or place your libraries in the
  classpath and restart Solr.

* SOLR-14065: VelocityResponseWriter has been deprecated and may be removed in a future version.

* SOLR-14072: The "Blob Store" API and "runtimeLib" plugin mechanism that uses it is now considered deprecated. The
  replacement to it is the "Package Management" system, which includes a "File Store". These are experimental currently
  but will grow/stabalize/mature.

New Features
---------------------
* SOLR-13821: A Package store to store and load package artifacts (noble, Ishan Chattopadhyaya)

* SOLR-13822: A Package management system with the following features:
  (a) A packages.json in ZK to store the configuration,
  (b) APIs to read/edit them, and
  (c) Isolated classloaders to load the classes from those packages when the 'class'
      attribute is prefixed with '<package-name>:'
  (noble, Ishan Chattopadhyaya)

* SOLR-13662: A CLI based Package Manager ("bin/solr package help" for more details).
  (Ishan Chattopadhyaya, noble, David Smiley, Jan Hoydahl)

* SOLR-10786: Add DBSCAN clustering Streaming Evaluator (Joel Bernstein)

* SOLR-13911: Add 'missing' aggregation in JSON FacetModule (hossman, Munendra S N)

* SOLR-13912: Add 'countvals' aggregation in JSON FacetModule (hossman, Munendra S N)

* SOLR-12217: Support shards.preference in SolrJ for single shard collections. The parameter
  is now used by the CloudSolrClient and Streaming Expressions. (Houston Putman, Tomas Fernandez-Lobbe)

* SOLR-14043: Allow the precision Stream Evaluator to operate on matrices (Joel bernstein)

* SOLR-14060: Allow the random Streaming Expression to create the x-axis (Joel Bernstein)

Improvements
---------------------

* SOLR-13731: 'javabin' must support a 1:1 mapping of the JSON update format (noble)

* SOLR-13831: Support defining arbitrary autoscaling simulation scenarios. (ab)

* SOLR-13865: Move replica routing code to SolrJ. (Houston Putman via Tomas Fernandez-Lobbe)

* SOLR-13844: Remove replica recovery terms with the replica term (Houston Putman via Cao Manh Dat)

* SOLR-13898: Use the new SolrCache.computeIfAbsent instead of non-atomic get / put in order to
  improve cache hit ratios. (ab, Ben Manes)

* SOLR-13907: In the Cloud/tree section of the Admin UI, fix metadata panel and force an horizontal scrollbar for the tree
  (Richard Goodman via Tomás Fernández Löbbe)

* SOLR-13905: Make findRequestType in AuditEvent more robust (janhoy)

* SOLR-13961: When using partial/atomic updates to remove child documents, we now support setting to null or
  an empty list as equivalent to the "remove" command. (Thomas Wöckinger)

* SOLR-13969: Clean up and document AuditEvent API (janhoy)

* SOLR-13968: Support postingsFormat and docValuesFormat in schema fields. (Bruno Roustant)

* SOLR-11706: Add support for aggregation on multivalued fields in JSON facets. min, max, avg, sum, sumsq, stddev,
  variance, percentile aggregations now have support for multivalued fields. (hossman, Munendra S N)

* SOLR-13987: Admin UI should not rely on javascript eval() (rmuir, Kevin Risden)

* SOLR-13979: Expose separate metrics for distributed and non-distributed requests. (ab)

* SOLR-13957: Add sensible defaults for the facet, random, facet2D, timeseries, stats
  and update Streaming Expressions (Joel Bernstein)

* SOLR-13904: Analytic component abandon requests exceedig limit passed via timeAllowed parameter
  (Houston Putman, Mikhail Khludnev).

* SOLR-13970: Fail the request when collapsing or expand is used with Grouping. (Erick Erickson, Joel Bernstein, Munendra S N)

Bug Fixes
---------------------

* SOLR-13827: Fail on unknown operation in Request Parameters API (Munendra S N, noble)

* SOLR-13403: Fix NPE in TermsComponent for DatePointField (yonik, Munendra S N)

* SOLR-9802: Fix grouping failure for date field in solrcloud (Erick Erickson, Munendra S N, Vitaly Lavrov)

* SOLR-12393: Compute score if requested even when expanded docs not sorted by score in ExpandComponent.
  (David Smiley, Munendra S N)

* SOLR-13877, SOLR-7798: Robust support for ExpandComponent when used independently of CollapsingPostFilter. (Jörg Rathlev, Michael Gibney, Munendra S N)

* SOLR-13823: Fix ClassCastEx when score is requested with group.query. This also fixes score not being generated
  for distributed group.query case. (Uwe Jäger, Munendra S N)

* SOLR-13207: In dismax and edismax "minimum should match" queries, the < operator not followed by a number will now return
  an HTTP 400 error rather than 500, and the error message will explain that < must be followed by a number. (Chris Hennick)

* SOLR-13762: Fix BinaryField support for non-binary wt's (Thomas Woeckinger via Jason Gerlowski)

* SOLR-13882: Collections API COLSTATUS does not check live_nodes when reporting replica's status.
  (Erick Erickson, Andrzej Białecki)

* SOLR-13872: Fixed Backup failures - typically manifesting as NoSuchFileException - due to race conditions
  in saving/reserving commit points (hossman)

* SOLR-13921: Processing UpdateRequest with delegation token throws NullPointerException (Istvan Farkas via Kevin Risden)

* SOLR-13941: Tests configure Jetty differently than when running via start.jar (janhoy, Uwe Schindler)

* SOLR-13950: Fix InterruptedException being swallowed in ZkStateReader’s getLeaderRetry method
  (Andy Vuong via Tomás Fernández Löbbe)

* SOLR-13465: CoreContainer.auditloggerPlugin should be volatile (janhoy, hossman)

* SOLR-13805: NPE when calling /solr/admin/info/health on standalone solr (Nicholas DiPiazza, shalin)

* SOLR-13954: Embedded ZooKeeper in Solr now does not try to load JettyAdminServer (janhoy)

* SOLR-13087: Use EUID instead of whoami to check for root in the bin/solr script (Martijn Koster via Jason Gerlowski)

* SOLR-13977: solr create -c not working under Windows 10 (janhoy)

* SOLR-13966: LatLonPointSpatialField wasn't working correctly with atomic/partial updates or RTG.
  (Thomas Wöckinger via David Smiley)

* SOLR-13563: SPLITSHARD using LINK method fails on disk usage checks. (Andrew Kettmann, ab)

* SOLR-13806: SolrJ QueryResponse._explainMap is incorrectly typed. (Guna Sekhar Dorai, ab)

* SOLR-13975, SOLR-13896: ConcurrentUpdateSolrClient connection stall prevention. (ab, caomanhdat)

* SOLR-13953: Prometheus exporter in SolrCloud mode limited to 100 nodes (Alex Jablonski via Erick Erickson)

* SOLR-13945: Fix: SPLITSHARD can cause data loss on a failure to commit after the sub-shards are active and a rollback
  is done to make parent shard active again (Ishan Chattopadhyaya, ab)

* SOLR-14071: Untrusted configsets cannot use <lib> directive due to security reasons (Ishan Chattopadhyaya)

* SOLR-14013: FIX: javabin performance regressions (noble, yonik, Houston Putman)

* SOLR-14079: SPLITSHARD splitByPrefix doesn't work in async mode.  This also
  affects splits triggered by the autoscale framework, which use async mode.
  (Megan Carey, Andy Vuong, Bilal Waheed, Ilan Ginzburg, yonik)

Other Changes
---------------------

* SOLR-12769: Fix incorrect documentation for 'delete' op in Request parameters API (Alexandre Rafalovitch, Munendra S N)

* SOLR-13841: Provide mappings for jackson annotation @JsonProperty to use Jackson deserializer (noble)

* SOLR-13824: Strictly reject anything after JSON in most APIs (Mikhail Khludnev, Munendra S N)

* SOLR-13869: SolrTestCaseJ4.getNextAvailablePort() has been deprecated (and will be removed in 9.0) since
  it is fundementally flawed.  Users with tests that depend on this method should restructure them. (hossman)

* SOLR-13782: Solr Ref Guide no longer published in PDF format. (Cassandra Targett)

* SOLR-12193: Move some log messages to TRACE level (gezapeti, janhoy)

* SOLR-13885: Typos in the documentation. (KoenDG via Cassandra Targett)

* SOLR-13992: Code refactored to have collection name, slice name in Replica, Slice (noble)

* SOLR-13998: Add thread safety annotations to Solr. This only introduces the annotations and doesn't add these to
  existing classes. (Anshum Gupta, Mark Miller)

* SOLR-13818: Upgrade jackson to 2.10.0 (marungo, Andras Salamon via Kevin Risden)

* SOLR-13999: Document zkHost param on topic() stream (Vergil Cheynov via Jason Gerlowski)

==================  8.3.1 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 2.0 and Velocity Tools 3.0
Apache ZooKeeper 3.5.5
Jetty 9.4.24.v20191120

Upgrade Notes
----------------------

* Velocity: The initialization parameters
  "params.resource.loader.enabled" and "solr.resource.loader.enabled" have been removed and replaced by
  Java system properties "velocity.resourceloader.params.enabled" and "velocity.resourceloader.solr.enabled"
  respectively (both turned off by default). Please see SOLR-13971 for more details.

Bug Fixes
----------------------

* SOLR-13963: JavaBinCodec has concurrent modification of CharArr resulting in corrupt internode updates (Colvin Cowie, noble)

* SOLR-13971: Velocity response writer's resource loading now possible only through startup parameters.
  (Ishan Chattopadhyaya, David Smiley)

* SOLR-13465: CoreContainer.auditloggerPlugin should be volatile (janhoy, hossman)

* SOLR-13905: Make findRequestType in AuditEvent more robust (janhoy)

* SOLR-13941: Tests configure Jetty differently than when running via start.jar (janhoy, Uwe Schindler)

==================  8.3.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 2.0 and Velocity Tools 3.0
Apache ZooKeeper 3.5.5
Jetty 9.4.19.v20190610

Upgrade Notes
----------------------

* Users who have written test cases that extend SolrTestCaseJ4 may see NullPointerExceptions if
  their tests directly reference both SolrTestCaseJ4.initCoreDataDir and SolrTestCaseJ4.deleteCore().
  This change in behavior is due to a bug fix in deleteCore() to ensure the dataDir is properly reset
  in tests that call initCore()/deleteCore() multiple times in a given test (class).  initCoreDataDir
  is now deprecated, and users are encouraged to use SolrTestCaseJ4.initAndGetDataDir() in it's place.
  See SOLR-13664 for more details.

* For JWTAuthPlugin, the 'jwkUrl' configuration key is deprecated and may be removed later, please use 'jwksUrl'
  instead. See SOLR-13734.

New Features
----------------------

* SOLR-13375: Two dimensional routed aliases are now available for organizing collections based on the data values
  of two fields. (Gus Heck)

* SOLR-13399: SPLITSHARD implements a new splitByPrefix option that takes into account the actual document distribution
  when using compositeIds.  Document distribution is calculated using the "id_prefix" field (if it exists) containing
  just the compositeId prefixes, or directly from the indexed "id" field otherwise. (yonik, Megan Carey)

* SOLR-13622: Add cat() stream source to create tuples from lines in local files (Jason Gerlowski and Joel Bernstein)

* SOLR-11866: QueryElevationComponent can have query rules configured with match="subset" wherein the words need only
  match a subset of the query's words and in any order.  (Bruno Roustant via David Smiley)

* SOLR-13682: command line option to export documents to a file (noble)

* SOLR-13257: Support deterministic replica routing preferences for better cache usage (Michael Gibney
  via Christine Poerschke, Tomás Fernández Löbbe)

* SOLR-13122: Ability to query aliases in Solr Admin UI (janhoy)

* SOLR-13713: JWTAuthPlugin to support multiple JWKS endpoints (janhoy)

* SOLR-13734: JWTAuthPlugin now supports multiple IdP issuers through configuring a new 'issuers' configuration key.
  Access tokens issued and signed by any of the configured issuers will be validated (janhoy)

* SOLR-13272: Add support for arbitrary ranges in JSON facet's Range facets.
  (Apoorv Bhawsar, Munendra S N, Mikhail Khludnev, Ishan Chattopadhyaya, Jan Høydahl)

* SOLR-13632: Support integral plots, cosine distance and string truncation with math expressions (Joel Bernstein)

* SOLR-13667: Add upper, lower, trim and split Stream Evaluators (Joel Bernstein)

* SOLR-13625: Add CsvStream, TsvStream Streaming Expressions and supporting Stream Evaluators (Joel bernstein)

* SOLR-8241: Add CaffeineCache, an efficient implementation of SolrCache.(Ben Manes, Shawn Heisey, David Smiley, Andrzej Bialecki)

* SOLR-13298: Allow zplot to plot matrices (Joel Bernstein)

Improvements
----------------------

* SOLR-12368: Support InPlace DV updates for a field that does not yet exist in any documents
  (hossman, Simon Willnauer, Adrien Grand, Munendra S N)

* SOLR-13558, SOLR-13693: Allow dynamic resizing of SolrCache-s. (ab)

* SOLR-6305: Ability to set the replication factor for index files created by HDFSDirectoryFactory (Boris Pasko via Kevin Risden)

* SOLR-13702: Some components register twice their metric names (janhoy)

* SOLR-11601: Improved error message when geodist(llpsf) is used with arguments referring to a LatLonPointSpatialField.
  (Amrit Sarkar)

* SOLR-13542: Code cleanup - Avoid using stream filter count where possible (Koen De Groote via Tomás Fernández Löbbe)

* SOLR-13720: BlockJoinParentQParser.getCachedFilter()made public for accessing from QParser plugins
  (Stanislav Livotov via Mikhail Khludnev)

* SOLR-13728: If a partial update (aka atomic update) is attempted on a document that has child docs, then ensure
  the schema supports it (_root_ stored/docValues) by throwing an exception. (David Smiley)

* SOLR-13742: Allow optional redaction of data saved by 'bin/solr autoscaling -save'. (ab)

* SOLR-13739: Optimized large managed schema modifications; Internal O(n^2) problem.  (Thomas Wöckinger via David Smiley)

* SOLR-9658: Max idle time support for SolrCache implementations. (hoss, ab)

* SOLR-13763: Improve the tracking of "freedisk" in autoscaling simulations. (ab)

* SOLR-13773: Add Prometheus Exporter GC and Heap options. (Houston Putman via Anshum Gupta, David Smiley)

* SOLR-13638: Add debug, trace logging to RuleBasedAuthorizationPlugin (Jason Gerlowski)

* SOLR-13784: EmbeddedSolrServer's defaultCore constructor argument is now optional (David Smiley)

* SOLR-13798: SSL: Adding Enabling/Disabling client's hostname verification config (Cao Manh Dat)

* SOLR-13771: Add -v and -m to ulimit section of reference guide  and bin/solr checks (Erick Erickson)

* SOLR-13795: Managed schema operations should do a core reload in Solr standalone mode.
  (Thomas Wöckinger via David Smiley)

* SOLR-13719: Introducing SolrClient.ping(collection) in SolrJ (Geza Nagy via Mikhail Khludnev)

Bug Fixes
----------------------

* SOLR-13206: Fix AIOOBE when group.facet is specified with group.query and return proper error code. (Marek, Munendra S N)

* SOLR-11556: Backup and restore command really supports picking one of a few repositories by
  repository parameter (Timothy Potter via Mikhail Khludnev)

* SOLR-13647: Default solr.in.sh contains incorrect default value (John Ryan)

* SOLR-13660: Fixed AbstractFullDistribZkTestBase.waitForActiveReplicaCount() to ensure
  replicas are active. (hossman)

* SOLR-13664: Fixed SolrTestCaseJ4.deleteCore() to properly reset the dataDir used by initCore()
  (hossman)

* SOLR-13679: Default style of ExplainDocTransformer registered via solrconfig.xml should be same as default style
  of ExplainDocTransformer registered in defaultFactories (Munendra S N)

* SOLR-13672: Cloud -> Zk Status page now parses response from Zookeeper 3.5.5 correctly (Jörn Franke, janhoy, Shawn Heisey)

* SOLR-13674: NodeAddedTrigger does not support configuration of replica type hint. A new replicaType property
  has been added to NodeAddTrigger so that new replicas of the given type are added. The default value is `NRT`.
  (Irena Shaigorodsky via shalin)

* SOLR-13141: CDCR bootstrap does not replicate index to the replicas of target cluster.
  (Krzysztof Watral, Amrit Sarkar, Tim, Tdspringsteen, shalin)

* SOLR-13694: IndexSizeEstimator NullPointerException. (ab, hossman)

* SOLR-13700: Fixed a race condition when initializing metrics for new security plugins on security.json change (hossman)

* SOLR-13701: Fixed JWTAuthPlugin to update metrics prior to continuing w/other filters or returning error (hossman)

* SOLR-6328: facet.missing=true should return missing count even when facet.limit=0 (hossman, Munendra S N)

* SOLR-13704: Improve error message and change error code to 400 for client errors in ExpandComponent (Munendra S N)

* SOLR-13699 - maxChars no longer working on CopyField with javabin (Chris Troullis via noble)

* SOLR-13718: SPLITSHARD (async) with failures in underlying sub-operations can result in data loss (Ishan Chattopadhyaya)

* SOLR-13717: Fixed distributed grouping when multiple 'fl' params are specified (hossman, Christine Poerschke)

* SOLR-13240: Fixed UTILIZENODE action resulting in IllegalArgumentException.
  (Hendrik Haddorp, Richard Goodman, Tim Owen, shalin, noble, Christine Poerschke)

* SOLR-13238: BlobHandler generates non-padded md5 (Jeff Walraven via janhoy)

* SOLR-13780: Fix ClassCastException in NestableJsonFacet (Tiago Martinho de Barros, Munendra S N)

* SOLR-13725: Allow negative values for limit in TermsFacetMap (Richard Walker, Munendra S N)

* SOLR-13022: Fix NPE when sorting by non-existent aggregate function in JSON Facet (hossman, Munendra S N)

* SOLR-13727: Fixed V2Requests - HttpSolrClient replaced first instance of "/solr" with "/api" which
  caused a change in host names starting with "solr".  (Megan Carey via yonik)

* SOLR-13180: Fix ClassCastException in Json Request API (Johannes Kloos, Jan Høydahl, Munendra S N)

* SOLR-13417: Handle stats aggregation on date and string fields in SolrJ's JSON facet response processing
  (Jason Gerlowski, Munendra S N)

* SOLR-13712: JMX MBeans are not exposed because of race condition between creating platform mbean server and
  registering mbeans. (shalin)

* SOLR-13802: Managed schema manipulations were not persisting the optional luceneMatchVersion that can be set
  on an Analyzer. (Thomas Wöckinger)

* SOLR-13539: Fix for class-cast issues during atomic-update 'removeregex' operations. This also incorporated some
  tests Tim wrote as a part of SOLR-9505. (Tim Owen via Jason Gerlowski)

* SOLR-13790: LRUStatsCache size explosion and ineffective caching. (ab)

* SOLR-13376: Multi-node race condition to create/remove nodeLost markers. (hoss, ab)

* SOLR-13293: ConcurrentUpdateHttp2SolrClient always log AsynchronousCloseException exception error on indexing.
  (Cao Manh Dat)

* SOLR-13828: Improve ExecutePlanAction error handling. (ab)

* SOLR-13760: Fix regression in support for Date math in TRA start date that was introduced by SOLR-13375

* SOLR-13829: RecursiveEvaluator casts Continuous numbers to Discrete Numbers, causing mismatch (Trey Grainger, Joel Bernstein)

* SOLR-13815: Live shard split (where updates actively continue during the split) can lose updates due to cluster
  state happening to change between checking if the current shard is active and later checking if there are any
  sub-shard leaders to forward the update to. (yonik)

* SOLR-13665: Added missing netty dependencies to solrJ and upgraded netty to v 4.1.29.Final (Jörn Franke, janhoy)

* SOLR-13793: HttpSolrCall now maintains internal request count (_forwardedCount) for remote queries and limits them to
  the number of replicas. This avoids making too many cascading calls to remote servers, which, if not restricted, can
  bring down nodes containing the said collection (Kesharee Nandan Vishwakarma, Ishan Chattopadhyaya)

* SOLR-13834: ZkController#getSolrCloudManager() created a new instance of ZkStateReader, thereby causing mismatch in the
  visibility of the cluster state and, as a result, undesired race conditions (Clay Goddard via Ishan Chattopadhyaya)

* SOLR-13835: HttpSolrCall produces incorrect extra AuditEvent on AuthorizationResponse.PROMPT (janhoy, hossman)

* SOLR-13843: The MOVEREPLICA API ignores replica type and always adds 'nrt' replicas (Amrit Sarkar via shalin)

* SOLR-13677: All Metrics Gauges should be unregistered by components that registered them. (noble, ab)

* SOLR-13855: DistributedZkUpdateProcessor should have been propagating URP.finish() lifecycle like it used to before
  8.1 (a regression).  Impacts integrity since Run URP's finish() propagates this to the updateLog to fsync.
  (David Smiley)

Other Changes
----------------------

* SOLR-13779: Use the safe fork of simple-xml for clustering contrib. (Dawid Weiss)

* SOLR-13585: Factor out SearchGroupsResultTransformer.[de]serializeOneSearchGroup methods. (Christine Poerschke, Diego Ceccarelli)

* SOLR-12870: Use StandardCharsets instead of String values (Peter Somogyi via Munendra S N)

* SOLR-10377: Add `debug.explain.structured` to Admin UI. (David Smiley, Munendra S N)

* SOLR-13629: Clean trailing whitespace from 'analytics' contrib (Neal Sidhwaney via Jason Gerlowski)

* SOLR-13643: Add Getters/Setters in ResponseBuilder for analytics response handling (Neal Sidhwaney via Munendra S N)

* SOLR-13680: Use try-with-resource to close the closeable resource (Furkan KAMACI, Munendra S N)

* SOLR-13573: Add SolrRangeQuery getters for upper, lower bound (Brian Rhees via Jason Gerlowski)

* SOLR-13658: Precommit fail Java "var" until 9x. Fail "var...<>" constructs entirely (Erick Erickson)

* SOLR-13767: Upgrade jackson to 2.9.9 (janhoy)

* SOLR-11492: Clean up /solr/cloud-dev scripts and provide a single well documented script (Gus Heck, Robert Bunch)

* SOLR-13747: New TestSSLTestConfig.testFailIfUserRunsTestsWithJVMThatHasKnownSSLBugs() to give people running
  tests more visibility if/when they use a known-buggy JVM causing most SSL tests to silently SKIP. (hossman)

* SOLR-13791: Remove remaining Commons BeanUtils references. (Andras Salamon, Christine Poerschke)

* SOLR-13812: Add javadocs, uneven rejection and basic test coverage for the SolrTestCaseJ4.params method.
  (Diego Ceccarelli, Christine Poerschke, Munendra S N)

* SOLR-13787: An annotation based system to write v2 APIs (noble)

* SOLR-12786: Update Ref Guide build tool versions (Cassandra)

==================  8.2.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 2.0 and Velocity Tools 3.0
Apache ZooKeeper 3.5.5
Jetty 9.4.19.v20190610

Upgrade Notes
----------------------

* SOLR-8346: Upgrade ZooKeeper to 3.5.5. ZooKeeper 3.5.5 introduces more security features. Include in your zoo.cfg
  file at minimum the following:
  4lw.commands.whitelist=mntr,conf,ruok
  You can use
  4lw.commands.whitelist=* to enable all ZooKeeper "4 letter commands".
  (Erick Erickson)

* SOLR-13515: org.apache.solr.util.SolrPluginUtils.IdentityRegenerator has been removed, please use
  the identical org.apache.solr.search.NoOpRegenerator instead. (David Smiley, Christine Poerschke)

* SOLR-13541: Upgrade Jetty to 9.4.19.v20190610. (Erick Erickson, Cao Manh Dat)

* SOLR-13420: Routed Aliases now use collection properties rather than core properties to identify collections that
  belong to the alias by default. This should be invisible and fully backwards compatible from within solr, and
  existing routed alias collections with core based properties will continue to work, but new collections created will
  not add a property to core.properties anymoore so any external code that inspected core.properties will not find the
  'routedAliasName' key in new cores belonging to routed aliases.

* SOLR-13419: Time Routed Aliases now have a '__TRA__' infix preceding the timestamp portion of the collection names.
  collections with the old format will not be altered and will continue to work, but any new TRA's or new collections
  for existing TRA's will use the new format. Solr will handle this invisibly, but any external code that attempted to
  predict collection names in TRA's will probably need adjustment.

* SOLR-13507: Support for "addr" parameter from the "/solr/admin/zookeeper" endpoint has now been removed and will no
  longer be supported.

New Features
----------------------

* SOLR-13320: add an update param failOnVersionConflicts=false to updates not fail when there is a version conflict (noble)

* SOLR-13445: Preferred replicas on nodes with same system properties as the query master (Cao Manh Dat)

* SOLR-13047: Add facet2D Streaming Expression (Nazerke Seidan, Joel Bernstein)

* SOLR-13494: Add DeepRandomStream implementation (Joel Bernstein)

* SOLR-13434: OpenTracing support for Solr (Cao Manh Dat)

* SOLR-13512: Raw index data analysis tool (extension of COLSTATUS collection command). (ab)

* SOLR-13550: Allow zplot to automatically create the x axis (Joel Bernstein)

* SOLR-13552: Add recNum Stream Evaluator (Joel Bernstein)

* SOLR-13560: Add isNull and notNull Stream Evaluators (Joel Bernstein)

* SOLR-10291: Add matches Stream Evaluator to support regex matching (Joel Bernstein)

* SOLR-13589: Allow zplot to visualize 2D clusters and convex hulls (Joel Bernstein)

Improvements
----------------------

* SOLR-13049: Make contrib/ltr Feature.defaultValue configurable. (Stanislav Livotov, Christine Poerschke)

* SOLR-13306: Add a request parameter to execute a streaming expression locally

* SOLR-13440: Support saving/restoring autoscaling state for repeatable simulations. (ab)

* SOLR-11558: It would be nice if the Graph section of the Cloud tab in the Admin UI could give some more
  information about the replicas of a collection (Erick Erickson)

* SOLR-13468: autoscaling/suggestions should be able to give suggestions from config sent as a payload (noble)

* SOLR-12304: The MoreLikeThisComponent now supports the mlt.interestingTerms parameter.  Previously this option was
  unique to the MLT handler.   (Alessandro Benedetti via David Smiley)

* SOLR-13484: autoscaling/diagnostics API should be able to give diagnostics output from config sent as a payload (noble)

* SOLR-13493: /autoscaling/suggestions to be able to filter by type (noble)

* SOLR-13504: In autoscaling policies, use an explicit 'nodeset' attribute for filtering
  nodes instead of using them directly at the toplevel (noble)

* SOLR-13329: In autoscaling policies, use an explicit 'put : on-each-node'
  to specify the the rules is applied on each node  (noble)

* SOLR-13347: Transaction log to natively support UUID types (Thomas Wöckinger via noble)

* SOLR-13367: Highlighting: Range queries will now highlight in hl.method=unified mode. (David Smiley)

* SOLR-13569: Admin UI visual indication of prod/test/dev environment (janhoy)

* SOLR-12554: Expose IndexWriterConfig's ramPerThreadHardLimitMB through solrconfig.xml (Ishan Chattopadhyaya, Munendra S N)

* SOLR-13602 SOLR-13588: Add a field type for Estonian language to default managed_schema,
  document about Estonian language analysis in Solr Ref Guide (Tomoko Uchida)

* SOLR-13003: Query Result Cache does not honor maxRamBytes parameter. (ab, Brian Ecker)

Bug Fixes
----------------------

* SOLR-13474: Fix "Search is temporarily disabled" logic to be consistent for entire request (hossman)

* SOLR-13469: Fix rejected requests during full disk full + IndexFetch to use 503 not 403 (hossman)

* SOLR-12941: Fix IndexSizeTrigger to correctly work with "aboveBytes" and "splitMethod=link" parameters. (ab)

* SOLR-13491: SolrZkClient's watch wrapper no longer allows zookeeper to hold the same watch object multiple times.

* SOLR-13489: Stop the leader from trying to rejoin the election on session expiration and harden our zk reconnect code path.
  (Mark Miller, Anshum Gupta)

* SOLR-12249: Better error message when grouping on a tokenized (non SortableText) field in SolrCloud (Erick Erickson)

* SOLR-13521: Fix input parameter handling in SchemaRequest.DynamicField and SchemaRequest.FieldTypes (Schema API)
  (Tomás Fernández Löbbe)

* SOLR-13496: Fix distributed grouping related NullPointerException in JSONWriter.writeSolrDocument (Christine Poerschke)

* SOLR-12013: collections API CUSTERSTATUS command fails when configset missing (Erick Erickson)

* SOLR-13509: NPE on omitHeader=true is fixed by sending omitHeader=false to shard searches (Munendra S N, Mikhail Khludnev)

* SOLR-13333: unleashing terms.ttf from terms.list when distrib=false (Munendra S N via Mikhail Khludnev)

* SOLR-13490: Fix CollectionStateWatcher/CollectionStatePredicate based APIs in ZkStateReader and
  CloudSolrClient to be triggered on liveNode changes.  Also add Predicate<DocCollection> equivalents
  for callers that don't care about liveNodes. (hossman)

* SOLR-13545: ContentStreamUpdateRequest refused to close file (Colvin Cowie, Mikhail Khludnev)

* SOLR-12127: Updates containing 'set' operation with value null or empty list should be considered as Atomic Update
  (Oliver Kuldmäe, Munendra S N, Ishan Chattopadhyaya)

* SOLR-13187: Fix NPE when invalid query parser is specified and return 400 error code.
  (Cesar Rodriguez, Marek, Charles Sanders, Munendra S N, Mikhail Khludnev)

* SOLR-12979: Improve error message and change error code to 400 when collapse field is non-docValued and
  non-uninvertible (hossman, Munendra S N)

* SOLR-13574: Fix many test and test-framework classes to not fail on After/AfterClass cleanup if
  assumptions fail in Before/BeforeClass setup (hossman)

* SOLR-13280: Strengthen ScheduledTrigger's preferredOperation parameter validation. (Christine Poerschke)

* SOLR-9409: Improve error message for unsupported field types and return 400 error code on
  unsupported values in collapsing (hossman, Munendra S N)

* SOLR-13404: Support group.query in multi-shard environment when group.main=true or group.format=simple (Munendra S N)

* SOLR-13538: toNativeType () TrieDate & EnumField do not handle CharSequence properly (Munendra S N)

* SOLR-13532: Fix http timeout and error logging bugs in RecoveryStrategy. (Suril Shah, hossman)

* SOLR-13472: Forwarded requests should skip authorization on receiving nodes (adfel, Ishan Chattopadhyaya)

* SOLR-13619: Kerberos plugin to pass original user principal to avoid 403 on nodes not hosting a collection
  (adfel, Ishan Chattopadhyaya, noble)

Other Changes
----------------------

* SOLR-13453: Adjust auth metrics asserts in tests caused by SOLR-13449 (janhoy)

* SOLR-13437: noggit json parser is forked into solrj (noble)

* SOLR-13467: Include the S2 Geometry lib to make it simpler to use prefixTree="s2" on a Geo3D spatial field.
  Improved documentation on Geo3D too.  (David Smiley)

* SOLR-13371: Re-structure and clarify Security chapters in Ref Guide (janhoy)

* SOLR-13235: Split Collections API Ref Guide page into several smaller child pages (Cassandra Targett)

* SOLR-8754: Adding test cases for org.apache.solr.util.hll.NumberUtilTest (Benoit Vanalderweireldt via janhoy)

* SOLR-13511: Add SearchHandler.newResponseBuilder method to facilitate custom plugins' maintenance
  of per-request state in a custom ResponseBuilder. (Ramsey Haddad, Christine Poerschke)

* SOLR-12988: SSLTestConfig has been changed to throw AssumptionViolatedException when tests/seeds
  request SSL but the JVM appears to be an OpenJDK version known to have SSL bugs (hossman, Cao Manh Dat)

* SOLR-13279: Clarify ScheduledTrigger's "every parameter missing" error response. (Christine Poerschke)

* SOLR-13576: Factor out a TopGroupsShardResponseProcessor.fillResultIds method. (Christine Poerschke, Diego Ceccarelli)

* SOLR-12364: Add test cases for edismax boost (David Smiley, Munendra S N)

* SOLR-13603: Remove usage of GroupingSpecification's deprecated methods (Munendra S N)

* SOLR-13507: Remove support for "addr" parameter from the "/solr/admin/zookeeper" endpoint. (janhoy, Anshum Gupta)

* SOLR-13588: Document Estonian analyzer in Solr Ref Guide (Tomoko Uchida)

* SOLR-13602: Add a field type for Estonian language to default managed_schema (Tomoko Uchida)

==================  8.1.2 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 2.0 and Velocity Tools 3.0
Apache ZooKeeper 3.4.14
Jetty 9.4.14.v20181114

Bug Fixes
----------------------

* SOLR-13510: Intermittent 401's for internode requests with basicauth enabled (Cao Manh Dat, Colvin Cowie)

* SOLR-13523: In 8.1, Atomic Updates were broken (NPE) when the schema declared the new _nest_path_ field even if you
  weren't using nested docs.  In-place updates were not affected (worked).
  Reminder: if you don't need nested docs then remove both _root_ and _nest_path_ !  (David Smiley)

* SOLR-13566: REINDEXCOLLECTION does not work with (basic) authentication. (Colvin Cowie, ab)

* SOLR-13159: Fix atomic update encoding issue for UUID, enum, bool, and binary fields (Thomas Wockinger via Jason Gerlowski)

* SOLR-13583: Impossible to delete a collection with the same name as an existing alias. This fixes also a bug in
  REINDEXCOLLECTION when used with removeSource=true which could lead to a data loss. (ab)

Improvements
----------------------

* SOLR-13158: DataImportHandler: Added enable.dih.dataConfigParam system property to toggle whether the dataConfig param
  is permitted. (David Smiley, janhoy, Tomás Fernández Löbbe)

==================  8.1.1 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 2.0 and Velocity Tools 3.0
Apache ZooKeeper 3.4.14
Jetty 9.4.14.v20181114

Bug Fixes
----------------------

* SOLR-13475: Null Pointer Exception when querying collection through collection alias. (Jörn Franke, ab)

==================  8.1.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 2.0 and Velocity Tools 3.0
Apache ZooKeeper 3.4.14
Jetty 9.4.14.v20181114

Upgrade Notes
----------------------

* Solr's default behavior when dealing with 'maxBooleanClauses' has changed to reduce the risk of exponential
  query expansion when dealing with pathological query strings.  A default upper limit of 1024 clauses
  (The same default prior to Solr 7.0) is now enforced at the node level, and can be overridden in solr.xml.
  The identically named solrconfig.xml setting is still available for limiting the size of 'explicit' boolean
  query strings, but this per-collection limit is still ristricted by the upper-bound of the global limit
  in solr.xml.  See SOLR-13336 for more details.

* When requesting the status of an async request via REQUESTSTATUS collections API, the response will
  include the list of internal async requests (if any) in the "success" or "failed" keys (in addition
  to them being included outside those keys for backwards compatibility). See SOLR-12708 for more
  details

* SOLR-13335: Velocity and Velocity Tools were both upgraded as part of this release. Velocity upgraded from 1.7 to 2.0.
  Please see https://velocity.apache.org/engine/2.0/upgrading.html about upgrading. Velocity Tools upgraded from 2.0 to
  3.0. For more details, please see https://velocity.apache.org/tools/3.0/upgrading.html for details about the upgrade.

* SOLR-13407: Update requests sent to non-routed aliases that point to multiple collections are no longer accepted. Until
  now Solr followed an obscure convention of updating only the first collection from the list, which usually was not what
  the user intended. This change explicitly rejects such update requests.

* SolrGangliaReporter has been removed from Solr because support for Ganglia has been removed from Dropwizard Metrics 4
  due to a transitive dependency on LGPL.

* Custom TransientSolrCoreCache implementations no longer use the Observer/Observable pattern. To notify Solr that
  a core has been aged out of the cache, call CoreContainer.queueCoreToClose(SolrCore). See SOLR-13400 for details.

* SOLR-13394: The default GC has been changed from CMS to G1. To override this (in order to switch to CMS or any
  other GC), use GC_TUNE section of bin/solr.in.sh or bin/solr.in.cmd.

* SOLR-5970: Until now, the CREATE command of Collections API returned status 0 even in case of failure. Now, the status
  code will be non-zero in case of failures (e.g. 4xx, 5xx).

New Features
----------------------
* SOLR-13131: Category Routed Aliases are now available for data driven assignment of documents to collections based on
  values of a field. The Ref Guide now has a page dedicated to explaining the different types of aliases. (Gus Heck,
  Moshe Bla)

* SOLR-13171 : A true streaming parser for javabin payload/stream without creating any objects (noble)

* SOLR-13261: Make SortableTextField work with export/streaming. NOTE: requires that the field have
  useDocValuesAsStored=true (either explicit or as the default).

* SOLR-12121: JWT Token authentication plugin with OpenID Connect implicit flow login through Admin UI (janhoy)

* SOLR-12120: New AuditLoggerPlugin type allowing custom Audit logger plugins (janhoy)

* SOLR-10436: Add hashRollup Streaming Expression (Joel Bernstein)

* SOLR-13276: Adding Http2 equivalent classes of CloudSolrClient and HttpClusterStateProvider (Cao Manh Dat)

* SOLR-13287: Allow zplot to visualize probability distributions in Apache Zeppelin (Joel Bernstein)

* SOLR-13271: Read-only mode for SolrCloud collections (ab, shalin)

* SOLR-13292: Provide extended per-segment status of a collection. (ab)

* SOLR-11127: REINDEXCOLLECTION command for re-indexing of existing collections. This issue also adds
  a back-compat check of the .system collection to notify users of potential compatibility issues after
  upgrades or schema changes. (ab)

* SOLR-13374: Add fetchSize parameter to the jdbc Streaming Expression (Joel Bernstein)

* SOLR-12638: Partial/Atomic Updates for nested documents.  This enables atomic updates for nested documents, without
  the need to supply the whole nested hierarchy (which would be overwritten if absent).  This is done by fetching the
  whole document hierarchy, updating the specific doc in the path that is to be updated, removing the old document
  hierarchy and indexing the new one with the atomic update merged into it.  Also, [child] Doc Transformer now works
  with RealTimeGet.  (Moshe Bla, David Smiley)

* SOLR-13262: Add collection RENAME command and support using aliases in most collection admin commands. (ab)

* SOLR-13391: Add variance and standard deviation stream evaluators (Nazerke Seidan, Joel Bernstein)

* SOLR-13427: Support simulating the execution of autoscaling suggestions. (ab)

Bug Fixes
----------------------

* SOLR-12330: 500 error code on json.facet syntax errors (Munendra S N, Mikhail Khludnev)

* SOLR-13229: Cleanup replicasMetTragicEvent after all types of exception (Tomás Fernández Löbbe)

* SOLR-11876: In-place update fails when resolving from Tlog if schema has a required field (Justin Deoliveira, janhoy,
  Ishan Chattopadhyaya)

* SOLR-12708: Async collection actions should not hide internal failures (Mano Kovacs, Varun Thacker, Tomás Fernández Löbbe)

* SOLR-11883: 500 code on functional query syntax errors and parameter dereferencing errors
(Munendra S N via Mikhail Khludnev)

* SOLR-13234: Prometheus Metric Exporter not threadsafe. This changes the prometheus exporter to collect metrics
  from Solr on a fixed interval controlled by this tool and prevents concurrent collections. This change also improves
  performance slightly by using the cluster state instead of sending multiple HTTP requests to each node to lookup
  all the cores.
  (Danyal Prout via shalin)

* SOLR-9882: 500 error code on breaching timeAllowed by core and distributed (fsv) search,
  old and json facets (Mikhail Khludnev)

* SOLR-13285: Updates with enum fields and javabin cause ClassCastException (noble)

* SOLR-13295: Reproducible failure in TestDistributedGrouping (Erick Erickson)

* SOLR-13254: Correct message that is logged in solrj's ConnectionManager when an exception
  occurred while reconnecting to ZooKeeper. (hu xiaodong via Christine Poerschke)

* SOLR-13284: NullPointerException with 500 http status on omitted or wrong wt param.
  It's fixed by fallback to json (Munendra S N via Mikhail Khludnev)

* SOLR-13244: Admin UI Nodes view fails and is empty when a node is temporarily down (janhoy)

* SOLR-13253: IndexSchema.getResourceLoader was being used to load non-schema things, which can be a memory leak if
  "shareSchema" and other circumstances occur.  Furthermore it's reference to SolrConfig was removed. (David Smiley)

* SOLR-7414: CSVResponseWriter & XLSXResponseWriter return empty field when fl alias is combined with '*' selector
  (Michael Lawrence, Munendra S N, Ishan Chattopadhyaya)

* SOLR-13351: Workaround for VELOCITY-908 (Kevin Risden)

* SOLR-13349: High CPU usage in Solr due to Java 8 bug (Erick Erickson)

* SOLR-13344: Admin UI inaccessible with RuleBasedAuthorizationPlugin (janhoy, Jason Gerlowski)

* SOLR-13352: Remove risk of deadlock/threadleak when shutting down an Overseer(TriggerThread).  (hossman)

* SOLR-13362: Add 'includeIndexFieldFlags' support to SolrJ LukeRequest (Jason Gerlowski)

* SOLR-13355: 'all' permission ignored by RuleBasedAuthorizationPlugin in most cases (Jason Gerlowski, janhoy)

* SOLR-13331: Atomic Update 'remove' operations broken for certain field types in SolrJ (Thomas Wockinger via Jason Gerlowski)

* SOLR-13388: Fix FileExchangeRateProvider to be a public class, as it appears in schema.xml (Uwe Schindler)

* SOLR-12860: MetricsHistoryHandler now uses PKI Auth for metrics collection in background thread (janhoy, Lorenzo)

* SOLR-13339: Prevent recovery, fetching index being kicked off after SolrCores already closed (Cao Manh Dat)

* SOLR-13393: Fixed ZkClientClusterStateProvider to prevent risk of leaking ZkStateReader/threads when
  processing concurrent requests during shutdown.  This primarily affected tests, but may have also caused
  odd errors/delays when restart/shutting down solr nodes.  (hossman)

* SOLR-13336: add maxBooleanClauses (default to 1024) setting to solr.xml, reverting previous effective
  value of Integer.MAX_VALUE-1, to restrict risk of pathalogical query expansion.  (hossman)

* SOLR-13386: OverseerTaskQueue#remove should not throw an exception when no node exists after an exists
  check and the Overseer work loop should not allow free spinning the loop when it hits a KeeperException.
  (Mark Miller, Fernandez-Lobbe, Mike Drob)

* SOLR-12371: Editing authorization config via REST API now works in standalone mode (janhoy)

* SOLR-13408: Cannot start/stop DaemonStream repeatedly, other API improvements (Erick Erickson)

* SOLR-13281: Fixed NPE in DocExpirationUpdateProcessorFactory (Munendra S N, Tomás Fernández Löbbe)

* SOLR-13081: In-Place Update doesn't work with route.field (Dr Oleg Savrasov via Mikhail Khludnev)

* SOLR-13343: Fix spacing issue in browser log (Marcus Eagan via Jason Gerlowski)

* SOLR-12248, SOLR-4647: Grouping is broken on docValues-only fields (non-stored, non-indexed)
  (Erick Ericsson, Adrien Grand, Munendra S N, Scott Stults, Ishan Chattopadhyaya)

* SOLR-5970: Return correct status upon collection creation failure (Abraham Elmahrek, Ishan Chattopadhyaya,
  Jason Gerlowski, Kesharee Nandan Vishwakarma)

* SOLR-12291: prematurely reporting not yet finished async Collections API call as completed
  when collection's replicas are collocated at least at one node (Varun Thacker, Mikhail Khludnev)

* SOLR-13410: Designated overseer wasn't able to rejoin election queue upon restart (Ishan Chattopadhyaya,
  Kesharee Nandan Vishwakarma)

* SOLR-13318: Fix ClassCastException in SolrJ JsonFaceting classes (Munendra S N via Jason Gerlowski)

* SOLR-13449: SolrClientNodeStateProvider always retries on requesting metrics from other nodes (Cao Manh Dat)

Improvements
----------------------

* SOLR-12999: Index replication could delete segments before downloading segments from master if there is not enough
  disk space (noble)

* SOLR-13227: Optimizing facet.range.other by avoiding expensive exceptions (Nikolay Khitrin via Mikhail Khludnev)

* SOLR-9079: Remove commons-lang as a dependency (Kevin Risden)

* SOLR-11473: Make HDFSDirectoryFactory support other prefixes (besides hdfs:/) (Kevin Risden)

* SOLR-13359: Make UpdateHandler support other prefixes (besides hdfs:/) (Kevin Risden)

* SOLR-13398: Move log line "Processing SSL Credential Provider chain..." from INFO to DEBUG (janhoy)

* SOLR-13407: Reject update requests sent to non-routed multi collection aliases. (ab)

* SOLR-11035: (at least) 2 distinct failures possible when clients attempt searches during SolrCore reload,
  added test band-aid for DocValuesNotIndexedTest.

* SOLR-13337: Only request the minimum required number of terms from each shard when using terms.sort=index and none
  are discarded due to terms.min/maxcount (Morten Bøgeskov,Munendra S N via Mikhail Khludnev)

* SOLR-12167: Throw an exception, instead of just a warning, when unknown atomic update operation is
  encountered (Munendra S N via Ishan Chattopadhyaya)

* SOLR-13394: Switch default GC from CMS to G1 (Ishan Chattopadhyaya, Kesharee Nandan Vishwakarma, Shawn Heisey,
  Uwe Schindler, Erick Ericsson, shalin)

* SOLR-13432: Add .toString methods to BitDocSet and SortedIntDocSet so that enabling "showItems" on the filter caches
  shows some useful information about the values in the cache. (shalin)

* SOLR-12833: Avoid unnecessary memory cost when DistributedUpdateProcessor timed-out lock is not used.
  (jefferyyuan, ab)

* SOLR-13348: Speed up collapsing by avoiding scoring of ineligible documents (Andrzej Wislowski via
  Ishan Chattopadhyaya)

Other Changes
----------------------

* SOLR-11763: Upgrade Guava to 25.1-jre (Markus Jelsma, Kevin Risden)

* SOLR-13222: Improve logging in StreamingSolrClients (Peter Cseh via Kevin Risden)

* SOLR-12055: Enable async logging by default. This change improves throughput for logging. This opens
  up a small window where log messages could possibly be lost. If this is unacceptable, switching back to synchronous
  logging can be done by changing the log4j2.xml file, no internal Solr code changed to make async logging the default.
  (Erick Erickson)

* SOLR-12753: Async logging ring buffer and OOM error. When very long messages are written (1M messages or so),
  it can produce an OOM error. Log messages are truncated at 10K via configuration in the log4j2.xml files.

* SOLR-9763: Remove the workaround implemented for HADOOP-12767 (Kevin Risden)

* SOLR-13060: Improve HdfsAutoAddReplicasIntegrationTest and HdfsCollectionsAPIDistributedZkTest (Kevin Risden)

* SOLR-13074: MoveReplicaHDFSTest leaks threads, falls into an endless loop, logging like crazy (Kevin Risden)

* SOLR-9762: Remove the workaround implemented for HADOOP-13346 (Kevin Risden)

* SOLR-7321: Remove reflection in FSHDFSUtils.java (Mike Drob, Kevin Risden)

* SOLR-13268: Clean up any test failures resulting from defaulting to async logging (Erick Erickson)

* SOLR-13307: Ensure HDFS tests clear System properties they set (Kevin Risden)

* SOLR-13330: Improve HDFS tests (Kevin Risden)

* SOLR-8033: Remove debug if branch in HdfsTransactionLog (Kevin Risden)

* SOLR-12955: Refactored DistributedUpdateProcessor to put SolrCloud functionality into a subclass.
  (Bar Rotstein, David Smiley)

* SOLR-13342: Remove dom4j from Solr (Kevin Risden)

* SOLR-13335: Upgrade to velocity 2.0 and velocity-tools 3.0 (Kevin Risden)

* SOLR-13112: Upgrade jackson to 2.9.8 (Kevin Risden)

* SOLR-13353: Add SolrCli AuthTool test (Kevin Risden)

* SOLR-13363: Upgrade to ZooKeeper 3.4.14 (Erick Erickson)

* SOLR-12809: Document recommended Java/Solr combinations (Erick Erickson, Jan Høydahl et.al.)

* SOLR-13366: Clarify 'Invalid stage name' warning logging in AutoScalingConfig (Christine Poerschke)

* SOLR-13409: Disable HTML directory listings in admin interface to prevent possible security issues (Uwe Schindler)

* SOLR-12461: Upgrade Dropwizard Metrics to 4.0.5 release. (ab)

* SOLR-13400: Replace Observable pattern in TransientSolrCoreCache (Erick Erickson)

* SOLR-13425: Ref-Guide: Wrong color of text in left column of horizontal definition list (janhoy)

* SOLR-13423: Upgrade RRD4j to version 3.5. (ab)

* SOLR-13414: SolrSchema - Avoid NPE if Luke returns field with no type defined (Kevin Risden)

==================  8.0.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 1.7 and Velocity Tools 2.0
Apache ZooKeeper 3.4.13
Jetty 9.4.14.v20181114

Upgrade Notes
----------------------

* Due to the introduction of LIR redesign since Solr 7.3 (SOLR-11702) and the removing of old LIR implementation in Solr 8.
  Rolling updates are not possible unless all nodes must be on Solr 7.3 or higher. If not updates can be lost.

* Solr nodes can now listen and serve HTTP/2 requests. Most of internal requests (sent by UpdateShardHandler, HttpShardHandler)
  Http2SolrClient is used. Since by default, internal requests are sent by using HTTP/2,
  Solr 8.0 nodes can't talk to old nodes (7.x). However we can follow these steps to do rolling updates:
  - Do rolling updates as normally, but the Solr 8.0 nodes must start with -Dsolr.http1=true as startup parameter.
    By using this parameter internal requests are sent by using HTTP/1.1
  - When all nodes are upgraded to 8.0, restart them, this time -Dsolr.http1 parameter should be removed.

* ALPN is not supported in Java 8 or lower version therefore when a node started in Java 8 or a lower version with SSL enabled,
  it will send and can only be able to handle HTTP/1.1 requests. In case of using SSL Java 9 or latter versions are recommended.

* Custom AuthenticationPlugin must provide its own setup for Http2SolrClient through
  implementing HttpClientBuilderPlugin.setup, if not internal requests can't be authenticated.

* LUCENE-7996: The 'func' query parser now returns scores that are equal to 0
  when a negative value is produced. This change is due to the fact that
  Lucene now requires scores to be positive. (Adrien Grand)

* SOLR-11882: SolrMetric registries retained references to SolrCores when closed. A
  change of SolrMetricMAnager.registerGauge and SolrMetricProducer.initializeMetrics
  method signatures was required to fix it. Third party components that use this API
  need to be updated. (Eros Taborelli, Erick Erickson, ab)

* LUCENE-8267: Memory codecs have been removed from the codebase (MemoryPostings,
  MemoryDocValues). If you used postingsFormat="Memory" or docValuesFormat="Memory"
  then either remove it to use the default or experiment with one of the others. (Dawid Weiss)

* SOLR-12586: The date format patterns used by ParseDateFieldUpdateProcessorFactory (present in "schemaless mode")
  are now interpreted by Java 8's java.time.DateTimeFormatter instead of Joda Time.  The pattern language is very
  similar but not the same.  Typically, simply update the pattern by changing an uppercase 'Z' to lowercase 'z' and
  that's it.  For the current recommended set of patterns in schemaless mode, see "Schemaless Mode" in the ref guide,
  or simply examine the default configSet.  Also note that the set of patterns (formats) here have
  expanded from before to subsume those patterns previously handled by the "extract" contrib (Solr Cell / Tika).
  (David Smiley, Bar Rotstein)

* SOLR-12593: The "extraction" contrib (Solr Cell) no longer does any date parsing, and thus no longer has the
  "date.formats" configuration.  To ensure date strings are properly parsed, use ParseDateFieldUpdateProcessorFactory
  (an URP) commonly registered with the name "parse-date" in "schemaless mode".  (David Smiley, Bar Rotstein)

* SOLR-12643: Since Http2SolrClient does not support exposing connections related metrics. These metrics are no longer
  available 'QUERY.httpShardHandler.{availableConnections, leasedConnections, maxConnections, pendingConnections}',
  'UPDATE.updateShardHandler.{availableConnections, leasedConnections, maxConnections, pendingConnections}'

* SOLR-12605: UpdateShardHandler's updateOnlyClient is now a Http2SolrClient (previous HttpSolrClient). This new
  client does not support 'maxConnections','maxConnectionsPerHost' parameters.

* SOLR-12640: HttpShardHandlerFactory's defaultClient is now a Http2SolrClient (previous HttpSolrClient). This new
  client does not support 'maxConnections','maxConnectionsPerHost' parameters. LBHttpSolrClient.Req and LBHttpSolrClient.Rsp
  are marked as deprecated, uses LBSolrClient.Req and LBSolrClient.Rsp instead.

* SOLR-12754: The UnifiedHighlighter hl.weightMatches now defaults to true.  If there are unforseen highlight problems,
  this may be the culprit.

* If you explicitly use BM25SimilarityFactory in your schema, the absolute scoring will be lower due to SOLR-13025.
  But ordering of documents will not change in the normal case. Use LegacyBM25SimilarityFactory if you need to force
  the old 6.x/7.x scoring. Note that if you have not specified any similarity in schema or use the default
  SchemaSimilarityFactory, then LegacyBM25Similarity is automatically selected for 'luceneMatchVersion' < 8.0.0.
  See also explanation in Reference Guide chapter "Other Schema Elements".

* SOLR-12535: Solr no longer accepts index time boosts in JSON provided to Solr.  This used to be provided like so:
  {'id':'1', 'val_s':{'value':'foo', 'boost':2.0}}  but will now produce an error.  A object/map structure will now only
  be interpreted as a child document or an atomic update; nothing else.  A uniqueKey is currently required on all child
  documents to be interpreted as such, though this may change in the future.  (David Smiley)

* SOLR-12633: When JSON data is sent to Solr with nested child documents split using the "split" parameter, the child
  docs will now be associated to their parents by the field/label string used in the JSON instead of anonymously.  Most
  users probably won't notice the distinction since the label is lost any way unless special fields are in the schema.
  This choice used to be toggleable with an internal/expert "anonChildDocs" parameter flag which is now gone.
  (David Smiley)

* SOLR-11774: In 'langid' contrib, the LanguageIdentifierUpdateProcessor base class changed some method signatures.
  If you have a custom language identifier implementation you will need to adapt your code.

* SOLR-9515: Hadoop dependencies have been upgraded to Hadoop 3.2.0 from 2.7.2. (Mark Miller, Kevin Risden)

* SOLR-5211: Deleting (or updating) documents by their uniqueKey is now scoped to only consider root documents, not
  child/nested documents.  Thus a delete-by-id won't work on a child doc (no-op), and an attempt to update a child doc
  by providing a new doc with the same ID would add a new doc (probably erroneous).  Both these actions were and still
  are problematic.  In-place-updates are safe though.  If you want to delete certain child documents and if you know
  they don't themselves have nested children then you must do so with a delete-by-query technique.

* SOLR-13248: The default replica placement strategy used in Solr has been reverted to the 'legacy' policy used by Solr
  7.4 and previous versions. This is due to multiple bugs in the autoscaling based replica placement strategy that was
  made default in Solr 7.5 which causes multiple replicas of the same shard to be placed on the same node in addition
  to the maxShardsPerNode and createNodeSet parameters being ignored. Although the default has changed, autoscaling
  will continue to be used if a cluster policy or preference is specified or a collection level policy is in use.
  The default replica placement strategy can be changed to use autoscaling again by setting a cluster property:
  curl -X POST -H 'Content-type:application/json' --data-binary '
  {
    "set-obj-property": {
      "defaults" : {
        "cluster": {
          "useLegacyReplicaAssignment":false
        }
      }
    }
  }' http://$SOLR_HOST:$SOLR_PORT/api/cluster


New Features
----------------------

* SOLR-12591: Expand the set of recognized date format patterns of schemaless mode to subsume those handled by the
  "extract" contrib (Solr Cell / Tika).  This is primarily a change in configuration of the default configSet for more
  patterns, but also included enabling "lenient" parsing in ParseDateFieldUpdateProcessorFactory.  The default
  locale was changed from ROOT to en_US since well-known patterns assume this locale.
  (David Smiley, Bar Rotstein)

* SOLR-12879: MinHash query parser that builds queries providing a measure of Jaccard similarity (Andy Hind via Tommaso Teofili)

* SOLR-12593: The default configSet now includes an "ignored_*" dynamic field.  (David Smiley)

* SOLR-12799: Allow Authentication Plugins to intercept internode requests on a per-request basis.
  The BasicAuth plugin now supports a new parameter 'forwardCredentials', and when set to 'true',
  user's BasicAuth credentials will be used instead of PKI for client initiated internode requests. (janhoy, noble)

* SOLR-12791: Add Metrics reporting for AuthenticationPlugin (janhoy)

* SOLR-12730: Implement staggered SPLITSHARD requests in IndexSizeTrigger. (ab)

* SOLR-12639: Umbrella JIRA for adding support HTTP/2 (Cao Manh Dat)

* SOLR-12768, SOLR-13129: Improved nested document support, and enabled in the default schema with the presence of _nest_path_.
  When this field is present, certain things happen automatically.  An internal URP is automatically used to populate
  it.  The [child] (doc transformer) will return a hierarchy with relationships; no params needed.  The relationship
  path is indexed for use in queries (can be disabled if not needed).  Also, child documents needn't provide a uniqueKey
  value as Solr will supply one automatically by concatenating a path to that of the parent document's key.
  (David Smiley, Moshe Bla).

* SOLR-13134: Allow the knnRegress Stream Evaluator to more easily perform bivariate regression.
  (Joel Bernstein)

* SOLR-13104: Add natural and repeat Stream Evaluators (Joel Bernstein)

* SOLR-13147: Add movingMAD Stream Evaluator (Joel Bernstein)

* SOLR-13155: Add command-line option for testing autoscaling configurations. (ab)

* SOLR-13241: Add 'autoscaling' tool support to solr.cmd (Jason Gerlowski)

* SOLR-11126: New Node-level health check handler at /admin/info/healthcheck and /node/health paths that
  checks if the node is live, connected to zookeeper and not shutdown. (Anshum Gupta, Amrit Sarkar, shalin)

Bug Fixes
----------------------

* SOLR-13058: Fix block that was synchronizing on the wrong collection in OverseerTaskProcessor (Gus Heck)

* SOLR-11774: langid.map.individual now works together with langid.map.keepOrig. Also the detectLanguage() API
  is changed to accept a Reader allowing for more memory efficient implementations (janhoy)

* SOLR-13126: Query boosts were not being combined correctly for documents where not all boost queries
  matched (Alan Woodward, Mikhail Khludnev)

* SOLR-13248: Autoscaling based replica placement is broken out of the box. Solr 7.5 enabled autoscaling based replica
  placement by default but in the absence of default cluster policies, autoscaling can place more than 1 replica of the
  same shard on the same node. Also, the maxShardsPerNode and createNodeSet was not respected. Due to these reasons,
  this issue reverts the default replica placement policy to the 'legacy' assignment policy that was the default until
  Solr 7.4. (Gus Heck, Andrzej Bialecki, Bram Van Dam, shalin)

* SOLR-13255 : ClasscastException when URPs try to read a String field which returns a ByteArrayUTF8CHarSequence . This is a regression
  in release 7.7 (noble)

*SOLR-13299: Fix Windows startup script to disable HTTP/2 if TLS is enabled on Java 8. (Uwe Schindler)


Improvements
----------------------

* SOLR-5211: If _root_ is defined in the schema, it is now always populated automatically.  This allows documents with
 children to be updated with a document that does not have children, whereas before it would break block-join queries.
 If you don't use nested documents then _root_ can be removed from the schema.  (Dr Oleg Savrasov, Moshe Bla,
 David Smiley, Mikhail Khludnev)

* SOLR-6117: The response format has changed slightly for ReplicationHandler error-cases.  All errors now have a non-200
  'status' field, a 'message' field giving more details on the error, and an optional 'exception' field.  (Shalin Mangar,
  Jason Gerlowski)

* SOLR-12888: The NestedUpdateProcessor (which populates internal fields for nested child docs) is now auto-registered
  to run immediately prior to RunUpdateProcessor.  If the schema has no _nest_*_ fields then it's a no-op.
  RunUpdateProcessorFactory looks up a special/internal URP chain "_preRun_" which is implicitly defined but could be
  defined by an app for customization if desired.  (David Smiley)

Optimizations
----------------------

* SOLR-12725: ParseDateFieldUpdateProcessorFactory should reuse ParsePosition. (ab)

* SOLR-13025: Due to LUCENE-8563, the BM25Similarity formula no longer includes the (k1+1) factor in the numerator
  This gives a lower absolute score but doesn't affect ordering, as this is a constant factor which is the same
  for every document. Use LegacyBM25SimilarityFactory if you need the old 6.x/7.x scoring. See also upgrade notes (janhoy)

* SOLR-13130: during the ResponseBuilder.STAGE_GET_FIELDS directly copy string bytes and avoid creating String Objects (noble)

Other Changes
----------------------

* SOLR-12614: Make "Nodes" view the default in AdminUI "Cloud" tab (janhoy)

* SOLR-12586: Upgrade ParseDateFieldUpdateProcessorFactory (present in "schemaless mode") to use Java 8's
  java.time.DateTimeFormatter instead of Joda time (see upgrade notes).  "Lenient" is enabled.  Removed Joda Time dependency.
  (David Smiley, Bar Rotstein)

* SOLR-5163: edismax now throws an exception when qf refers to a nonexistent field (Charles Sanders, David Smiley)

* SOLR-12805: Store previous term (generation) of replica when start recovery process (Cao Manh Dat)

* SOLR-12652: Remove SolrMetricManager.overridableRegistryName method (Peter Somogyi via David Smiley)

* LUCENE-8513: SlowCompositeReaderWrapper now uses MultiTerms directly instead of MultiFields (David Smiley)

* SOLR-11812: Remove backward compatibility of old LIR implementation in 8.0 (Cao Manh Dat)

* SOLR-12620: Remove the Admin UI Cloud -> Graph (Radial) view (janhoy)

* SOLR-12775: LowerCaseTokenizer is deprecated, and should be replaced by LetterTokenizer and
  LowerCaseFilter (Alan Woodward)

* SOLR-13036: Fix retry logic in JettySolrRunner (Gus Heck)

* SOLR-12535: Solr no longer accepts index time boosts in JSON provided to Solr. (David Smiley)

* SOLR-13086: Improve the error message reported by DocumentObjectBinder when a setter is not found (Gus Heck)

* SOLR-12365: Renamed class Config to XmlConfigFile (David Smiley)

* SOLR-9515: Hadoop dependencies have been upgraded to Hadoop 3.2.0 from 2.7.2. (Mark Miller, Kevin Risden)

==================  7.7.2 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 1.7 and Velocity Tools 2.0
Apache ZooKeeper 3.4.14
Jetty 9.4.14.v20181114

Upgrade Notes
----------------------

* SOLR-13234: The Prometheus Metric Exporter now collects metrics from Solr at a fixed schedule that is controlled
  by the exporter itself. The default interval is 60s but it can be changed by specifying the --scrape-interval
  command line parameter to the tool. The collected metrics are cached and returned for any requests coming in before
  the next scheduled collection. This can impact the freshness of the metrics if prometheus is configured to query the
  tool more frequently.

* SOLR-12708: When requesting the status of an async request via REQUESTSTATUS collections API, the response will
  include the list of internal async requests (if any) in the "success" or "failed" keys (in addition
  to them being included outside those keys for backwards compatibility). See SOLR-12708 for more
  details

Bug fixes
----------------------

* SOLR-13234: Prometheus Metric Exporter not threadsafe. This changes the prometheus exporter to collect metrics
  from Solr on a fixed interval controlled by this tool and prevents concurrent collections. This change also improves
  performance slightly by using the cluster state instead of sending multiple HTTP requests to each node to lookup
  all the cores.
  (Danyal Prout via shalin)

* SOLR-12708: Async collection actions should not hide internal failures (Mano Kovacs, Varun Thacker, Tomás Fernández Löbbe)

* SOLR-11876: In-place update fails when resolving from Tlog if schema has a required field (Justin Deoliveira, janhoy,
  Ishan Chattopadhyaya)

* SOLR-13349: High CPU usage in Solr due to Java 8 bug (Erick Erickson)

* SOLR-13355: 'all' permission ignored by RuleBasedAuthorizationPlugin in most cases (Jason Gerlowski, janhoy)

* SOLR-13344: Admin UI inaccessible with RuleBasedAuthorizationPlugin (janhoy, Jason Gerlowski)

* SOLR-12860: MetricsHistoryHandler now uses PKI Auth for metrics collection in background thread (janhoy, Lorenzo)

* SOLR-13331: Atomic Update 'remove' operations broken for certain field types in SolrJ (Thomas Wockinger via Jason Gerlowski)

* SOLR-13285: Updates with enum fields and javabin cause ClassCastException (noble)

* SOLR-12371: Editing authorization config via REST API now works in standalone mode (janhoy)

* SOLR-13281: Fixed NPE in DocExpirationUpdateProcessorFactory (Munendra S N, Tomás Fernández Löbbe)

* SOLR-13409: Disable HTML directory listings in admin interface to prevent possible security issues (Uwe Schindler)

* SOLR-13126: Query boosts were not being combined correctly for documents where not all boost queries
  matched (Alan Woodward, Mikhail Khludnev)

* SOLR-13414: SolrSchema - Avoid NPE if Luke returns field with no type defined (Kevin Risden)

* SOLR-12833: Avoid unnecessary memory cost when DistributedUpdateProcessor timed-out lock is not used. (ab)

* SOLR-13449: SolrClientNodeStateProvider always retries on requesting metrics from other nodes (Cao Manh Dat)

* SOLR-13112: Upgrade jackson to 2.9.8 (Kevin Risden)

* SOLR-13410: Designated overseer wasn't able to rejoin election queue at head upon restart (Ishan Chattopadhyaya,
  Kesharee Nandan Vishwakarma)

* SOLR-13254: Correct message that is logged in solrj's ConnectionManager when an exception
  occurred while reconnecting to ZooKeeper. (hu xiaodong via Christine Poerschke)

* SOLR-13252: Fix an NPE when setting a "policy" property for an existing collection (ab)

* SOLR-13398: Move log line "Processing SSL Credential Provider chain..." from INFO to DEBUG (janhoy)

* SOLR-13386: OverseerTaskQueue#remove should not throw an exception when no node exists after an exists
  check and the Overseer work loop should not allow free spinning the loop when it hits a KeeperException.
  (Mark Miller, Fernandez-Lobbe, Mike Drob)

* SOLR-13366: Clarify 'Invalid stage name' warning logging in AutoScalingConfig (Christine Poerschke)

* SOLR-13352: Remove risk of deadlock/threadleak when shutting down an Overseer(TriggerThread).  (hossman)

* SOLR-13229: Cleanup replicasMetTragicEvent after all types of exception (Tomás Fernández Löbbe)

Other Changes
----------------------

* SOLR-13363: Upgrade to ZooKeeper 3.4.14 (Erick Erickson)

==================  7.7.1 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 1.7 and Velocity Tools 2.0
Apache ZooKeeper 3.4.13
Jetty 9.4.14.v20181114

Upgrade Notes
----------------------

 * SOLR-13248: The default replica placement strategy used in Solr has been reverted to the 'legacy' policy used by Solr
   7.4 and previous versions. This is due to multiple bugs in the autoscaling based replica placement strategy that was
   made default in Solr 7.5 which causes multiple replicas of the same shard to be placed on the same node in addition
   to the maxShardsPerNode and createNodeSet parameters being ignored. Although the default has changed, autoscaling
   will continue to be used if a cluster policy or preference is specified or a collection level policy is in use.
   The default replica placement strategy can be changed to use autoscaling again by setting a cluster property:
   curl -X POST -H 'Content-type:application/json' --data-binary '
   {
     "set-obj-property": {
       "defaults" : {
         "cluster": {
           "useLegacyReplicaAssignment":false
         }
       }
     }
   }' http://$SOLR_HOST:$SOLR_PORT/api/cluster

Bug Fixes
----------------------

* SOLR-13255 : ClasscastException when URPs try to read a String field which returns a ByteArrayUTF8CHarSequence . This is a regression
  in release 7.7 (noble)

* SOLR-13248: Autoscaling based replica placement is broken out of the box. Solr 7.5 enabled autoscaling based replica
  placement by default but in the absence of default cluster policies, autoscaling can place more than 1 replica of the
  same shard on the same node. Also, the maxShardsPerNode and createNodeSet was not respected. Due to these reasons,
  this issue reverts the default replica placement policy to the 'legacy' assignment policy that was the default until
  Solr 7.4. (Gus Heck, Andrzej Bialecki, Bram Van Dam, shalin)

==================  7.7.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 1.7 and Velocity Tools 2.0
Apache ZooKeeper 3.4.13
Jetty 9.4.14.v20181114


Upgrade Notes
----------------------

* SOLR-12770: The 'shards' parameter handling logic changes to use a new config element to determine what hosts can be
  requested. Please see Apache Solr Reference Guide chapter "Distributed Requests" for details, as well as SOLR-12770.

New Features
----------------------

* SOLR-12839: JSON 'terms' Faceting now supports a 'prelim_sort' option to use when initially selecting
  the top ranking buckets, prior to the final 'sort' option used after refinement.  (hossman)

* SOLR-7896: Add a login page to Admin UI, with initial support for Basic Auth (janhoy)

* SOLR-13116: Add Admin UI login support for Kerberos (janhoy, Jason Gerlowski)

* SOLR-12770: Make it possible to configure a host whitelist for distributed search
  (Christine Poerschke, janhoy, Erick Erickson, Tomás Fernández Löbbe)

* SOLR-12373: Add a "tombstoneConfig" option to DocBasedVersionConstraintsProcessor that allows
  users to configure which fields/values to add to tombstone documents. This can be useful to
  make sure tombstone documents include fields that are marked as required in the schema
  (Tomás Fernández Löbbe)

* SOLR-12984: The search Streaming Expression should properly support and push down paging
  when using the /select handler (Joel Bernstein)

* SOLR-13088: Add zplot Stream Evaluator to plot math expressions in Apache Zeppelin (Joel Bernstein)

Bug Fixes
----------------------

* SOLR-12546: CVSResponseWriter omits useDocValuesAsStored=true field when fl=*
  (Munendra S N via Mikhail Khludnev)

* SOLR-12933: Fix SolrCloud distributed commit. (Mark Miller)

* SOLR-13014: URI Too Long with large streaming expressions in SolrJ (janhoy)

* SOLR-13066: A failure while reloading a SolrCore can result in the SolrCore not being closed. (Mark Miller)

* SOLR-11296: Spellcheck parameters not working in new UI (Matt Pearce via janhoy)

* SOLR-10975: New Admin UI Query does not URL-encode the query produced in the URL box (janhoy)

* SOLR-13072: Management of markers for nodeLost / nodeAdded events is broken. This bug could have caused
  some events to be lost if they coincided with an Overseer leader crash. (ab)

* SOLR-13080: The "terms" QParser's "automaton" method semi-required that the input terms/IDs be sorted.  This
  query parser now does this.  Unclear if this is a perf issue or actual bug.  (Daniel Lowe, David Smiley)

* SOLR-13082: A trigger that creates trigger events more frequently than the cool down period can starve other triggers.
  This is mitigated to some extent by randomly choosing the trigger to resume after cool down. It is recommended that
  scheduled triggers not be used for very frequent operations to avoid this problem.
  (ab, shalin)

* SOLR-12514: Rule-base Authorization plugin skips authorization if querying node does not have collection replica (noble)

* SOLR-11853: Solr installer fails on SuSE linux (Markus Mandalka via janhoy)

* SOLR-12237: Fix incorrect SOLR_SSL_KEYSTORE_TYPE variable in solr start script (janhoy, Joel Bernstein)

* SOLR-13053: NodeAddedTrigger and NodeLostTrigger do not reserve added/removed time populated by restoreState
  (Cao Manh Dat)

* SOLR-13137: NPE when /admin/zookeeper/status endpoint hit in standalone mode (janhoy)

* SOLR-13091: REBALANCELEADERS is broken (Erick Erickson)

* SOLR-11998: RebalanceLeaders API broken response format with wt=JSON (Erick Erickson)

* SOLR-9735: Fix v2 API for AutoscalingHistoryHandler. (ab)

* SOLR-13168: Fixed a bug in TestInjection that caused test only code to be invoked when TLOG replicas
  recieved commits if java assertions were enabled. (hossman)

Improvements
----------------------

* SOLR-12881: Remove unneeded import statements (Peter Somogyi via Erick Erickson)

* SOLR-12992: When using binary format, ExportWriter to directly copy BytesRef instead of
  creating new String (noble)

* SOLR-12898: Replace cluster state polling with ZkStateReader#waitFor. (Mark Miller)

* SOLR-12897: Introduce AlreadyClosedException to clean up silly close / shutdown logging. (Mark Miller)

* SOLR-12896: Introduce more checks for shutdown and closed to improve clean close and shutdown. (Mark Miller)

* SOLR-12804: Remove static modifier from Overseer queue access. (Mark Miller)

* SOLR-12833: Add configurable timeout to VersionBucket lock. (Jeffery Yuan, Mark Miller)

* SOLR-12885: BinaryResponseWriter (javabin format) should directly copy from BytesRef to output (noble)

* SOLR-12973: Admin UI "Nodes" view support for replica* replica names. (Daniel Collins, Christine Poerschke, janhoy)

* SOLR-13090: All shipped configurations still have `maxBooleanClauses` default to 1024.  But if the
  `solr.max.booleanClauses` sysprop is specified, that will override the 1024 default.  This enables users to
  update this property across the board more easily. (Jason Gerlowski)

* SOLR-12983: JavabinLoader should avoid creating String Objects and create UTF8CharSequence fields from byte[] (noble)

* SOLR-13016: Computing suggestions when policy have "#EQUAL" or "#ALL" rules take too long (noble)

* SOLR-13029: solr.hdfs.buffer.size can be configured for HdfsBackupRepository for better performance (Tim Owen via Mikhail Khludnev)

* SOLR-13156: support facet.sort for facet.field={!terms=foo,bar}field. (Konstantin Perikov via Mikhail Khludnev)

* SOLR-13146: Allow derivatives to be computed for the oscillate Stream Evaluator (Joel Bernstein)

Other Changes
----------------------

* SOLR-12972: deprecate unused SolrIndexConfig.luceneVersion (Christine Poerschke)

* SOLR-12801: Make massive improvements to the tests. (Mark Miller)

* SOLR-12923: The new AutoScaling tests are way too flaky and need special attention. (Mark Miller)

* SOLR-12932: ant test (without badapples=false) should pass easily for developers. (Mark Miller)

* SOLR-13036: Fix retry logic in JettySolrRunner (Gus Heck)

* SOLR-12727: Upgrade ZooKeeper dependency to 3.4.13 (Kevin Risden, Erick Erickson, Cao Manh Dat)

* SOLR-13086: Improve the error message reported by DocumentObjectBinder when a setter is not found (Gus Heck)


==================  7.6.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.19.1
Carrot2 3.16.0
Velocity 1.7 and Velocity Tools 2.0
Apache ZooKeeper 3.4.11
Jetty 9.4.11.v20180605

Upgrade Notes
----------------------

* SOLR-12767: The min_rf parameter is no longer needed, Solr will always return the achieved replication factor (rf)
  in the response header.

* SOLR-12827: The cluster wide defaults structure has changed from {collectionDefaults: {nrtReplicas : 2}} to
  {defaults : {collection : {nrtReplicas : 2}}}.  The old format continues to be supported and can be read from
  ZK as well as written using the V2 set-obj-property syntax but it is deprecated and will be removed in Solr 9.
  We recommend that users change their API calls to use the new format going forward.

* SOLR-12739: Autoscaling policy framework is now used as the default strategy to select the nodes on which
  new replicas or replicas of new collections are created. Previously, the maxShardsPerNode parameter was not allowed
  on collections when autoscaling policy was configured. Also if an autoscaling policy was configured then the default
  was to set an unlimited maxShardsPerNode automatically. Now the maxShardsPerNode parameter is always
  allowed during collection creation and maxShardsPerNode should be set correctly (if required) regardless of whether
  autoscaling policies are in effect or not. The default value of maxShardsPerNode continues to be 1 as before. It can
  be set to -1 during collection creation to fall back to the old behavior of unlimited maxShardsPerNode when using
  autoscaling policy.

* SOLR-12861: Added a Solr factory for ByteBuffersDirectory, which will replace deprecated RAMDirectory in Solr 9.0.

New Features
----------------------

* SOLR-6280: {!collapse}: if you attempt to use CollapseQParser on a field that is multi-valued, you will now get an
  error.  Previously, the collapsing behavior was unreliable and undefined despite no explicit error.
  (Munendra S N, David Smiley)

* SOLR-9317: ADDREPLICA command should be able to add more than one replica to a collection,shard at a time.
  The API now supports 'nrtReplicas', 'tlogReplicas', 'pullReplicas' parameters as well 'createNodeSet' parameter.
  As part of this change, the CREATESHARD API now delegates placing replicas entirely to the ADDREPLICA command
  and uses the new parameters to add all the replicas in one API call. (shalin)

* SOLR-11522: /autoscaling/suggestions now include rebalance options as well even if there are no violations (noble)

* SOLR-12822: /autoscaling/suggestions to include suggestion to add-replica for lost replicas (noble)

* SOLR-12815: Implement maxOps limit for IndexSizeTrigger. (ab)

* SOLR-12843: Implement a MultiContentWriter in SolrJ to post multiple files/payload at once (noble)

* SOLR-12780: Add support for Leaky ReLU and TanH activations in contrib/ltr NeuralNetworkModel class.
  (Kamuela Lau, Christine Poerschke)

* SOLR-12846: Added support for "host" variable in autoscaling policy rules (noble)

* SOLR-5004: Splitshard collections API now supports splitting into more than 2 sub-shards directly i.e. by providing a
  numSubShards parameter (Christine Poerschke, Anshum Gupta)

* SOLR-12754: The UnifiedHighlighter has a new hl.weightMatches param defaulting to false (will be true in 8.0).  It's
  the highest query accuracy mode, and furthermore phrase queries are highlighted as one.  (David Smiley)

* SOLR-12828: Add oscillate Stream Evaluator to support sine wave analysis. (Joel Bernstein)

* SOLR-11907: Add convexHull and associated geometric Stream Evaluators. (Joel Bernstein)

* SOLR-12811: Add enclosingDisk and associated geometric Stream Evaluators. (Joel Bernstein)

* SOLR-12840: Add pairSort Stream Evaluator (Joel Bernstein)

* SOLR-12862: Add log10 Stream Evaluator and allow the pow Stream Evaluator to accept a vector of exponents (Joel Bernstein)

* SOLR-12942: Add an option in IndexSizeTrigger to select the split shard method. (ab)

* SOLR-12938: Cluster Status returns results for aliases, instead of throwing exceptions (Gus Heck)

* SOLR-11997: Suggestions API/UI should show an entry where a violation could not be resolved (noble)

* SOLR-12971: Add pivot Stream Evaluator to pivot facet co-occurrence counts into a matrix (Joel Bernstein)

* SOLR-12795: Introduce 'rows' and 'offset' parameter in FacetStream (Joel Bernstein, Amrit Sarkar, Varun Thacker)

* SOLR-11572: Add recip Stream Evaluator to support reciprocal transformations (Joel Bernstein)

* SOLR-12936: Allow percentiles Stream Evaluator to accept an array of percentiles to calculate (Joel bernstein)

* SOLR-12829: Add plist (parallel list) Streaming Expression (Joel Bernstein)

* SOLR-12975: Add ltrim and rtrim Stream Evaluators (Joel Bernstein)

* SOLR-12962: Added a new 'uninvertible' option for fields and fieldtypes. This defaults to 'true' for
  backcompat allowing a FieldCache to be built for indexed fields as needed, but users are encouraged
  to set this to false (using docValues as needed) to reduce the risk of large fluxuations in heap
  size due to unexpected attempts to sort/facet/function on non-docValue fields. (hossman)


Other Changes
----------------------

* SOLR-12762: Fix javadoc for SolrCloudTestCase.clusterShape() method and add a method that validates only against
  Active slices (Anshum Gupta)

* SOLR-12756: Refactor Assign and extract replica placement strategies out of it. Now, assignment is done with the help
  of a builder class instead of calling a method with large number of arguments. The number of special cases that had
  to be handled have been cut down as well. (shalin)

* SOLR-12827: Migrate cluster wide defaults syntax in cluster properties to a nested structure. The structure has
  changed from {collectionDefaults: {nrtReplicas : 2}} to {defaults : {collection : {nrtReplicas : 2}}}.
  (ab, shalin)

* SOLR-12835: Document statistics exposed by the Query Result Cache when maxRamMB is configured. (shalin)

* SOLR-12423: Upgrade to Tika 1.19.1 when available (Tim Allison via Erick Erickson)

* SOLR-12793: Move TestCloudJSONFacetJoinDomain and TestCloudJSONFacetSKG to the facet test package (Varun Thacker)

* SOLR-12861: Add Solr factory for ByteBuffersDirectory.

* SOLR-12746: Simplify the Ref Guide HTML structure and use semantic HTML tags where possible. Adds new template files
  for Asciidoctor HTML conversion. Building the HTML version now requires the Slim gem. (Cassandra Targett)

* SOLR-12956: Add Javadoc @since tag to Analyzer component classes (Alexandre Rafalovitch)

* SOLR-12966: Add Javadoc @since tag to URP classes (Alexandre Rafalovitch)

* SOLR-12600: Fix parameter names in Solr JSON documentation (Alexandre Rafalovitch)

* SOLR-12497: Add documentation to use Hadoop credential provider-based keystore/trustsore.
(Mano Kovacs, Cassandra Targett)

* SOLR-13006: ZkNodeProps to be able to load from both javabin and JSON (noble)

Bug Fixes
----------------------

* SOLR-12803: Ensure ConcurrentUpdateSolrClient sends documents to correct collection (Jason Gerlowski)

* SOLR-11836: FacetStream works with bucketSizeLimit of -1 which will fetch all the buckets.
  (Alfonso Muñoz-Pomer Fuentes, Amrit Sarkar via Varun Thacker)

* SOLR-12776: Setting of TMP in solr.cmd causes invisibility of Solr to JDK tools (Petr Bodnar via Erick Erickson)

* SOLR-12648: Autoscaling framework based replica placement is not used unless a policy is specified or
  non-empty cluster policy exists. (shalin)

* SOLR-12750: Migrate API should lock the collection instead of shard. (shalin)

* SOLR-12767: When using min_rf, shard leader skipped bad replicas instead of marking them for recovery, this could
  create inconsistencies between replicas of the same shard. min_rf parameter is now deprecated, and even if provided
  replicas that don't ack an update from the leader will be marked for recovery. (Tomás Fernández Löbbe)

* SOLR-12814: Metrics history causing "HttpParser URI is too large >8192" when many collections (janhoy)

* SOLR-12836: ZkController creates a cloud solr client with no connection or read timeouts. Now the http client
  created by the update shard handler is used instead. (shalin)

* SOLR-12729: SplitShardCmd should lock the parent shard to prevent parallel splitting requests. (ab)

* SOLR-12851: Improvements and fixes to let and select Streaming Expressions (Joel Bernstein)

* SOLR-12874: Java 9+ GC Logging filesize parameter should use a unit.  (Tim Underwood via Uwe Schindler)

* SOLR-12868: Request forwarding for v2 API is broken (noble)

* SOLR-7557: Fix parsing of child documents using queryAndStreamResponse (Marvin Bredal Lillehaug/Stian Østerhaug via janhoy)

* SOLR-12875: fix ArrayIndexOutOfBoundsException when unique(field) or uniqueBlock(_root_) is
used with DVHASH method in json.facet. (Tim Underwood via Mikhail Khludnev)

* SOLR-12954: fix facet.pivot refinement bugs when using facet.sort=index and facet.mincount>1 (hossman)

* SOLR-12023: Autoscaling policy engine shuffles replicas needlessly (noble)

* SOLR-12243: Edismax missing phrase queries when phrases contain multiterm synonyms
  (Elizabeth Haubert, Alessandro Benedetti, Uwe Schindler, Steve Rowe)

* SOLR-12977: Autoscaling tries to fetch metrics from dead nodes (noble)

* SOLR-12978: In autoscaling NPE thrown for nodes where value is absent (noble)

Improvements
----------------------

* SOLR-12767: Solr now always includes in the response of update requests the achieved replication factor
   (Tomás Fernández Löbbe)

* SOLR-12782: UninvertingReader wrapping is now a bit more lightweight: Does not create FieldInfo for fields that
  can't be uninverted (saves mem) and can avoid wrapping the reader altogether if there's nothing to uninvert.
  IndexSchema.getUninversionMap refactored to getUninversionMapper and no longer merges FieldInfos. (David Smiley)

* SOLR-12739: Make autoscaling policy based replica placement the default strategy for placing replicas. (shalin)

* SOLR-12806: use autoscaling policies with strict=false to prioritize node allocation (noble)

* SOLR-10981: Support for stream.url or stream.file pointing to gzipped data.  It's detected by either a content
  encoding header or file extension. (Andrew Lundgren via David Smiley, Jan Høydahl)

* SOLR-12892: MapWriter to use CharSequence instead of String (noble)

* SOLR-12882: Eliminate excessive lambda allocation in json facets FacetFieldProcessorByHashDV (Tim Underwood)

* SOLR-12699: Make contrib/ltr LTRScoringModel immutable and cache its hashCode.
  (Stanislav Livotov, Edward Ribeiro, Christine Poerschke)

* LUCENE-8557: Some internal LeafReader.getFieldInfos implementations were being re-computed on-demand instead of
  once up front leading to some slowdowns in places like JSON Facets and field collapsing. (Tim Underwood, David Smiley)

* SOLR-12964: Json Facets: use DocValuesIterator advanceExact() instead of advance() in FacetFieldProcessorByHashDV and
  UniqueSinglevaluedSlotAcc. (Tim Underwood)

* SOLR-12880: Json Facets: Show the FacetProcessor class name instead of the FacetRequest in the JSON Facets debug-trace
  output (Tim Underwood)

==================  7.5.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.18
Carrot2 3.16.0
Velocity 1.7 and Velocity Tools 2.0
Apache ZooKeeper 3.4.11
Jetty 9.4.11.v20180605

Upgrade Notes
----------------------

* The data-driven schema no longer returns the *_str field-copy of text fields by default. The *_str field is still
  created and can be used for e.g. sorting, but to retrieve it you now need to explicitly list it in "fl" (SOLR-12350)

* LUCENE-7976: TieredMergePolicy now respects maxSegmentSizeMB by default when executing
  findForcedMerges (optimize) and findForcedDeletesMerges (expungeDeletes) (Erick Erickson)

* SOLR-12395: SignificantTermsQParserPlugin's name is now 'significantTerms' and its old name 'sigificantTerms' is deprecated.

* SOLR-11694: Extremely outdated UIMA contrib module has been removed (Alexandre Rafalovitch)

* SOLR-12008: The configuration file for log4j2.xml is now in ../server/resources/log4j2.xml. All other copies have been removed.
  WINDOWS USERS: This JIRA corrects a bug in the start scripts that put example logs under ...\server, solr.log is
  now under ...\example. (Erick Erickson)

* SOLR-12398: The heatmap facet response structure, when returned in JSON, changed from an even/odd name/value array to
  an object style.  Although the object style makes more sense, this was an overlooked back-compat break; sorry.



New Features
----------------------

* SOLR-11865: The QueryElevationComponent now has a useConfiguredElevatedOrder setting. When multiple docs are elevated,
  this specifies whether their relative order should be the order in the configuration file or if not then should they
  be subject to whatever the sort criteria is.  Additionally, QEC was extensively refactored to be more extensible.
  (Bruno Roustant, David Smiley)

* SOLR-12474: Add an UpdateRequest Object that implements RequestWriter.ContentWriter (noble)

* SOLR-12361: Allow nested child documents to be in field values of a SolrInputDocument as an alternative to
  add/get ChildDocuments off to the side.  The latter is now referred to as "anonymous" child documents as opposed to
  "labelled" (by the field name).  Anonymous child docs might be deprecated in the future.  This is an internal change
  that should work for javabin/SolrJ; separate issues will address XML & JSON formats populating nested docs in this way.
  AddUpdateCommand and it's relationship with DirectUpdateHandler2 was reworked substantially. (Moshe Bla, David Smiley)

* SOLR-12362: Uploading docs in JSON now supports child documents as field values, thus providing a label to the
  relationship instead of the current "anonymous" relationship.  Use of this experimental feature sometimes requires a
  anonChildDocs=false parameter until Solr 8 due to syntax ambiguities.  (Moshe Bla, David Smiley)

* SOLR-12485: Uploading docs in XML now supports child documents as field values, thus providing a label to the
  relationship instead of the current "anonymous" relationship. (Moshe Bla, David Smiley)

* SOLR-12441: (EXPERIMENTAL) New NestedUpdateProcessorFactory (URP) to populate special fields _nest_parent_ and
  _nest_path_ of nested (child) documents. It will generate a uniqueKey of nested docs if they were blank too.
  (Moshe Bla, David Smiley)

* SOLR-12519: The [child] transformer now returns a nested child doc structure (attached as fields if provided this way)
  provided the schema has the _nest_path_ field.  This is part of a broader enhancement of nested docs.
  (Moshe Bla, David Smiley)

* SOLR-12722: The [child] transformer now takes an 'fl' param to specify which fields to return.  It will evaluate
  doc transformers if present.  In 7.5 a missing 'fl' defaults to the current behavior of all fields, but in 8.0
  defaults to the top/request "fl". (Moshe Bla, David Smiley)

* SOLR-11578: Solr 7 Admin UI (Cloud > Graph) should reflect the Replica type to give a more accurate representation
  of the cluster. (Rhoit Singh via Erick Erickson)

* SOLR-12507: Modify collection API should support un-setting properties. (shalin)

* SOLR-12506: Add SolrJ support for the modify collection API. (shalin)

* SOLR-12398: The JSON Facet API now supports type=heatmap facets, just as classic faceting does. (David Smiley)

* SOLR-11985: Support percentage values in replica attribute in autoscaling policy (noble)

* SOLR-12511: Support non integer values for replica in autoscaling policy (noble)

* SOLR-12517: Support range values for replica in autoscaling policy (noble)

* SOLR-12530: Ability to disable configset upload via -Dconfigset.upload.enabled=false startup parameter
  (Ishan Chattopadhyaya)

* SOLR-12495: An #EQUAL function for replica in autoscaling policy to equally distribute replicas (noble)

* SOLR-11986: Allow percentage in freedisk attribute in autoscaling policy rules (noble)

* SOLR-12522: Support a runtime function `#ALL` for 'replica' in autoscaling policies (noble)

* SOLR-12567: JSON Facet "functions" now support an extended "type:func" syntax, similar to other types
  of facets.  This also allows additional local params to be specified for if the aggregation function
  can take advantage of them.  (hossman)

* SOLR-12581: the JSON Facet 'relatedness()' aggregate function now supports a 'min_popularity' option
  using the extended type:func syntax (hossman)

* SOLR-12536: autoscaling policy support to equally distribute replicas on the basis of arbitrary properties (noble)

* SOLR-8207: Add "Nodes" view to the Admin UI "Cloud" tab, listing nodes and key metrics (janhoy)

* SOLR-7767: "ZK Status" sub menu under "Cloud" tab to see status of zookeeper ensemble (janhoy)

* SOLR-11990: Make it possible to co-locate replicas of multiple collections together in a node. A collection may be
  co-located with another collection during collection creation time by specifying a 'withCollection' parameter. It can
  also be co-located afterwards by using the modify collection API. The co-location guarantee is enforced regardless of
  future cluster operations whether they are invoked manually via the Collection API or by the Autoscaling framework.
  (noble, shalin)

* SOLR-12402: Factor out SolrDefaultStreamFactory class. (Christine Poerschke)

* SOLR-12592: support #EQUAL function, range operator, decimal and percentage in cores in autoscaling policies (noble)

* SOLR-12655: Add Korean morphological analyzer ("nori") to default distribution. This also adds examples
  for configuration in Solr's schema.  (Uwe Schindler)

* SOLR-11863: Add knnRegress Stream Evaluator to support nearest neighbor regression (Joel Bernstein)

* SOLR-12702: Add zscores Stream Evaluator (Joel Bernstein)

* SOLR-12687: Add functions to cache data structures and mathematical models (Joel Bernstein)

* SOLR-12671: Add robust flag to knnRegress Stream Evaluator (Joel Bernstein)

* SOLR-12660: Add outliers Stream Evaluator to support outlier detection with probability distributions
  (Joel Bernstein)

* SOLR-12634: Add gaussfit Stream Evaluator (Joel Bernstein)

* SOLR-12629: The predict evaluator should work with the polyfit function (Joel Bernstein)

* SOLR-12715: NodeAddedTrigger should support adding replicas to new nodes by setting preferredOperation=addreplica.
  (shalin)

* SOLR-11861: When creating a configSet via the API, the "baseConfigSet" parameter now defaults to "_default".
  (Amrit Sarkar, David Smiley)

* SOLR-12716: NodeLostTrigger should support deleting replicas from lost nodes by setting preferredOperation=deletenode.
  (shalin)

* SOLR-9418: Added a new (experimental) PhrasesIdentificationComponent for identifying potential phrases
  in query input based on overlapping shingles in the index. (Akash Mehta, Trey Grainger, hossman)

* SOLR-11943: Add machine learning functions for location data (Joel Bernstein)

* SOLR-12612: Cluster properties restriction of known keys only is relaxed, and now unknown properties starting with "ext."
  will be allowed. This allows custom to plugins set their own cluster properties. (Jeffery Yuan via Tomás Fernández Löbbe)

* SOLR-12357: Time Routed Aliases now have a preemptiveCreateMath option to preemptively and asynchronously create the
  next collection in advance as new data gets within this time window of the end. (Gus Heck, David Smiley)

Bug Fixes
----------------------

* SOLR-12449: Response /autoscaling/diagnostics shows improper json (noble)

* SOLR-11676: Keep nrtReplicas and replicationFactor in sync while creating a collection and modifying a collection
  (Varun Thacker)

* SOLR-12489: User specified replicationFactor and maxShardsPerNode is used when specified during a restore operation.
  A user can now specify nrtReplicas/tlogReplicas/pullReplicas while restoring the collection.
  Specifying replicationFactor or nrtReplicas have the same effect and only one can be specified (Varun Thacker)

* SOLR-11216: Race condition in PeerSync (Cao Manh Dat)

* SOLR-11807: Restoring collection now treats maxShardsPerNode=-1 as unlimited (Varun Thacker)

* SOLR-12413: If Zookeeper was pre-loaded with data before first-use, then the aliases information would be ignored.
  (David Smiley, Gaël Jourdan, Gus Heck)

* SOLR-12482: Config API returns status 0 for failed operations. (Steve Rowe)

* SOLR-12513: Reproducing TestCodecSupport.testMixedCompressionMode failure (Erick Erickson)

* SOLR-11665: Improve error handling of shard splitting. Fix splitting of mixed replica types. (ab)

* SOLR-12326: JSON Facet API: terms facet shard requests now indicate if they have more buckets to prevent
  unnecessary refinement requests. (yonk)

* SOLR-12427: Improve error message for invalid 'start', 'rows' parameters. (Munendra S N via Jason Gerlowski)

* SOLR-12395: Make 'significantTerms' the SignificantTermsQParserPlugin's name and deprecate its old 'sigificantTerms' name.
  (Tobias Kässmann, Christine Poerschke)

* SOLR-12533 Collection collection fails if metrics are called during core creation (Peter Cseh, Mano Kovacs)

* SOLR-2834: Fix SolrJ Field and Document analyzes for types that include CharacterFilter (Alexandre Rafalovitch)

* SOLR-12516: Fix some bugs in 'type:range' Facet refinement when sub-facets are combined with non
  default values for the 'other' and 'include' options. (hossman)

* SOLR-12343: Fixed a bug in JSON Faceting that could cause incorrect counts/stats when using non default
  sort options.  This also adds a new configurable "overrefine" option. (Yonik Seeley, hossman)

* SOLR-12553: Allow SignificantTerms Query Parser to use local parameters (Alexandre Rafalovitch)

* SOLR-12570: OpenNLPExtractNamedEntitiesUpdateProcessor cannot support multi fields because pattern replacement
  doesn't work correctly. (Koji Sekiguchi)

* SOLR-12576: Update ref guide for additional information displayed in cloud view (Erick Erickson)

* SOLR-12597: Migrate API should fail requests that do not specify split.key parameter (shalin)

* SOLR-12477: An update would return a client error(400) if it hit a AlreadyClosedException.
  We now return the error as a server error(500) instead (Jeffery via Varun Thacker)

* SOLR-12606: Fix InfixSuggestersTest.testShutdownDuringBuild() failures. (Steve Rowe)

* SOLR-12607: Fixed two separate bugs in shard splits which can cause data loss. The first case is when using TLOG
  replicas only, the updates forwarded from parent shard leader to the sub-shard leader are written only in tlog and
  not the index. If this happens after the buffered updates have been replayed then the updates can never be executed
  even though they remain the transaction log. The second case is when synchronously forwarding updates to sub-shard
  leader fails and the underlying errors are not propagated to the client. (Cao Manh Dat, shalin)

* SOLR-12344: SolrSlf4jReporter doesn't set MDC context. (ab)

* SOLR-12594: MetricsHistoryHandler.getOverseerLeader fails when hostname contains hyphen. (ab)

* SOLR-12615: HashQParserPlugin will no longer throw an NPE if the hash key field is a string when there are documents
  with empty values. All documents with empty values ( string , numeric ) will be processed by worker=0
  This would fix the NPE when using the search stream with partitionKeys. (Varun Thacker)

* SOLR-11770: NPE in tvrh if no field is specified and document doesn't contain any fields with term vectors

* SOLR-12541: Metrics handler throws an error if there are transient cores. (ab)

* SOLR-12470: Search Rate Trigger multiple bug fixes, improvements and documentation updates. (ab)

* SOLR-12665: Autoscaling policy not being refreshed due to caching (noble)

* SOLR-12649: CloudSolrClient retries requests unnecessarily exception from server (noble, shalin)

* SOLR-12670: RecoveryStrategy logs wrong wait time when retrying recovery. (shalin)

* SOLR-12668: Autoscaling trigger listeners should be executed in the order of their creation. (ab)

* SOLR-12475: Fix MaxSizeAutoCommitTest failures (Rupa Shankar, Anshum Gupta)

* SOLR-12674: RollupStream should not use the HashQueryParser for 1 worker. (Varun Thacker)

* SOLR-12679: MiniSolrCloudCluster internal jetty list should never have duplicates (shalin)

* SOLR-12598: Do not fetch non-stored fields (Nikolay Khitrin, Erick Erickson)

* SOLR-12683: HashQuery will throw an exception if more than 4 partitionKeys is specified.
  Earlier after the 4th partitionKey the keys would be silently ignored. (Varun Thacker)

* SOLR-10028: Fix and improvements to SegmentsInfoRequestHandlerTest (Christine Poerschke, Tomás Fernández Löbbe)

* SOLR-11585: Solr SQL does not work with point numeric fields (Joel Bernstein, Kiran Chitturi)

* SOLR-12704: Guard AddSchemaFieldsUpdateProcessorFactory against null field names and field values.
  (Steve Rowe, Varun Thacker)

* SOLR-12733: SolrMetricReporterTest failure (Erick Erickson, David Smiley)

* SOLR-12765: Incorrect format of JMX cache stats. (Bojan Smid, ab)

* SOLR-12749: timeseries() expression missing sum() results for empty buckets (Joel Bernstein)

Optimizations
----------------------

* SOLR-12350: Do not use docValues as stored for _str (copy)fields in _default configset (janhoy)

* SOLR-12455: Refactor JSON serialization code into SolrJ package (noble)

* SOLR-11654: Time Routed Alias will now route documents to the ideal shard of a collection, thus avoiding a hop.
  Usually documents were already routed well but not always.  (Gus Heck, David Smiley)

* SOLR-11598: The export handler does not limit users to 4 sort fields and is now unlimited. However the speed at
  which we can export is directly proportional to the number of sort fields specified. This change also allows streaming
  expressions to group by on more than 4 fields. (Aroop Ganguly, Amrit Sarkar, Varun Thacker)

* SOLR-12305: When a replica is applying updates, some kind of updates can skip buffering for faster recovery.
  (Cao Manh Dat)

* SOLR-12509: Improve SplitShardCmd performance and reliability. A new method of splitting has been
  introduced (splitMethod=link) which uses hard-linking of index files when possible, resulting in
  significant speedups and reduced CPU / IO load on shard leader. (ab)

* SOLR-11881: Retry update requests sent by leaders to it's followers (Varun Thacker, Mark Miller, Tomás Fernández Löbbe)

* SOLR-12616: Optimize Export writer upto 4 sort fields to get better performance.
  This was removed in SOLR-11598 but brought back in the same version (Amrit Sarkar, Varun Thacker)

* SOLR-12572: While exporting documents using the export writer, if a field is specified as a sort parameter and also
  in the fl (field list) parameter, we save on one doc-value lookup. This can bring performance improvements of 15%
  and upwards depending on how many fields are in common. (Amrit Sarkar, Varun Thacker)

* SOLR-10697: HttpShardHandler now uses a default of 100k as maxConnections (10k previously) and default
  maxConnectionsPerHost as 100k (20 previously). They are now consisent with the UpdateShardHandler defaults.
  (Varun Thacker)

* SOLR-12723: Reduce object creation in HashBasedRouter. (ab)

* SOLR-12766: When retrying internal requests, backoff only once for the full batch of retries (Tomás Fernández Löbbe)

Other Changes
----------------------

* SOLR-12208: Renamed the autoscaling variable 'INDEX.sizeInBytes' to 'INDEX.sizeInGB' (noble)

* SOLR-12523: Improve error reporting and docs regarding Collection backup feature shared-fs requirement (janhoy)

* SOLR-12468: Upgrade Jetty to 9.4.11.v20180605 (Michael Braun, shalin)

* SOLR-12527: factor out a test-framework/ConfigRequest class (Christine Poerschke)

* SOLR-12412: Leader should give up leadership when IndexWriter.tragedy occur (Cao Manh Dat, Tomas Fernandez-Lobbe)

* SOLR-12551: Upgrade to Tika 1.18 (Tim Allison via Erick Erickson)

* SOLR-12464: Reduce Overseer.close() logging (for non-Overseer leaders) (Christine Poerschke)

* SOLR-12454: Tweak Overseer leadership transition related logging for easier troubleshooting. (Christine Poerschke)

* SOLR-12574: Put under a common "significantTerms" bucket all output by SignificantTerms Query Parser (Alexandre Rafalovitch)

* SOLR-12164: Improve Ref Guide main landing page. (Cassandra Targett)

* SOLR-10984: Clean up web.xml, removing old redirects and outdated comments (Varun Thacker, janhoy)

* SOLR-12617: Remove Commons BeanUtils as a dependency (Varun Thacker)

* SOLR-11008: Use a lighter config for MetricsHandlerTest and ensure the core is up before the test starts (Varun Thacker)

* SOLR-11766: Move Streaming Expressions section in Ref Guide to be a top-level section. (Cassandra Targett)

* SOLR-12656: ShardSplitTest should extend AbstractFullDistribZkTestBase instead of BasicDistributedZkTest. (shalin)

* LUCENE-8456: Upgrade Apache Commons Compress to v1.18 (Steve Rowe)

* SOLR-12014: Cryptic error message when creating a collection with sharding that violates autoscaling policies (noble)

* SOLR-12680: Fix ClassCastException and AIOOBE in TestSolrConfigHandlerConcurrent. (shalin)

* SOLR-12675: Make LeaderVoteWaitTimeoutTest more resilient against side effects of test methods. (shalin)

* SOLR-12130: CdcrReplicationDistributedZkTest is broken into two test classes, CdcrOpsAndBoundariesTest which does
  not require node restarts and CdcrWithNodesRestartsTest which does. The tests themselves are made faster and more
  resilient to spurious failures. (Varun Thacker, Amrit Sarkar via shalin)

* SOLR-12625: Combine SolrDocumentFetcher and RetrieveFieldsOptimizer (Erick Erickson)

* SOLR-12690: Regularize LoggerFactory declarations (Erick Erickson)

* SOLR-12590: Improve Solr resource loader coverage in the ref guide.
  (Steve Rowe, Cassandra Targett, Christine Poerschke)

* SOLR-12744: Improve logging messages and verbosity around recoveries (Cao Manh Dat, Varun Thacker)

* SOLR-8742: In HdfsDirectoryTest replace RAMDirectory usages with ByteBuffersDirectory.
  (hossman, Mark Miller, Andrzej Bialecki, Steve Rowe)

* SOLR-12771: Improve Autoscaling Policy and Preferences documentation. (hossman, Steve Rowe)

==================  7.4.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.17
Carrot2 3.16.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.11
Jetty 9.4.10.v20180503

Upgrade Notes
----------------------

* SOLR-7887: Solr now uses Log4J 2.11 . The log4j configuration is now in log4j2.xml rather than log4j.properties files.
  This is a server side change only and clients using SolrJ won't need any changes. Clients can still use any logging
  implementation which is compatible with SLF4J. We now let log4j2 handle rotation of solr logs at startup, and bin/solr
  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
  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.
  Previously they would get logged in the solr.log file.

New Features
----------------------

* SOLR-12396: Upgrade Carrot2 to 3.16.0, HPPC to 0.8.1, morfologik to 2.1.5. (Dawid Weiss)

* SOLR-11200: A new CMS config option 'ioThrottle' to manually enable/disable
  ConcurrentMergeSchedule.doAutoIOThrottle. (Amrit Sarkar, Nawab Zada Asad iqbal via Dawid Weiss)

* SOLR-11670: Implement a periodic house-keeping task. This uses a scheduled autoscaling trigger and
  currently performs cleanup of old inactive shards. (ab, shalin)

* SOLR-12015: Add support "add-distinct" in AtomicURP so that we can use the 'add-distict' as a request parameter e.g:
  atomic.<multival-field-name>=add-distict (Amrit Sarkar via noble)

* SOLR-7887: Upgrade Solr to use Log4J 2.11
  (Tim Potter, Keith Laban, Shawn Heisey, Ralph Goers, Erick Erickson, Varun Thacker)

* SOLR-12139: The "eq" (equals) function query now works with string fields, string literals, and perhaps anything.
  (Andrey Kudryavtsev, David Smiley)

* SOLR-10783: Add support for Hadoop Credential Provider as SSL/TLS store password source.
  (Mano Kovacs via Mark Miller)

* SOLR-12036: Factor out DefaultStreamFactory solrj class. (Christine Poerschke)

* SOLR-12151: Add abstract MultiSolrCloudTestCase class. (Christine Poerschke)

* SOLR-12181: Add index size autoscaling trigger, based on document count or size in bytes. (ab)

* SOLR-11982: Add possibility to define replica order with the shards.preference parameter to e.g. prefer PULL replicas
  for distributed queries. (Ere Maijala, Tomás Fernández Löbbe)

* SOLR-11336: DocBasedVersionConstraintsProcessorFactory is more extensible and now supports a list of versioned fields.
  (versionField config may now be a comma-delimited list). (Michael Braun via David Smiley)

* SOLR-11913: SolrJ SolrParams now implements Iterable<Map.Entry<String, String[]>> and also has a stream() method
  using it for convenience. (David Smiley, Tapan Vaishnav)

* SOLR-11924: Added the ability to listen to changes in the set of active collections in a cloud
  in the ZkStateReader, through the CloudCollectionsListener. (Houston Putman, Dennis Gove)

* SOLR-8998: introducing uniqueBlock(_root_) aggregation as faster alternative to unique(_root_) for counting
  child value facets in parents via json.facet on block index (Dr Oleg Savrasov, Mikhail Khludnev)

* SOLR-12278: Add IgnoreLargeDocumentProcessFactory (Cao Manh Dat, David Smiley)

* SOLR-11277: Add auto hard-commit settings based on tlog size (Rupa Shankar, Anshum Gupta)

* SOLR-9480: A new 'relatedness()' aggregate function for JSON Faceting to enable building Semantic
  Knowledge Graphs. (Trey Grainger, hossman)

* SOLR-11453: Configuring slowQueryThresholdMillis logs slow requests to a separate file - solr_slow_requests.log.
  (Shawn Heisey, Remko Popma, Varun Thacker)

* SOLR-12401: Add getValue() and setValue() Stream Evaluators (Joel Bernstein, janhoy)

* SOLR-12378: Support missing versionField on indexed docs in DocBasedVersionConstraintsURP.
  (Oliver Bates, Michael Braun via Mark Miller)

* SOLR-12388: Enable a strict ZooKeeper-connected search request mode, in which search
  requests will fail when the coordinating node can't communicate with ZooKeeper,
  by setting the "shards.tolerant" param to "requireZkConnected".  (Steve Rowe)

* SOLR-9685: #Tagging queries in JSON Query DSL, equivalent to LocalParams based query/filter
  tagging.  Multiple tags are comma separated.
  LocalParams Example     : {!tag=colorfilt}color:blue
  Equivalent JSON Example : { "#colorfilt" : "color:blue" }
  (Dmitry Tikhonov, Mikhail Khludnev, yonik)

* SOLR-12328: JSON Facet API: Domain change with graph query.
  (Daniel Meehl, Kevin Watters, yonik)

* SOLR-11453: Configuring slowQueryThresholdMillis logs slow requests to a separate file - solr_slow_requests.log.
  (Shawn Heisey, Remko Popma, Varun Thacker)

* SOLR-12401: Add getValue() and setValue() Stream Evaluators (Joel Bernstein, janhoy)

* SOLR-11779, SOLR-12438: Basic long-term collection of aggregated metrics. Historical data is
  maintained as multi-resolution time series using round-robin databases in the '.system'
  collection. New /admin/metrics/history API allows retrieval of this data in numeric
  or graph formats. (ab)

* SOLR-12387: cluster-wide defaults for numShards, nrtReplicas, tlogReplicas, pullReplicas (noble)

* SOLR-12389: support deeply nested json objects in clusterprops.json (noble)

* SOLR-12376: Added the TaggerRequestHandler (AKA SolrTextTagger) for tagging text.  It's used as a component of
  NER/ERD systems including query-understanding.  See the ref guide for more info.  (David Smiley)

* SOLR-12266: Add discrete Fourier transform Stream Evaluators (Joel Bernstein)

* SOLR-12158: Allow the monteCarlo Stream Evaluator to support variables (Joel Bernstein)

* SOLR-11734: Add ones and zeros Stream Evaluators (Joel Bernstein)

* SOLR-12273: Create Stream Evaluators for distance measures (Joel Bernstein)

* SOLR-12159: Add memset Stream Evaluator (Joel Bernstein)

* SOLR-12221: Add valueAt Stream Evaluator (Joel Bernstein)

* SOLR-12175: Add random field type and dynamic field to the default managed-schema (Joel Bernstein)

Bug Fixes
----------------------

* SOLR-5351: Fixed More Like This Handler to use all fields provided in mlt.fl when used with
  content stream. The similarity is calculated between the content stream's value and all
  fields listed in mlt.fl. (Dawid Weiss)

* SOLR-12103: Raise CryptoKeys.DEFAULT_KEYPAIR_LENGTH from 1024 to 2048. (Mark Miller)

* SOLR-12107: Fixed a error in [child] transformer that could ocur if documentCache was not used (hossman)

* SOLR-12108: Fixed the fallback behavior of [raw] and [xml] transformers when an incompatble 'wt' was
  specified, the field value was lost if documentCache was not used.  (hossman)

* SOLR-11551: Standardize CoreAdmin API success/failure status codes (Jason Gerlowski, Steve Rowe)

* SOLR-12035: ExtendedDismaxQParser fails to include charfilters in nostopanalyzer (Tim Allison via
  Tomás Fernández Löbbe)

* SOLR-10734: AtomicUpdateRequestProcessor can cause wrong/old values to be set under concurrent updates for the same
  document. Multithreaded test for AtomicUpdateRequestProcessor was also beefed up and fixed.
  (Ishan Chattopadhyaya, Noble Paul, Amrit Sarkar, shalin)

* SOLR-11673: By default slave doesn't commit empty index when completely new index appears on master.
  See Upgrade Notes to find a way to get back to the previous behavior. (Mikhail Khludnev)

* SOLR-9399: Delete requests do not send credentials & fails for Basic Authentication
  (Susheel Kumar, Aibao Luo, Nikkolay Martinov via Erick Erickson)

* SOLR-12172: Fixed race condition that could cause an invalid set of collection properties to be kept in
  memory when multiple collection property changes are done in a short period of time. (Tomás Fernández Löbbe)

* SOLR-11929: UpdateLog metrics are not initialized on core reload.  (ab, Steve Rowe)

* SOLR-11882: SolrMetric registries retained references to SolrCores when closed. A
  change of SolrMetricMAnager.registerGauge and SolrMetricProducer.initializeMetrics
  method signatures was required to fix it. Third party components may continue to use the old API
  but should be updated to avoid this bug (Eros Taborelli, Erick Erickson, ab)

* SOLR-12199: TestReplicationHandler.doTestRepeater(): TEST_PORT interpolation failure:
  Server refused connection at: http://127.0.0.1:TEST_PORT/solr  (Mikhail Khludnev, Dawid Weiss, Steve Rowe)

* SOLR-12096: Fixed inconsistent results format of subquery transformer for distributed search (multi-shard).
  (Munendra S N, Mikhail Khludnev via Ishan Chattopadhyaya)

* SOLR-12207: Just rethrowing AssertionError caused by jdk bug in reflection with invocation details.
 (ab, Dawid Weiss, Mikhail Khludnev)

* SOLR-12155: Exception from UnInvertedField constructor puts threads to infinite wait.
 (Andrey Kudryavtsev, Mikhail Khludnev)

* SOLR-12201: TestReplicationHandler.doTestIndexFetchOnLeaderRestart(): handle unexpected replication failures
  (Steve Rowe)

* SOLR-12190: Need to properly escape output in GraphMLResponseWriter. (yonik)

* SOLR-12214: Leader may skip publish itself as ACTIVE when its last published state is DOWN (Cao Manh Dat)

* SOLR-12150: Fix a test bug in CdcrBidirectionalTest.testBiDir (Steve Rowe, Amrit Sarkar via Varun Thacker)

* SOLR-10513: ConjunctionSolrSpellChecker did not work with LuceneLevenshteinDistance (Amrit Sarkar via James Dyer)

* SOLR-11840: Fix bin/solr help-text inconsistencies (Jason Gerlowski)

* SOLR-10169: PeerSync will hit an NPE on no response errors when looking for fingerprint. (Erick Erickson)

* SOLR-12187: Replica should watch clusterstate and unload itself if its entry is removed (Cao Manh Dat)

* SOLR-6286: TestReplicationHandler.doTestReplicateAfterCoreReload(): stop checking for identical
  commits before/after master core reload; and make non-nightly mode test 10 docs instead of 0.
  (shalin, hossman, Mark Miller, Steve Rowe)

* SOLR-9304: Fix Solr's HTTP handling to respect '-Dsolr.ssl.checkPeerName=false' aka SOLR_SSL_CHECK_PEER_NAME
  (Shawn Heisey, Carlton Findley, Robby Pond, hossman)

* SOLR-12250: NegativeArraySizeException on TransactionLog if previous document more than 1.9GB (Cao Manh Dat)

* SOLR-12253: Remove optimize button from the core admin page (Erick Erickson)

* SOLR-11833: Allow searchRate trigger to delete replicas. Improve configurability of the trigger by specifying
  upper / lower thresholds and respective actions (ab)

* SOLR-12261: If you attempt to delete a collection immediately after deleting an alias it used to be a part of, you may
  get an error that's it's a member of that alias.  This check now ensures the alias state is sync()'ed with ZK first.
  (David Smiley)

* SOLR-12275: wrong caching for {!filters} as well as for `filters` local param in {!parent} and {!child}
  (David Smiley, Mikhail Khluldnev)

* SOLR-12284: WordBreakSolrSpellchecker will no longer add parenthesis in collations when breaking words in
  non-boolean queries. (James Dyer)

* SOLR-12290: Do not close any servlet streams and improve our servlet stream closing prevention code for users
  and devs. (Mark Miller, janhoy, Andrzej Bialecki)

* SOLR-12293: Updates need to use their own connection pool to maintain connection reuse and prevent spurious
  recoveries. (Mark Miller)

* SOLR-12308: LISTALIASES is now assured to return an up-to-date response.  Also, the test utility
  MiniSolrCloudCluster.deleteAllCollections will now first delete aliases since a collection cannot be deleted if an
  alias refers to it.  (David Smiley)

* SOLR-12192: Fixed a solr cli error message when ulimits are unlimited. (Martijn Koster)

* SOLR-12258: A V2 request referencing a collection or alias may fail to resolve it if it was just recently created.
  Now we sync with ZooKeeper and try one more time.  V1 partially did this but only for aliases; now it does both.
  (David Smiley)

* SOLR-12170: JSON Facet API: Terms facet on a date field sometimes failed with an exception complaining
  about "Invalid Date String". (yonik)

* SOLR-12307: exiting OverseerTriggerThread without endless noise in log when Zookeeper session is expired
  (Mikhail Khludnev)

* SOLR-12200: abandon OverseerExitThread when ZkController is closed. (Mikhail Khludnev)

* SOLR-12355: Fixes hash conflict in HashJoinStream and OuterHashJoinStream (Dennis Gove)

* SOLR-12377: Don't spin off overseer when Zk controller is closed (Mikhail Khludnev)

* SOLR-3567: Spellcheck custom parameters not being passed through due to wrong prefix creation.
  (Josh Lucas via shalin)

* SOLR-12358: Autoscaling suggestions fail randomly with sorting (noble)

* SOLR-12294: update processors loaded from runtime jars fail to load if they are specified
  in an update processor chain (noble)

* SOLR-12314: Use http timeout's defined in solr.xml for creating ConcurrentUpdateSolrClient during
  indexing requests between leader and replica ( Mark Miller, Varun Thacker)

* SOLR-12290: Do not close any servlet streams and improve our servlet stream closing prevention code for users
  and devs. (Mark Miller)

* SOLR-12374: SnapShooter.getIndexCommit can forget to decref the searcher; though it's not clear in practice when.
  (David Smiley)

* SOLR-12417: velocity response writer should enforce valid function name for v.json parameter (Mano Kovacs, yonik)

* SOLR-12271: Fixed bug in how Analytics component reads negative values from float and double fields. (Houston Putman)

* SOLR-12433: Recovering flag of a replica is set equals to leader even it failed to receive update
  on recovering. (Cao Manh Dat)

* SOLR-12354: Register the /admin/info/key end-point at the startup time to avoid 404 (noble)

* SOLR-12445: Upgrade Dropwizard Metrics to version 3.2.6. (ab)

* SOLR-12434: bin/solr {config,healthcheck} ignore ZK_HOST in solr.in.{sh,cmd} (Steve Rowe)

* SOLR-12481: update.autoCreateFields must be set via Config API command 'set-user-property',
  but 'bin/solr create' tells users to use the default action 'set-property', which fails
  because the property is not editable. (Steve Rowe)

* SOLR-12416: When creating a time routed alias, the router.autoDeleteAge option wasn't considered.
  (Joachim Sauer via David Smiley)

* SOLR-12450: Don't allow referal to external resources in various config files (CVE-2018-8026).
  (Yuyang Xiao, Uwe Schindler)

Optimizations
----------------------

* SOLR-11920: IndexFetcher now fetches only those files (from master/leader) that are different. This
  differential fetching now speeds up recovery times when full index replication is needed, but only
  a few segments diverge. (Ishan Chattopadhyaya, Shaun Sabo, John Gallagher)

* SOLR-11731: LatLonPointSpatialField can now decode points from docValues when stored=false docValues=true,
  albeit with maximum precision of 1.37cm (Karthik Ramachandran, David Smiley)

* SOLR-11891: DocStreamer now respects the ReturnFields when populating a SolrDocument, reducing the
  number of unneccessary fields a ResponseWriter will see if documentCache is used (wei wang, hossman)

* SOLR-12312: Replication IndexFetcher should cap its internal buffer size when the file being transferred is small.
  (Jeff Miller, David Smiley)

* SOLR-12333: Removed redundant lines for handling lists in JSON reponse writers. (David Smiley via Mikhail Khludnev)

* SOLR-11880: Avoid creating new exceptions for every request made to MDCAwareThreadPoolExecutor by distributed
  search and update operations. (Varun Thacker, shalin)

* SOLR-12375: Optimize Lucene ScoreMode use:
  A non-cached filter query could be told incorrectly that scores were needed.
  The /export (ExportQParserPlugin) would declare incorrectly that scores are needed.
  Expanded docs (expand component) could be told incorrectly that scores are needed.  (David Smiley)

* SOLR-12338: Replay buffering tlog in parallel. (Cao Manh Dat, David Smiley)

* SOLR-12366: A slow "live docs" implementation was being used instead of a bitset.  Affects classic faceting
  enum method, JSON Facets enum method, UnInvertedField faceting, GraphTermsQParser, JoinQParser.  (David Smiley)

* SOLR-12337: Remove the obsolete QueryWrapperFilter intermediate wrapper, which also removed some needless uses of
  SolrConstantScoreQuery as well.  QWF since v5.4.0 sometimes needlessly internally executed and cached the query.
  Affects ExpandComponent, ChildDocTransformer, CurrencyFieldType, TermsQParser.  (David Smiley)

* SOLR-9922: Write buffering updates to another tlog. (Cao Manh Dat)

* SOLR-12233: QParserPlugin's built-in static registry now holds actual QParserPlugin instances instead of class
  references.  This is consistent with other plugin registries and allows a SolrCore to load faster.
  (Jeff Miller, David Smiley)

* SOLR-12198: Stream Evaluators should not copy matrices needlessly (Joel Bernstein)

Other Changes
----------------------

* SOLR-12018: Remove comments.apache.org integration for the Ref Guide; the comments system has been down since December 2017 and there is no concrete plan to bring it back. (Cassandra Targett)

* SOLR-12076: Remove unnecessary printLayout usage in CDCR tests (Varun Thacker)

* SOLR-12086: Fix format problem in FastLRUCache description string shown on Cache Statistics page.
  (Sathiya N Sundararajan via shalin)

* SOLR-12090: Move DistribStateManager, NodeStateProvider and SolrCloudManager interfaces out of the
  autoscaling package. (shalin)

* SOLR-12091: Rename TimeSource.getTime to getTimeNs. (ab)

* SOLR-12101: ZkTestServer was not handling connection timeout settings properly. (Gus Heck via Mark Miller)

* SOLR-11331: Ability to run and debug standalone Solr and a single node SolrCloud server from Eclipse.
  Also being able to run all Lucene and Solr tests as a configuration (Karthik Ramachandran via
  Varun Thacker, Uwe Schindler)

* SOLR-12118: Solr Ref-Guide can now use some ivy version props directly as attributes in content (hossman)

* SOLR-12152: Split up TriggerIntegrationTest into multiple tests to isolate and increase reliability. (shalin)

* SOLR-12133: Fix race conditions that caused TriggerIntegrationTest.testEventQueue and testNodeMarkersRegistration
  to fail. (Mark Miller, shalin)

* SOLR-12169: Fix ComputePlanActionTest.testSelectedCollections fails on jenkins by aggressively cleaning up
  trigger state left by other test methods in the test setup. (shalin)

* SOLR-12144: SOLR_LOG_PRESTART_ROTATION now defaults to false, we leverage log4j2 for log rotation on startup (janhoy)

* SOLR-12095: AutoScalingHandler validates trigger configurations before updating Zookeeper. (ab)

* SOLR-12165: Ref Guide: DisMax default mm param value is improperly documented as 100%. (Steve Rowe)

* SOLR-12154: Disallow explicit usage of Log4j2 logger via forbidden APIs. (Varun Thacker, Tomás Fernández Löbbe)

* SOLR-12176: Improve FORCELEADER to handle the case when a replica win the election but does not present
  in clusterstate (Cao Manh Dat)

* SOLR-12134: ref-guide 'bare-bones html' validation is now part of 'ant documentation' and validates
  javadoc links locally. (hossman)

* SOLR-12142: EmbeddedSolrServer should use req.getContentWriter (noble)

* SOLR-12252: Fix minor compiler and intellij warnings in autoscaling policy framework. (shalin)

* SOLR-11914: The following SolrParams methods are now deprecated: toSolrParams (use NamedList.toSolrParams instead),
  toMap, toMultiMap, toFilteredSolrParams, getAll.  The latter ones have no direct replacement but are easy to
  implement yourself as-needed. (David Smiley)

* SOLR-10036: Upgrade jackson from 2.5.4 to 2.9.5 (Shashank Pedamallu, Shawn Heisey, Varun Thacker)

* SOLR-12289: Add more MDC logging information to collection admin requests (Varun Thacker)

* SOLR-12288: Add more MDC logging information to core admin requests (Varun Thacker)

* SOLR-12265: Upgrade Jetty to 9.4.10.v20180503 (Varun Thacker, Steve Rowe)

* SOLR-12374: Added SolrCore.withSearcher(lambda) to make grabbing the searcher easier than the more awkward
  RefCounted API.  (David Smiley)

* SOLR-12183: Refactor Streaming Expression test cases (Joel Bernstein)

* SOLR-12437: Document 'bin/solr config' in the ref guide. (Steve Rowe)

* SOLR-12435: Fix bin/solr help and ref guide text to describe ZK_HOST in solr.in.sh/solr.in.cmd
  as an alternative to -z cmdline param. (Steve Rowe)

* SOLR-12428: Solr LTR jar now included in _default configset's solrconfig.xml (Ishan Chattopadhyaya)

==================  7.3.1 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.17
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.11
Jetty 9.4.8.v20171121

Bug Fixes
----------------------

* SOLR-12204: Upgrade commons-fileupload dependency to 1.3.3 to address CVE-2016-1000031.  (Steve Rowe)

* SOLR-12256: Fixed some eventual-consistency issues with collection aliases by using ZooKeeper.sync(). (David Smiley)

* SOLR-12087: Deleting replicas sometimes fails and causes the replicas to exist in the down
  state (Cao Manh Dat)

* SOLR-12146: LIR should skip deleted replicas (Cao Manh Dat)

* SOLR-12066: Cleanup deleted core when node start (Cao Manh Dat)

* SOLR-12065: A successful restore collection should mark the shard state as active and not buffering
  (Rohit, Varun Thacker)

* SOLR-11724: Cdcr bootstrapping should ensure that non-leader replicas should sync with the leader
  (Amrit Sarkar, Varun Thacker)

* SOLR-12202: Fix errors in solr-exporter.cmd. (Minoru Osuka via koji)

* SOLR-12316: Do not allow to use absolute URIs for including other files in solrconfig.xml
  and schema parsing (CVE-2018-8010).  (Ananthesh, Ishan Chattopadhyaya, Uwe Schindler)

==================  7.3.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.16
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.11
Jetty 9.4.8.v20171121

Upgrade Notes
----------------------

* SOLR-11748: The throttling mechanism used to limit the rate of autoscaling events processed
  has been removed. This deprecates the 'actionThrottlePeriodSeconds' setting in the set-properties
  Autoscaling API which is now a no-op. Use the 'triggerCooldownPeriodSeconds' instead to pause event
  processing.

* SOLR-11798: The top-level <highlighting> syntax in solrconfig.xml is now formally
  deprecated in favour of <searchComponent> equivalent syntax. See also SOLR-1696.

* SOLR-11809: QueryComponent's rq parameter parsing no longer considers the defType parameter.

* SOLR-11747: The behaviour of the autoscaling system has been modified to pause all triggers from execution between
  the start of actions and end of cool down period. The triggers will be resumed after the cool down period expires.
  Previously, the cool down period was a fixed period started after actions for a trigger event complete and during
  this time, all triggers continued to run but any events were rejected to be tried later.

* SOLR-11624: Collections created without specifying a configset name use a copy of the _default configset since 7.0.
  Before 7.3, the copied over configset was named the same as the collection name, but 7.3 onwards it will be named
  with an additional ".AUTOCREATED" suffix.

* SOLR-11702: The old Leader-In-Recovery implementation (SOLR-5495) is now deprecated and replaced. Solr will support
  rolling upgrades from old 7.x versions of Solr to future 7.x releases until the last release of
  the 7.x major version. This means in order to upgrade to Solr 8 in the future, you must be on Solr 7.3 or higher.

* LUCENE-8161: If you are using the spatial JTS library with Solr, you must upgrade to 1.15.0.  This new version
  of JTS is now dual-licensed to include a BSD style license.

* SOLR-12051: A new mechanism is introduced in SOLR-11702 to maintain consistency in SolrCloud between leader and replicas.
  This mechanism lets Solr know whether a replica is in-sync with the leader or not, even when the leader is not live.
  If all the replicas who participate in the leader election are out-of-sync with previous leader, the election will
  pause until a timeout (named "leaderVoteWait") before allowing an out-of-sync replica to become leader. Note that the
  new leader still needs to contains more updates than any other active replicas in the same shard. Therefore by
  increasing leaderVoteWait will increase the consistency (over availability) of the system. The default value of
  leaderVoteWait is 180,000 ms (3 minutes) and it can be adjusted in the "solrcloud" section of the solr.xml

* SOLR-11957: The default Solr log file size and number of backups is raised to 32MB and 10 respectively

* SOLR-12067: The default value of `autoReplicaFailoverWaitAfterExpiration` has been increased to 120 seconds
  from the earlier default of 30 seconds. This affects how soon Solr adds new replicas to replace the replicas
  on nodes which have either crashed or shutdown.

New Features
----------------------

* SOLR-11285: Simulation framework for autoscaling. (ab)

* LUCENE-2899: In the Solr analysis-extras contrib, added support for the
  OpenNLP-based analysis components in the Lucene analysis/opennlp module:
  tokenization, part-of-speech tagging, phrase chunking, and lemmatization.
  Also added OpenNLP-based named entity extraction as a Solr update request
  processor.  (Lance Norskog, Grant Ingersoll, Joern Kottmann, Em, Kai Gülzau,
  Rene Nederhand, Robert Muir, Steven Bower, Steve Rowe)

* SOLR-11201: Implement autoscaling trigger for arbitrary metrics that creates events when
  a given metric breaches a threshold (shalin)

* SOLR-11653: TimeRoutedAlias URP now auto-creates new collections on the fly according to alias metadata
  rules that sets the time interval for each collection.  An internal Overseer command "ROUTEDALIAS_CREATECOLL"
  was created to facilitate this.  (David Smiley)

* SOLR-11062: new tag "diskType" in autoscaling policy (noble)

* SOLR-11063: Suggesters should accept required freedisk as a hint (noble)

* SOLR-3218: Added range faceting support for CurrencyFieldType.  This includes both "facet.range" as well
  as json.facet's "type:range" (Andrew Morrison, Jan Høydahl, Vitaliy Zhovtyuk, hossman)

* SOLR-11064: Collection APIs should use the disk space hint when using policy framework  (noble)

* SOLR-11854: multivalued primitive fields can now be sorted by implicitly choosing the min/max
  value for asc/desc sort orders. (hossman)

* SOLR-11592: Add OpenNLP language detection to the langid contrib. (Koji, Steve Rowe)

* SOLR-11648: A new admin UI to display and execute suggestions (Apoorv Bhawsar , noble)

* SOLR-11722: Added "time routed alias" creation support to the CREATEALIAS command.  It's for managing multiple
  collections partitioned by time. (Gus Heck, David Smiley)

* SOLR-11782: Refactor LatchWatcher.await to protect against spurious wakeup (Tomás Fernández Löbbe, David Smiley, Dawid Weiss)

* SOLR-11617: Alias properties (formerly "metadata") are now mutable via a new ALIASPROP command.
  These properties are returned from LISTALIASES. (Gus Heck via David Smiley)

* SOLR-11702: Redesign current LIR implementation (Cao Manh Dat, shalin)

* SOLR-11376: Support computing plans for only specific collections. (ab)

* SOLR-11681: Add ttest and pairedTtest Stream Evaluators (Joel Bernstein)

* SOLR-11785: Add multiVariateNormalDistribution Stream Evaluator (Joel Bernstein)

* SOLR-11789: Add integrate Stream Evaluator to support integral calculations (Joel Bernstein)

* SOLR-11791: Add density Stream Evaluator (Joel Bernstein)

* SOLR-11172: Add Mann-Whitney U test Stream Evaluator (Mathew Skaria, Joel Bernstein)

* SOLR-11808: Add sumSq Stream Evaluator (Joel Bernstein)

* SOLR-11430: Add lerp and akima Stream Evaluators to support linear and akima spline interpolation (Joel Bernstein)

* SOLR-11683: Add chiSquareDataSet Stream Evaluator (Joel Bernstein)

* SOLR-10716: Add termVectors Stream Evaluator (Joel Bernstein)

* SOLR-11737: Add kmeans Stream Evaluator to support kmeans clustering (Joel Bernstein)

* SOLR-11736: Rename knn Streaming Expression to knnSearch and add new knn Stream Evaluator (Joel Bernstein)

* SOLR-11867: Add indexOf, rowCount and columnCount StreamEvaluators (Joel Bernstein)

* SOLR-11862: Add fuzzyKmeans Stream Evaluatory (Joel Bernstein)

* SOLR-11890: Add multiKmeans Stream Evaluator (Joel Bernstein)

* SOLR-11916: new SortableTextField which supports analysis/searching just like TextField, but also
  sorting/faceting just like StrField.  By default uses only the first 1024 chars of the original
  input string values, but this is configurable.  (hossman)

* SOLR-11778: Add per-stage RequestHandler metrics. (ab)

* SOLR-11925: Time Routed Aliases can have their oldest collections automatically deleted via the "router.autoDeleteAge"
  setting. (David Smiley)

* SOLR-11941: Add abstract contrib/ltr AdapterModel to facilitate the development of scoring models that delegate
  scoring to an opaque pre-trained model. (Christine Poerschke)

* SOLR-11689: Add l1norm, l2norm and linfnorm Stream Evaluators (Joel Bernstein)

* SOLR-11588: Add matrixMult Stream Evaluator to support matrix multiplication (Joel Bernstein)

* SOLR-12006: Add a '*_t' and '*_t_sort' dynamic field for single valued text fields (Varun Thacker)

* SOLR-11597: Add contrib/ltr NeuralNetworkModel class. (Michael A. Alcorn, Yuki Yano, Christine Poerschke)

* SOLR-11066: Implement a scheduled autoscaling trigger that runs on a fixed interval beginning with a
  given start time. (David Smiley, Gus Heck, ab, shalin)

* SOLR-11795: Add Solr metrics exporter for Prometheus (Minoru Osuka via koji)

* SOLR-11267: Add support for "add-distinct" atomic update operation (Amrit Sarkar via noble )

* SOLR-11960: Add collection level properties similar to cluster properties (Peter Rusko, Tomás Fernández Löbbe)

* SOLR-12077: Add support for autoAddReplicas in the collection creation dialog in Admin UI. (shalin)

* SOLR-9510: introducing {!filters param=$fq excludeTags=f} query parser.
  Introducing {!.. filters=$fq excludeTags=t,q} in {!parent} and {!child} (Dr. Oleg Savrasov via Mikhail Khludnev)

Bug Fixes
----------------------

* SOLR-11783: Rename core in solr standalone mode is not persisted (Erick Erickson)

* SOLR-11555: If the query terms reduce to nothing, filter(clause) produces an NPE whereas
  fq=clause does not (Erick Erickson)

* SOLR-11824: Fixed bucket ordering in distributed json.facet type:range when mincount>0 (hossman)

* SOLR-11821: ConcurrentModificationException in SimSolrCloudTestCase.tearDown (shalin)

* SOLR-11631: The Schema API should return non-zero status when there are failures.
  (Noble Paul, Steve Rowe)

* SOLR-11839: Fix test failures resulting from SOLR-11218 (Erick Erickson)

* SOLR-11794: PULL replicas stop replicating after collection RELOAD (Samuel Tatipamula, Tomás Fernández Löbbe)

* SOLR-11714: AddReplicaSuggester  / ComputePlanAction infinite loop. (ab)

* SOLR-11895: Logging Screen in the Admin UI will now show "No Events available" when there are no events to show.
  Also, the spinner icon is removed to prevent users thinking the page has hung. (Cassandra Targett, Shawn Heisey)

* SOLR-10525: Stacked recovery requests do no cancel an in progress recovery first. (Mike Drob via Cao Manh Dat)

* SOLR-11873: Use time based expiration cache in all necessary places in HdfsDirectoryFactory. (Mihaly Toth via Mark Miller)

* SOLR-11661: New HDFS collection reuses unremoved data from a deleted HDFS collection with same name causes
  inconsistent view of documents (Cao Manh Dat, shalin)

* SOLR-11459: In-place update of nonexistent doc following existing doc update fails to create the doc.
  (Andrey Kudryavtsev via Mikhail Khludnev)

* SOLR-11931: Fix contrib/ltr custom inner class feature/normaliser/model persistence. (Christine Poerschke)

* SOLR-10261: In case of in-place updates, failure in leader to follower replica update request now throws the
  follower replica in leader-initiated-recovery (Ishan Chattopadhyaya, Steve Rowe)

* SOLR-11898: ConcurrentModificationException when calling org.apache.solr.core.SolrInfoBean.getMetricsSnapshot
  (Jeff Miller via Erick Erickson)

* SOLR-11950: Allow CLUSTERSTATUS "shard" parameter to accept comma (,) delimited list (Chris Ulicny via Jason Gerlowski)

* SOLR-11739: Fix race condition that made Solr accept duplicate async IDs in collection API operations (Tomás Fernánadez Löbbe)

* SOLR-11988: Fix exists() method in EphemeralDirectoryFactory/MockDirectoryFactory to prevent false positives (hossman)

* SOLR-11971: Don't allow referal to external resources in DataImportHandler's dataConfig request parameter (CVE-2018-1308).
  (麦 香浓郁, Uwe Schindler)

* SOLR-12021: Fixed a bug in ApiSpec and other JSON resource loading that was causing unclosed file handles (hossman)

* SOLR-10720: Aggressive removal of a collection breaks cluster status API. (Alexey Serba, shalin)

* SOLR-12050: UTILIZENODE does not enforce policy rules (hossman, noble)

* SOLR-11843: Admin UI collection creation was not properly handling the router.field and router.name parameters.
  Also changed the display label in the Admin UI from routerField to router.field to match the actual API.
  (Shawn Heisey via Cassandra Targett)

* SOLR-12011: Consistence problem when in-sync replicas are DOWN. (Cao Manh Dat)

* SOLR-12020: JSON Facet API: terms facet on date field fails in refinement phase with
  "Invalid Date String" error. (yonik)

* SOLR-12061: Fix substitution bug in API V1 to V2 migration when using SolrJ with V2 API. (Tomás Fernánadez Löbbe)

* SOLR-11976: TokenizerChain.normalize: only the first filter that is a MultiTermAwareComponent was participating
  in normalization instead of all.  This bug normally doesn't matter since TextField doesn't call it.
  (Tim Allison via David Smiley)

* SOLR-12072: Invalid path string using ZkConfigManager.copyConfigDir(String fromConfig, String toConfig)
  (Alessandro Hoss via Erick Erickson)

* SOLR-12064: JSON Facet API: fix bug where a limit of -1 in conjunction with multiple facets or
  missing=true caused an NPE or AIOOBE. (Karthik Ramachandran via yonik)

* SOLR-12083: Fix RealTime GET to work on a cluster running CDCR when using Solr's in-place updates
  (Amrit Sarkar, Varun Thacker)

* SOLR-12063: Fix PeerSync, Leader Election failures and CDCR checkpoint inconsistencies on a cluster running CDCR
  (Amrit Sarkar, Varun Thacker)

* SOLR-12110: Replica which failed to register in Zk can become leader (Cao Manh Dat)

* SOLR-12129: After the core is reloaded, term of the core will not be watched (Cao Manh Dat)

* SOLR-12141: Fix "bin/solr" shell scripts (Windows/Linux/Mac) to correctly detect major Java version
  and use numerical version comparison to enforce minimum requirements. Also remove obsolete "UseParNewGC" option.
  This allows to start Solr with Java 10 or later. (Uwe Schindler)

Optimizations
----------------------

* SOLR-11711: Fixed distributed processing of facet.field/facet.pivot sub requests to prevent requesting
  unneccessary and excessive '0' count terms from each shard (Houston Putman via hossman)

* LUCENE-8149: NRTCachingDirectory does not need to preemptively delete segment files and generate exceptions
  (Erick Erickson)

* SOLR-11879: avoid EOFException for empty input streams (noble)

* SOLR-8327: Cluster state caching to avoid live fetch from ZK of cluster state for forwarding requests on nodes
  that do not host any replica of the collection (Jessica Cheng Mallet, John Gallagher, Noble Paul, Ishan Chattopadhyaya)

* SOLR-11769: Optimize when useFilterForSortedQuery=true and there are no filter queries by avoiding
  needless match-all-docs bitset construction. (Betim Deva, David Smiley)

Other Changes
----------------------

* SOLR-11629: Add more intuitive CloudSolrClient.Builder constructors (Varun Thacker, Jason Gerlowski)

* SOLR-11575: Improve ref-guide solrj snippets via mock 'print()' method (Jason Gerlowski via hossman)

* SOLR-11757: In tests, fix race condition on SolrException.ignoreException.
  Also ensure we register "ignore_exception" in @BeforeClass (previously only @AfterClass)  (David Smiley)

* SOLR-11754: Remove AbstractSolrTestCase which has long been supplanted by SolrTestCaseJ4. (David Smiley)

* SOLR-11701: Upgrade to Tika 1.17 when available (Tim Allison, Karthik Ramachandran via Erick Erickson)

* SOLR-11703: Solr Should Send Log Notifications if Ulimits are too low (Kevin Cowan via Erick Eickson)

* SOLR-11793: Reduce code duplication w.r.t. RestTestHarness(es). (Christine Poerschke)

* SOLR-7733: remove "optimize" from the UI. (Erick Erickson)

* SOLR-11748: Remove Autoscaling action throttle. (shalin)

* SOLR-11805: SolrJ's SolrResponse.getElaspedTime was sometimes a millisecond off. (David Smiley)

* SOLR-11798: Formally deprecate top-level <highlighting> syntax in solrconfig.xml
  in favour of <searchComponent> equivalent syntax. (Christine Poerschke)

* SOLR-11801: Support customisation of the "highlighting" query response element.
  (Ramsey Haddad, Pranav Murugappan, David Smiley, Christine Poerschke)

* SOLR-11692: SolrDispatchFilter's use of a "close shield" in tests should not be applied to
  further servlet chain processing.  (Jeff Miller, David Smiley)

* SOLR-11218: Fail and return an error when attempting to delete a collection that's part of an alias (Erick Erickson)

* SOLR-11817: Move Collections API classes to it's own package (Varun Thacker)

* SOLR-11810: Upgrade Jetty to 9.4.8.v20171121 (Varun Thacker, Erick Erickson)

* SOLR-11747: Pause triggers until actions finish executing and the cool down period expires. (shalin)

* SOLR-11871: MoveReplicaSuggester should not suggest leader if other replicas are available (noble)

* SOLR-11624: Collections created from _default configset will now be associated with a configset with a suffix
  .AUTOCREATED. For example, a new collection "mycollection", created without specifying a configset name, will
  use the _default configset and the associated configset name will be "mycollection.AUTOCREATED". If this
  collection is deleted and re-created, the autocreated configset will be left behind and will be re-used for
  the re-created collection (Ishan Chattopadhyaya, Abhishek Kumar Singh)

* SOLR-11051: Use disk free metric in default cluster preferences (noble)

* SOLR-11658: Upgrade ZooKeeper dependency to 3.4.11 (Jason Gerlowski, Steve Rowe, Erick Erickson)

* SOLR-11480: Remove unused "Admin Extra" files and mentions. (Eric Pugh, Christine Poerschke)

* SOLR-11067: REPLACENODE should identify appropriate nodes if targetNode is not provided (noble)

* SOLR-11848: Update Ref Guide to include info on grouping operations and using curl for large files. (Dariusz Wojtas
  via Cassandra Targett)

* SOLR-11613: Make message for missing dataimport config in UI more explicit. (Shawn Heisey, Amrit Sarkar via
  Cassandra Targett)

* SOLR-11933: Make DIH UI page safer by not default checking the clean checkbox (Eric Pugh via Tomás Fernández Löbbe)

* SOLR-11349: Rename ResponseBuilder's getQueryCommand to createQueryCommand. (Christine Poerschke)

* SOLR-11902: Clarify in bin/solr help text whether commands can be run remotely (Jason Gerlowski)

* SOLR-3089: RequestBuilder now exposes isDistrib() method. Using this, plugins can know whether a request is
  distributed. (Rok Rejc, Frank Wesemann, Abhishek Kumar Singh, Mikhail Khludnev via Ishan Chattopadhyaya)

* SOLR-8090: Make text elements in the UI darker for better contrast and readability (Cassandra Targett)

* SOLR-6057: Change highlight color in UI Analysis screen (Cassandra Targett)

* SOLR-11897: Add toggle to disable auto-refresh of Logging page in the UI (Tommy Marshment-Howell via
  Cassandra Targett)

* SOLR-12017: Remove BadApple and AwaitsFix annotations that link to closed JIRAs (Erick Erickson)

* SOLR-12027: Increase thread lingering timeout to 80s. (Mikhail Khludnev)

* SOLR-10809: Get precommit lint warnings out of Solr core (Erick Erickson)

* SOLR-12028: BadApple and AwaitsFix annotations usage (Erick Erickson, Uwe Schindler)

* SOLR-12031: Refactor Policy framework to make simulated changes affect more than a single node (noble)

* SOLR-11957: Increase MaxFileSize=32MB and MaxBackupIndex=10 for RollingFileAppender in log4j.properties
  (Varun Thacker, shalin)

* SOLR-12047: Increase checkStateInZk timeout (Cao Manh Dat, Varun Thacker)

* SOLR-12051: Election timeout when no replicas are qualified to become leader (Cao Manh Dat)

* 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
  due to using stale http connections. (Gus Heck, shalin)

* SOLR-12099: Remove reopenReaders attribute from 'IndexConfig in SolrConfig' page in ref guide. (shalin)

* SOLR-12098: Document the Lucene spins auto-detection and its effect on CMS dynamic defaults.
  (Cassandra Targett, shalin)

* SOLR-12097: Document the diskType policy attribute and usage of disk space in Collection APIs.
  (Cassandra Targett, shalin)

==================  7.2.1 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.16
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.10
Jetty 9.3.20.v20170531

Bug Fixes
----------------------

* SOLR-11771: Overseer can never process some last messages (Cao Manh Dat)

* SOLR-11783: Rename core in solr standalone mode is not persisted (Erick Erickson)

* SOLR-11809: QueryComponent.prepare rq parsing could fail under SOLR 7.2.0 - fix:
  QueryComponent's rq parameter parsing no longer considers the defType parameter.
  (Christine Poerschke and David Smiley in response to bug report/analysis
  from Dariusz Wojtas and Diego Ceccarelli)

* SOLR-11555: If the query terms reduce to nothing, filter(clause) produces an NPE whereas
  fq=clause does not (Erick Erickson)

==================  7.2.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.16
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.10
Jetty 9.3.20.v20170531

Upgrade Notes
----------------------

* SOLR-11501: Starting a query string with local-params {!myparser ...} is used to switch the query parser to another,
  and is intended for use by Solr system developers, not end users doing searches.  To reduce negative side-effects of
  unintended hack-ability, we've limited the cases that local-params will be parsed to only contexts in which the
  default parser is "lucene" or "func".
  So if defType=edismax then q={!myparser ...} won't work.  In that example, put the desired query parser into defType.
  Another example is if deftype=edismax then hl.q={!myparser ...} won't work for the same reason.  In that example,
  either put the desired query parser into hl.qparser or set hl.qparser=lucene.  Most users won't run into these cases
  but some will and must change.
  If you must have full backwards compatibility, use luceneMatchVersion=7.1.0 or something earlier. (David Smiley)

* SOLR-11501: The edismax parser by default no longer allows subqueries that specify a Solr parser using either
  local-params, or the older _query_ magic field trick.  For example
  {!prefix f=myfield v=enterp}  or  _query_:"{!prefix f=myfield v=enterp}"   are not supported by default anymore.
  If you want to allow power-users to do this, set uf=* _query_ or some other value that includes _query_.
  If you must have full backwards compatibility, use luceneMatchVersion=7.1.0 or something earlier. (David Smiley)

New Features
----------------------
* SOLR-11448: Implement an option in collection commands to wait for final results. (ab)

* SOLR-11072: Implement trigger for searchRate event type. (ab)

* SOLR-11524: A new autoscaling/suggestions API end-point which gives autoscaling suggestions (noble)

* SOLR-11519: Implement autoscaling suggestions for replica count violations (noble)

* SOLR-11518: Implement autoscaling Suggestions for freedisk violations (noble)

* SOLR-10132: A new optional facet.matches parameter to return facet buckets only
  for terms that match a regular expression. (Gus Heck, Christine Poerschke)

* SOLR-11520: Implement autoscaling suggestions for cores count violations (noble)

* SOLR-11438: Solr should return rf when min_rf is specified for deletes as well as adds (Erick Erickson)

* SOLR-11003: Support bi-directional syncing of cdcr clusters. We still only support active indexing in one cluster,
  but have the ability to switch indexing clusters and cdcr will replicate correctly. (Amrit Sarkar, Varun Thacker)

* SOLR-11538: Implement suggestions for port,ip_*, nodeRole,sysprop.*, metrics:* (noble)

* SOLR-11487: Collection Aliases may now have metadata (currently an internal feature).
  (Gus Heck, David Smiley)

* SOLR-11542: New TimeRoutedAliasUpdateProcessor URP that routes documents to another collection
  in the same Alias defined set based on a time field (currently an internal feature).
  (David Smiley)

* SOLR-9743: A new UTILIZENODE command (noble)

* SOLR-11202: Implement a set-property command for AutoScaling API. (ab, shalin)

* SOLR-11250: A new DefaultWrapperModel class for loading of large and/or externally stored
  LTRScoringModel definitions. (Yuki Yano, shalin, Christine Poerschke)

* SOLR-11662: New synonymQueryStyle option to configure whether SynonymQuery, a DisjunctionMaxQuery, or BooleanQuery
  occurs over query terms that overlap their position. (Doug Turnbull, David Smiley)

* SOLR-11429: Add loess Stream Evaluator to support local regression (Joel Bernstein)

* SOLR-11568: Add matrix Stream Evaluator to support efficient matrix operations (Joel Bernstein)

* SOLR-11566: Add transpose Stream Evaluator to support transposing of matrices (Joel Bernstein)

* SOLR-11565: Add unit Stream Evaluator to support unitizing of vectors (Joel Bernstein)

* SOLR-11567: Add triangularDistribution Stream Evaluator (Joel Bernstein)

* SOLR-11593: Add support for covariance matrices to the cov Stream Evaluator (Joel Bernstein)

* SOLR-10680: Add minMaxScale Stream Evaluator (Joel Bernstein)

* SOLR-11599: Change normalize function to standardize and make it work with matrices (Joel Bernstein)

* SOLR-11602: Add Markov Chain Stream Evaluator (Joel Bernstein)

* SOLR-11607: Add grandSum, sumRows, sumColumns, scalarDivide, scalarMultiply, scalarAdd,
  scalarSubtract Stream Evaluators (Joel Bernstein)

* SOLR-11571: Add diff Stream Evaluator to support time series differencing (Mathew Skaria, Joel Bernstein)

* SOLR-11570: Add support for correlation matrices to the corr Stream Evaluator (Joel Bernstein)

* SOLR-11569: Add support for distance matrices to the distance Stream Evaluator (Joel Bernstein)

* SOLR-11674: Support ranges in the probability Stream Evaluator (Joel Bernstein)

* SOLR-11680: Add normalizeSum Stream Evaluator (Joel Bernstein)

* SOLR-11697: Add geometricDistribution Stream Evaluator (Joel Bernstein)

* SOLR-11485: Add olsRegress, spline and derivative Stream Evaluators (Joel Bernstein)

Bug Fixes
----------------------

* SOLR-11423: Overseer queue needs a hard cap (maximum size) that clients respect (Scott Blum, Joshua Humphries, Noble Paul)

* SOLR-11445: Overseer should not hang when process bad message. (Cao Manh Dat, shalin)

* SOLR-11447: ZkStateWriter should process commands in atomic. (Cao Manh Dat, shalin)

* SOLR-11491: Support retrieval of cluster properties in HttpClusterStateProvider. (ab)

* SOLR-11146: Small fixes to the mapping functions in the Analytics Component (Houston Putman)

* SOLR-11326: A bootstrap of a target cluster does not need to download the tlog files from the source cluster
  (Amrit Sarkar, Varun Thacker)

* SOLR-10874: Fix AIOOBE caused by FloatPayloadValueSource calling PostingsEnum.nextPosition()
  more than the given term's frequency in overridden FloatDocValues.floatVal().
  (Michael Kosten, Erik Hatcher, Steve Rowe)

* SOLR-11484: CloudSolrClient does not invalidate cache or retry for RouteException (noble, hossman)

* SOLR-11532: Solr hits NPE when fl only contains DV fields and any of them is a spatial field. (Cao Manh Dat, David Smiley)

* SOLR-11557: Fix SolrZkClient.checkInterrupted (Tomás Fernández Löbbe)

* SOLR-11413: SolrGraphiteReporter fails to report metrics due to non-thread safe code. (Erik Persson, ab)

* SOLR-9440: The ZkStateReader.removeCollectionStateWatcher method can cache a DocCollection reference and
  never update it causing stale state to be returned in ClusterState. (shalin)

* SOLR-11560: Specifying the replicationFactor parameter while restoring a collection would lead to extra tlog
  and pull replicas being created (Peter Szantai-Kis, Varun Thacker)

* SOLR-11586: Restored collection should use stateFormat=2 instead of 1. (Varun Thacker)

* SOLR-11503: Collections created with legacyCloud=true cannot be opened if legacyCloud=false (Erick Erickson)

* SOLR-11619: V2 requests that needed to be forwarded to other nodes would get an NPE. (David Smiley)

* SOLR-11231: Guard against unset fields when performing language detection.
  (Chris Beer via Steve Rowe)

* SOLR-11553: JSON Facet API: facet refinement could use UIF in phase one and DV uninversion in phase 2, resulting
  in too much memory use. (yonik)

* SOLR-11645: When the java commandline had exact duplicate arguments, the
  admin UI dashboard would not display any commandline arguments.
  (Webster Homer via Shawn Heisey)

* SOLR-11608: Correctly parse the new core-name in the V2 core rename API.
  (Jason Gerlowski via Anshum Gupta)

* SOLR-11256: The queue size for ConcurrentUpdateSolrClient should default to 10 instead of throwing an
  IllegalArgumentException. (Jason Gerlowski, Anshum Gupta)

* SOLR-11616: Snapshot the segments more robustly such that segments created during a backup does does not fail the
  operation (Varun Thacker)

* SOLR-11687: SolrCore.getNewIndexDir falsely returns {dataDir}/index on any IOException reading index.properties
  (Nikolay Martynov, Erick Erickson)

* SOLR-9137: bin/solr script ignored custom STOP_PORT on shutdown.
  (Joachim Kohlhammer, Steve Rowe, Christine Poerschke)

* SOLR-11458: Improve error handling in MoveReplicaCmd to avoid potential loss of data. (ab)

* SOLR-11590: Synchronize ZK connect/disconnect handling so that they are processed in linear order
  (noble, Varun Thacker)

* SOLR-11664: JSON Facet API: range facets containing unique, hll, min, max aggregations over string fields
  produced incorrect results since 7.0 (Volodymyr Rudniev, yonik)

* SOLR-11691: V2 requests for create-alias didn't work when the collections param was an array.
  (Jason Gerlowski, Gus Heck, David Smiley, noble)

Optimizations
----------------------
* SOLR-11285: Refactor autoscaling framework to avoid direct references to Zookeeper and Solr
  to make testing and large scale simulations easier. (ab)

* SOLR-11443: Remove the usage of workqueue for Overseer. (Cao Manh Dat, Scott Blum)

* SOLR-11320: Lock autoscaling triggers when changes they requested are being made. This helps to
  ensure that cluster is in a stable state before processing any new trigger events. (ab)

* SOLR-11641: Change `frange` to default to `cost=100` so default behavior is to PostFilter if user specifies
  `cache=false` (hossman)

* SOLR-11595: SolrIndexSearcher.localCollectionStatistics is now faster by leveraging an existing
  cached MultiFields.  Noticeable when many fields are searched.  (David Smiley)

Other Changes
----------------------
* SOLR-11478: Solr should remove itself from live_nodes in zk immediately on shutdown. (Cao Manh Dat)

* SOLR-11145: Adds comprehensive unit tests for the Analytics Component v2 (Houston Putman)

* SOLR-11389: For Solr(Shard|Cluster)Reporter instances the SolrMetricManager.registerReporter
  method is now called after the SolrCore or CoreContainer has been set for the instance.
  (Christine Poerschke)

* SOLR-11464, SOLR-11493, SOLR-11511: Minor refactorings to DistributedUpdateProcessor. (Gus Heck, David Smiley)

* SOLR-11444: Improved consistency of collection alias handling, and collection references that are
  comma delimited lists of collections, across the various places collections can be referred to.
  Updates are delivered to the first in a list.  It's now possible to refer to a comma delimited list
  of them in the path, ex: /solr/colA,colB/select?... (David Smiley)

* SOLR-11165: Ref guide documentation for Autoscaling APIs, triggers, listeners, actions for Solr 7.1
  (ab, Cassandra Targett, Noble Paul, shalin)

* SOLR-11562: Restore Solr logo ASCII-art in startup log by removing unnecessary default confdir logging (janhoy)

* SOLR-11380: SolrJ must stream docs to server instead of writing to a buffer first (noble)

* SOLR-11603: Remove unused (public) LTRScoringModel.hasParams() method. (Christine Poerschke)

* SOLR-11606: Disable tests automatically if Mockito does not work with Java runtime (Java 10).
  (Uwe Schindler)

* SOLR-11618: Tone down verbosity of BackupManager logging (Varun Thacker)

* SOLR-11621: Fix spurious failures of TriggerIntegrationTest due to timing issues. (shalin)

* SOLR-11628: Add documentation of maxRamMB for filter cache and query result cache. (shalin)

* SOLR-11610: Refactored payload handling to use lucene's PayloadDecoder
  framework (Alan Woodward)

* SOLR-9120: Reduce log level for inconsequential NoSuchFileException that LukeRequestHandler may encounter (hossman)

* SOLR-10469: Move CloudSolrClient.setParallelUpdates to its Builder. (David Smiley)

* SOLR-11507: SOLR-11638: Randomize SolrTestCaseJ4.CloudSolrClientBuilder more, and simplify it.
  (Jason Gerlowski, David Smiley)

* SOLR-11291: Factor out abstract metrics/SolrCore[Container]Reporter classes.
  (Omar Abdelnabi, Christine Poerschke)

* SOLR-11713: Fixed CdcrUpdateLogTest.testSubReader() failure which was a test bug (Varun Thacker, Amrit Sarkar)

==================  7.1.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.16
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.10
Jetty 9.3.20.v20170531

Detailed Change List
----------------------

Upgrade Notes
----------------------

* 'autoAddReplicas' feature is ported to autoscaling framework. Existing users of this feature should not have
  to change anything. Note these changes:
  1. Behaviour: Changing the autoAddReplicas property from disabled to enabled using MODIFYCOLLECTION API
  no longer replaces down replicas for the collection immediately. Instead, replicas are only added
  if a node containing them went down while autoAddReplicas was enabled. The params
  autoReplicaFailoverBadNodeExpiration and autoReplicaFailoverWorkLoopDelay are no longer used.
  2. Deprecations: Enabling/disabling autoAddReplicas cluster wide with the API will be deprecated; use
  suspend/resume trigger APIs with name='.auto_add_replicas' instead.

* SOLR-11195: shard and cluster metric reporter configuration now requires a class attribute.
  If a reporter configures the group="shard" attribute then please also configure the
  class="org.apache.solr.metrics.reporters.solr.SolrShardReporter" attribute.
  If a reporter configures the group="cluster" attribute then please also configure the
  class="org.apache.solr.metrics.reporters.solr.SolrClusterReporter" attribute.

* SOLR-11254: the abstract DocTransformer class now has an abstract score-less transform method variant.

* SOLR-11283: all Stream Evaluators in solrj.io.eval have been refactored to have a simplier and more
  robust structure. This simplifies and condenses the code required to implement a new Evaluator and
  makes it much easier for evaluators to handle differing data types (primitives, objects, arrays,
  lists, and so forth). (Dennis Gove)

* SOLR-10962: in the ReplicationHandler the master.commitReserveDuration sub-element is deprecated. Instead
  please configure a direct commitReserveDuration element for use in all modes (master, slave, cloud).

* SOLR-11482: RunExecutableListener was removed for security reasons. If you want to listen to
  events caused by updates, commits, or optimize, write your own listener as native Java class
  as part of a Solr plugin.

* SOLR-11477: in the XML query parser (defType=xmlparser or {!xmlparser ... })
  the resolving of external entities is now disallowed by default.

New Features
----------------------
* SOLR-10339: New set-trigger and remove-trigger APIs for autoscaling. (shalin)

* SOLR-10340: New set-listener and remove-listener API for autoscaling. (shalin)

* SOLR-10358: New suspend-trigger and resume-trigger APIs for autoscaling. (shalin)

* SOLR-10376: Implement autoscaling trigger for nodeAdded event. (shalin)

* SOLR-10396: Implement trigger support for nodeLost event type (Cao Manh Dat, shalin)

* SOLR-10496: New ComputePlanAction for autoscaling which uses the policy framework to compute cluster
  operations upon a trigger fire. (Noble Paul, shalin)

* SOLR-10965: New ExecutePlanAction for autoscaling which executes the operations computed by ComputePlanAction
  against the cluster. (shalin)

* SOLR-11019: Add addAll Stream Evaluator (Joel Bernstein)

* SOLR-10996: Implement TriggerListener API (ab, shalin)

* SOLR-11046: Add residuals Stream Evaluator (Joel Bernstein)

* SOLR-10858: Make UUIDUpdateProcessorFactory as Runtime URP (Amit Sarkar, noble)

* SOLR-11031: Implement SystemLogListener for autoscaling (ab)

* SOLR-11205: Any metrics value can be directly accessed in autoscaling policies (noble)

* SOLR-11199: Payloads supports an "operator" param. Supported operators are 'or', "phrase" ( default ).
  A new "sum" function is also added. Example :
  {!payload_score f=payload_field func=sum operator=or}A B C" (Varun Thacker)

* SOLR-11215: Make a metric accessible through a single param. (ab)

* SOLR-11244: Query DSL for Solr (Cao Manh Dat)

* SOLR-11317: JSON Facet API: min/max aggregations on numeric fields are now typed better so int/long
  fields return an appropriate integral type rather than a double. (yonik)

* SOLR-11316: JSON Facet API: min/max aggregations are now supported on single-valued date fields.
  (yonik)

* SOLR-10962: Make ReplicationHandler's commitReserveDuration configurable in SolrCloud mode.
  (Ramsey Haddad, Christine Poerschke, hossman)

* SOLR-11382: Lucene's Geo3D (surface of sphere & ellipsoid) is now supported on spatial RPT fields by
  setting spatialContextFactory="Geo3D".  Furthermore, this is the first time Solr has out of the box
  support for polygons. (David Smiley)

* SOLR-11160: Add normalDistribution, uniformDistribution, sample and kolmogorovSmirnov Stream Evaluators
  (Joel Bernstein)

* SOLR-11225: Add cumulativeProbability Stream Evaluator (Joel Bernstein)

* SOLR-11241: Add discrete counting and probability Stream Evaluators (Joel Bernstein)

* SOLR-11321: Add ebeAdd, ebeSubtract, ebeDivide, ebeMultiply, dotProduct and cosineSimilarity Stream Evaluators
  (Joel Bernstein)

* SOLR-11338: Add Kendall's Tau-b rank and Spearmans rank correlation Stream Evaluators (Joel Bernstein)

* SOLR-11339: Add Canberra, Chebyshev, Earth Movers and Manhattan Distance Stream Evaluators (Joel Bernstein)

* SOLR-11342: Add sumDifference and meanDifference Stream Evaluators (Joel Bernstein)

* SOLR-11350: Add primes Stream Evaluator (Joel Bernstein)

* SOLR-11354: Add factorial and movingMedian Stream Evaluators (Joel Bernstein)

* SOLR-11377: Add expMovingAverage (exponential moving average) and binomialCoefficient Stream Evaluators
  (Mathew Skaria, Joel Bernstein)

* SOLR-11388: Add monteCarlo Stream Evaluator to support Monte Carlo simulations (Joel Bernstein)

* SOLR-11398: Add weibullDistribution Stream Evaluator (Joel Bernstein)

* SOLR-11400: Add logNormalDistribution Stream Evaluator (Joel Bernstein)

* SOLR-11401: Add zipFDistribution Stream Evaluator (Joel Bernstein)

* SOLR-11414: Add gammaDistribution Stream Evaluator (Joel Bernstein)

* SOLR-11415: Add betaDistribution Stream Evaluator (Joel Bernstein)

* SOLR-11436: Add polyfit and polyfitDerivative Stream Evaluators (Joel Bernstein)

* SOLR-11439: Add harmonicFit Stream Evaluator (Joel Bernstein)

* SOLR-11076: New /autoscaling/history API to return past cluster events and actions. (ab)

Bug Fixes
----------------------

* SOLR-10602: Triggers should be able to restore state from old instances when taking over. (shalin)

* SOLR-10714: OverseerTriggerThread does not start triggers on overseer start until autoscaling
  config watcher is fired. (shalin)

* SOLR-10738: TriggerAction is initialised even if the trigger is never scheduled. (shalin)

* SOLR-10668: fix NPE at sort=childfield(..) .. on absent values (Mikhail Khludnev)

* SOLR-8984: EnumField's error reporting to now indicate the field name in failure log (Lanny Ripple,
  Ann Addicks via Ishan Chattopadhyaya)

* SOLR-11012: Fix three (JavaBinCodec not being closed) Resource Leak warnings. (Christine Poerschke)

* SOLR-11026: MoveReplicaSuggester must check if the target becomes more 'loaded' than the source
  if an operation is performed (noble)

* SOLR-10994: CREATE, CREATESHARD & ADDREPLICA to use policy framework & support replica types (noble)

* SOLR-11011: Assign.buildCoreName can lead to error in creating a new core when legacyCloud=false (Cao Manh Dat)

* SOLR-10944: Get expression fails to return EOF tuple (Susheel Kumar, Joel Bernstein)

* SOLR-6086: Replica is active during autowarming resulting in queries being sent to a replica that
  may not have a registered searcher. This causes spikes in response times when adding a replica
  in busy clusters. (Ludovic Boutros, Timothy Potter, shalin)

* SOLR-11190: GraphQuery also supports string fields which are indexed=false and docValues=true. Please refer to the
  Javadocs for DocValuesTermsQuery for it's performance characteristics. (Karthik Ramachandran, Varun Thacker)

* SOLR-11084: Issue with starting script with solr.home (-s) == solr (Leil Ireson, Amrit Sarkar via Erick Erickson)

* SOLR-11255: Fix occasional ConcurrentModificationException when using SolrInfoMBeanHandler. (ab)

* SOLR-11272: fix NPE when EmbeddedSolrServer handles /admin/* request and so one (Stephen Allen via Mikhail Khludnev)

* SOLR-11289: fix comma handling in terms component. (yonik)

* SOLR-11164, SOLR-11180, SOLR-11220: Fix NullPointerException and always-returns-zero
  contrib/ltr OriginalScoreFeature issues in SolrCloud mode.
  (Yuki Yano, Jonathan Gonzalez, Ryan Yacyshyn, Christine Poerschke)

* SOLR-11278: Stopping CDCR should cancel a running bootstrap operation. (Amrit Sarkar, shalin)

* SOLR-11293: Potential data loss in TLOG replicas when masterVersion equals zero (noble, Cao Manh Dat)

* SOLR-10101: TestLazyCores hangs (Erick Erickson)

* SOLR-11332: Fix sorting on 'enum' fieldTypes that use sortMissingFirst or sortMissingLast (hossman)

* SOLR-11348: Fix the DIH database example (James Dyer)

* SOLR-11363: JSON Facet API: repeated values in a numeric points field with docValues enabled
  were double counted. (Hossman, yonik)

* SOLR-11085: Improve resiliency of autoscaling actions against overseer restarts and operation failures. (shalin)

* SOLR-11297: Message "Lock held by this virtual machine" during startup.  Solr is trying to start some cores twice.
  (Luiz Armesto, Shawn Heisey, Erick Erickson)

* SOLR-11399: The UnifiedHighlighter was ignoring the hl.fragsize parameter when hl.bs.type=SEPARATOR
  (Marc Morissette via David Smiley)

* SOLR-11224: SolrStream.close can hit an NPE (Erick Erickson)

* SOLR-11278: Fix a race condition in the CDCR bootstrap process which could lead to bootstraps cancelling itself
  (Amrit Sarkar, shalin, Varun Thacker)

* SOLR-11425: SolrClientBuilder does not allow infinite timeout (value 0). (Peter Szantai-Kis via Mark Miller)

* SOLR-11449: MoveReplicaCmd mistakenly called registerCollectionStateWatcher on failure. (ab)

* SOLR-11477: Disallow resolving of external entities in the XML query parser (defType=xmlparser).
  (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)

* SOLR-12444: Updating a cluster policy fails (noble)

Optimizations
----------------------

* SOLR-10985: Remove unnecessary toString() calls in solr-core's search package's debug logging.
  (Michael Braun via Christine Poerschke)

* SOLR-11000: Changes made via AutoScalingHandler should be atomic. (ab, shalin)

* SOLR-11124: MoveReplicaCmd should skip deleting old replica in case of its node is not live (Cao Manh Dat)

* SOLR-10769: Allow nodeAdded / nodeLost events to report multiple nodes in one event. (ab)

* SOLR-11242: QueryParser: re-use the LookaheadSuccess exception. (Michael Braun via David Smiley)

* SOLR-11314: FastCharStream: re-use the READ_PAST_EOF exception. (Michael Braun via David Smiley)

* SOLR-8344: Decide default when requested fields are both column and row stored. (Cao Manh Dat, David Smiley)

* SOLR-10285: Skip LEADER messages when there are leader only shards (Cao Manh Dat, Joshua Humphries)

* SOLR-11424: When legacyCloud=false, cores should not publish itself as DOWN on startup. (Cao Manh Dat)

Other Changes
----------------------
* SOLR-10643: Throttling strategy for triggers and policy executions. (shalin)

* SOLR-10764: AutoScalingHandler should validate policy and preferences before updating zookeeper. (shalin)

* SOLR-10827: Factor out abstract FilteringSolrMetricReporter class. (Christine Poerschke)

* SOLR-10957: Changed SolrCoreParser.init to use the resource loader from getSchema()
  instead of the resource loader from getCore(). (Christine Poerschke)

* SOLR-10748: Make stream.body configurable and disabled by default (janhoy)

* SOLR-10964: Reduce SolrIndexSearcher casting in LTRRescorer. (Christine Poerschke)

* SOLR-11075: Refactor handling of params in CloudSolrStream and FacetStream (Erick Erickson)

* SOLR-11052: Remove unnecessary Long-to-Integer and back casts in ReplicationHandler.
  (Ramsey Haddad via Christine Poerschke)

* SOLR-11106: TestLBHttpSolrClient.testReliablity takes 30 seconds because of the wrong server name
  (Kensho Hirasawa via Erick Erickson)

* SOLR-10338: Configure SecureRandom non blocking for tests. (Mihaly Toth, hossman, Ishan Chattopadhyaya, via Mark Miller)

* SOLR-10916: Convert tests that extend LuceneTestCase and use MiniSolrCloudCluster
  to instead extend SolrCloudTestCase. (Steve Rowe)

* SOLR-11131: Document 'assert' as a command option in bin/solr, and bin/solr.cmd scripts.
  (Jason Gerlowski via Anshum Gupta)

* SOLR-11140: Remove unused parameter in (private) SolrMetricManager.prepareCloudPlugins method.
  (Omar Abdelnabi via Christine Poerschke)

* SOLR-11187: contrib/ltr TestModelManagerPersistence improvements. (Yuki Yano via Christine Poerschke)

* SOLR-10397: Port 'autoAddReplicas' feature to the autoscaling framework and make it work with non-shared filesystems
  (Cao Manh Dat, shalin)

* SOLR-11157: remove-policy must fail if a policy to be deleted is used by a collection (noble)

* SOLR-11090: Add Replica.getProperty accessor. (Christine Poerschke)

* SOLR-11061: Add a spins metric for data directory paths. (ab)

* SOLR-11071: Improve TestIntervalFacets.testRandom (Tomás Fernández Löbbe)

* SOLR-11195: Require class attribute for shard and cluster metric reporter configuration. (Christine Poerschke)

* SOLR:10822: Share a Policy.session object between multiple collection admin calls to get the correct computations (noble)

* SOLR-11249: Upgrade Jetty from 9.3.14.v20161028 to 9.3.20.v20170531 (Michael Braun via David Smiley)

* SOLR-11270: Automatically added SystemLogListener should not prevent deleting a trigger. (ab)

* SOLR-5129: Timeout property for waiting ZK get started. (Cao Manh Dat, Hrishikesh Gadre, Varun Thacker)

* SOLR-10628: Less verbose output from bin/solr commands. (Jason Gerlowski, janhoy)

* SOLR-11240: Raise UnInvertedField internal limit. (Toke Eskildsen)

* SOLR-11254: Add score-less (abstract) DocTransformer.transform method. (Christine Poerschke)

* SOLR-11209: Upgrade HttpClient to 4.5.3. (Hrishikesh Gadre via Mark Miller)

* SOLR-11322: JSON Facet API: instead of returning NaN, min & max aggregations omit
  the value for any bucket with no values in the numeric field. (yonik)

* SOLR-10990: Breakup QueryComponent.process method for readability. (Christine Poerschke)

* SOLR-11132: Refactor common getSortField logic in various FieldTypes (Jason Gerlowski, hossman)

* SOLR-11351: Make LTRScoringModel model more extensible. (Christine Poerschke)

* SOLR-10451: Remove contrib/ltr/lib from lib includes in the techproducts example config (sungjunyoung via janhoy)

* SOLR-11306: Fix inaccurate comments on docValues and StrField in the example schemas
  (Tom Burton-West, Jason Gerlowski, Varun Thacker)

* SOLR-11482: RunExecutableListener was removed for security reasons.  (Michael Stepankin,
  Olga Barinova, Uwe Schindler, Tomás Fernández Löbbe)

* SOLR-10335: Upgrade to Tika 1.16. (Tim Allison, Tomás Fernández Löbbe via shalin)

==================  7.0.1 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.10
Jetty 9.3.14.v20161028

Bug Fixes
----------------------

* SOLR-11297: Message "Lock held by this virtual machine" during startup.  Solr is trying to start some cores twice.
  (Luiz Armesto, Shawn Heisey, Erick Erickson)

* SOLR-11406: Solr 7.0 cannot read indexes from 6.x versions. (Shawn Heisey, Steve Rowe)

==================  7.0.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.10
Jetty 9.3.14.v20161028

Upgrading from Solr 6.x
----------------------

* All Trie* numeric and date field types have been deprecated in favor of *Point field types.
  Point field types are better at range queries (speed, memory, disk), however simple field:value queries underperform
  relative to Trie. Either accept this, or continue to use Trie fields.
  This shortcoming may be addressed in a future release.

* The default response type is now JSON ("wt=json") instead of XML, and line indentation is now on by default
  ("indent=on"). If you expect the responses to your queries to be returned in the previous format (XML
  format, no indentation), you must now you must now explicitly pass in "wt=xml" and "indent=off" as query
  parameters, or configure them as defaults on your request handlers.  See SOLR-10494 for more details.

* the cluster property 'legacyCloud' is set to false from 7.0. This means 'zookeeper is the truth' by
  default. If an entry for a replica does not exist in the state.json, that replica cannot get
  registered. This may affect users who use that feature where they bring up replicas and they are
  automatically registered as a part of a shard. However, it is possible to fall back to the old behavior by
  setting the property legacyCloud=true , in the cluster properties using the following command

  ./server/scripts/cloud-scripts/zkcli.sh -zkhost 127.0.0.1:2181  -cmd clusterprop -name legacyCloud -val true

* HttpClientInterceptorPlugin is now HttpClientBuilderPlugin and must work with a
  SolrHttpClientBuilder rather than an HttpClientConfigurer.

* HttpClientUtil now allows configuring HttpClient instances via SolrHttpClientBuilder
  rather than an HttpClientConfigurer. Use of env variable SOLR_AUTHENTICATION_CLIENT_CONFIGURER
  no longer works, please use SOLR_AUTHENTICATION_CLIENT_BUILDER

* SolrClient implementations now use their own internal configuration for socket timeouts,
  connect timeouts, and allowing redirects rather than what is set as the default when
  building the HttpClient instance. Use the appropriate setters on the SolrClient instance.

* HttpSolrClient#setAllowCompression has been removed and compression must be enabled as
  a constructor param.

* HttpSolrClient#setDefaultMaxConnectionsPerHost and
  HttpSolrClient#setMaxTotalConnections have been removed. These now default very
  high and can only be changed via param when creating an HttpClient instance.

* Query time join with scoring {!join score=none} (even none) doesn't handle single value numeric fields.
  Users are advised to convert these fields into string and reindex.

* Deprecated collection and configset methods on MiniSolrCloudCluster have been
  removed

* Index-time boosts are not supported anymore. If any boosts are provided, they
  will be ignored by the indexing chain. As a replacement, index-time scoring
  factors should be indexed in a separate field and combined with the query
  score using a function query.

* Deprecated method getNumericType() has been removed from FieldType. Use getNumberType() instead

* MBean names and attributes now follow hierarchical names used in metrics. This is reflected also in
  /admin/mbeans and /admin/plugins output, and can be observed in the UI Plugins tab, because now all these
  APIs get their data from the metrics API. The old (mostly flat) JMX view has been removed.

* <jmx> element in solrconfig.xml is no longer supported. Equivalent functionality can be configured in
  solr.xml using <metrics><reporter ...> element and SolrJmxReporter implementation. Limited back-compatibility
  is offered by automatically adding a default instance of SolrJmxReporter if it's missing, AND when a local
  MBean server is found (which can be activated either via ENABLE_REMOTE_JMX_OPTS in solr.in.sh or via system
  properties, eg. -Dcom.sun.management.jmxremote). This default instance exports all Solr metrics from all
  registries as hierarchical MBeans. This behavior can be also disabled by specifying a SolrJmxReporter
  configuration with a boolean init arg "enabled" set to "false". For a more fine-grained control users
  should explicitly specify at least one SolrJmxReporter configuration.

* The sow (split-on-whitespace) request param now defaults to false (true in previous versions).
  This affects the edismax and standard/"lucene" query parsers: if the sow param is not specified,
  query text will not be split on whitespace before analysis. See
  https://lucidworks.com/2017/04/18/multi-word-synonyms-solr-adds-query-time-support/ .

* Setting <solrQueryParser defaultOperator="..."/> in schema is no longer allowed and will cause an exception.
  Please use "q.op" parameter on the request instead. For more details, see SOLR-10584.

* Setting <defaultSearchField> in schema is no longer allowed and will cause an exception.
  Please use "df" parameter on the request instead. For more details, see SOLR-10585.

* The PostingsSolrHighlighter is deprecated. Furthermore, it now internally works via a re-configuration
  of the UnifiedSolrHighlighter.

* Deprecated LatLonType, GeoHashField, SpatialPointVectorFieldType, and SpatialTermQueryPrefixTreeFieldType.
  Instead, switch to LatLonPointSpatialField or SpatialRecursivePrefixTreeFieldType or RptWithGeometrySpatialField.

* The 'lucenePlusSort' QParser has been deprecated, and is no longer implicitly defined.  If you wish to continue using
  this QParser untill Solr 8, you must explicitly register it in your solrconfig.xml:
     '<queryParser name="lucenePlusSort" class="solr.OldLuceneQParserPlugin"/>'

* In solrconfig.xml the deprecated <mergePolicy> and <mergeFactor> and <maxMergeDocs> elements have
  been removed in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.

* Custom SolrMetricReporter classes must implement a new, factored out doInit() method and the validate() method
  must pass for all reporters including reporters that are not enabled, please see SOLR-10671 for details.

* TemplateUpdateRequestProcessorFactory uses {} instead of ${} for template

* SOLR-9565: The name of TemplateUpdateRequestProcessorFactory' is changed to 'template' from 'Template' and the
  name of 'AtomicUpdateProcessorFactory' is changed to 'atomic' from 'Atomic'

* The default for eDismax parameter 'lowercaseOperators' now depends on the luceneMatchVersion setting in solrconfig.
  It remains 'true' for luceneMatchVersion < 7.0.0 and changes to 'false' from 7.0.0. See also SOLR-4646

* The unused 'valType' option has been removed from ExternalFileField, if you have this in your schema you
  can safely remove it. see SOLR-10929 for more details.

* Config sets basic_configs and data_driven_schema_configs have now been merged into _default. It has data driven nature
  enabled by default, and can be turned off (after creating a collection) with:
     curl http://host:8983/solr/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
  Please see SOLR-10574 for details.

* The data driven config (now _default) for auto-creating fields earlier defaulted to "string" for text input.
  Now the default is to use "text_general" and to add a copyField to the schema, copying to a "*_str" dynamic field,
  with a cutoff at 256 characters. This enables full text search as well as faceting. See SOLR-9526 for more.

* SOLR-10123: The Analytics Component has been upgraded to support distributed collections, expressions over multivalued
  fields, a new JSON request language, and more. DocValues are now required for any field used in the analytics expression
  whereas previously docValues was not required. Please see SOLR-10123 for details.

* solrconfig.xml: <requestDispatcher handleSelect="..."> now defaults to false when luceneMatchVersion >= 7.0,
  thus ignoring "qt". Regardless, "qt" is still used as a SolrJ special parameter that specifies the request handler
  (tail URL path) to use.  If you have request handlers without a leading '/', you can set handleSelect="true"
  or better yet consider migrating.

* StandardRequestHandler is deprecated. Simply use SearchHandler instead.

* The parameter names 'fromNode' for MOVEREPLICA and 'source', 'target' for REPLACENODE have been deprecated and
  replaced with 'sourceNode' and 'targetNode' instead. The old names will continue to work for back-compatibility
  but they will be removed in 8.0. See SOLR-11068 for more details.

* All deperated methods of ClusterState (except getZkClusterStateVersion())
  have been removed. Use DocCollection methods instead.

* SOLR-11023: EnumField has been deprecated in favor of new EnumFieldType.

* SOLR-11239: The use of maxShardsPerNode is not supported when a cluster policy is in effect or
  when a collection specific policy is specified during collection creation.

* V2 APIs are now available at /api, in addition to /v2 (which is now deprecated). Legacy APIs continue to remain
  available at /solr.

* Solr was tested and is compatible with the final release candidate of Java 9. All startup scripts
  detect Java 9 correctly and setup Garbage Collector logging. If the configuration file contains
  logging options that are no longer supported with Java 9, startup will fail.

* SOLR-10307: If starting Jetty without the Solr start script, you must now pass keystore and truststore
  passwords via the env variables SOLR_SSL_KEY_STORE_PASSWORD and SOLR_SSL_TRUST_STORE_PASSWORD rather
  than system properties.

* SOLR-10379: ManagedSynonymFilterFactory has been deprecated in favor of ManagedSynonymGraphFilterFactory.

* SOLR-10503: CurrencyField has been deprecated in favor of new CurrencyFieldType.

New Features
----------------------
* SOLR-9857, SOLR-9858: Collect aggregated metrics from nodes and shard leaders in overseer. (ab)

* SOLR-9835: Create another replication mode for SolrCloud

* SOLR-10356: Adds basic math Streaming Evaluators (Dennis Gove)

* SOLR-10393: Adds UUID Streaming Evaluator (Dennis Gove)

* SOLR-10046: Add UninvertDocValuesMergePolicyFactory class. (Keith Laban, Christine Poerschke)

* SOLR-10547: JSON Facet API: Implement support for single-valued string fields for min/max aggregations.
  (yonik)

* SOLR-10262: Add support for configurable metrics implementations. (ab)

* SOLR-10431: Make it possible to invoke v2 api calls using SolrJ (Cao Manh Dat, Noble Paul, shalin)

* SOLR-10233: Add support for different replica types, that can handle updates differently:
  - NRT: Writes updates to transaction log and indexes locally. Replicas of type “NRT” support NRT
         (soft commits) and RTG. Any NRT replica can become a leader. This was the only type supported
         in SolrCloud until now and it’s the default type.
  - TLOG: Writes to transaction log, but not to index, uses replication to copy segment files from the
          shard leader. Any TLOG replica can become leader (by first applying all local transaction log
          elements). If a replica is of type TLOG but is also the leader, it will behave as a NRT. This
          is exactly what was added in SOLR-9835 (non-realtime replicas), just the API and naming changes.
  - PULL: Doesn’t index or writes to transaction log, just replicates from the shard leader. PULL replicas
          can’t become shard leaders (i.e., if there are only PULL replicas in the collection at some point,
          updates will fail same as if there is no leaders, queries continue to work), so they don’t even
          participate in elections.
  (Tomás Fernández Löbbe)

* SOLR-10278: A new DSL to set cluster-wide preferences and policies on how to allocate replicas to nodes
  (noble, shalin)

* SOLR-10373: Implement read API for autoscaling configuration at /admin/autoscaling or
  /cluster/autoscaling paths. (shalin)

* SOLR-10677: Expose a diagnostics API to return nodes sorted by load in descending order and
  any policy violations. (shalin)

* SOLR-7452: Refinement for JSON Facet API: Adding refine:true to any terms facet will cause an
  additional distributed search phase (overlapped with field retrieval) that requests additional info
  for top facet buckets from shards that did not previously contribute to that bucket.
  This will correct counts (and other statistics) for those top buckets collected in the first
  phase. (yonik)

* SOLR-10433: CollectionAdmin requests in SolrJ to support V2 calls (noble)

* SOLR-9989: Add support for PointFields in FacetModule (JSON Facets) (Cao Manh Dat)

* SOLR-10406: v2 API error messages list the URL request path as /solr/____v2/... when the original path was /v2/... (Cao Manh Dat, noble)

* SOLR-10574: New _default config set replacing basic_configs and data_driven_schema_configs.
  (Ishan Chattopadhyaya, noble, shalin, hossman, David Smiley, janhoy, Alexandre Rafalovitch)

* SOLR-10272: Use _default config set if no collection.configName is specified with CREATE (Ishan Chattopadhyaya)

* SOLR-9526: Data driven schema now indexes text field "foo" as both "foo" (text_general) and as "foo_str" (string)
  to facilitate both search and faceting. AddSchemaFieldsUpdateProcessor now has the ability to add a "copyField" to
  the type mappings, with an optional maxChars limitation. You can also define one typeMappings as default.
  This also solves issues SOLR-8495, SOLR-6966, and SOLR-7058
  (janhoy, Steve Rowe, hossman, Alexandre Rafalovitch, Shawn Heisey, Cao Manh Dat)

* SOLR-10123: Upgraded the Analytics Component to version 2.0 which now supports distributed collections, expressions over
  multivalued fields, a new JSON request language, and more. DocValues are now required for any field used in the analytics
  expression  whereas previously docValues was not required. Please see SOLR-10123 for details. (Houston Putman)

* SOLR-10282: bin/solr support for enabling Kerberos authentication (Ishan Chattopadhyaya, Jason Gerlowski)

* SOLR-11093: Add support for PointFields for {!graph} query. (yonik)

* SOLR-10845: Add support for PointFields to {!graphTerms} query that is internally
  used by some graph traversal streaming expressions.  (yonik)

* SOLR-10939: Add support for PointsFields to {!join} query. Joined fields should
  also have docValues enabled. (yonik)

* SOLR-11173 TermsComponent support for Points fields. (yonik)

* SOLR-10849: MoreLikeThisComponent should expose setMaxDocFreqPct (maxDoc
  frequency percentage). (Dawid Weiss)

* SOLR-10307: Allow Passing SSL passwords through environment variables. (Mano Kovacs, Michael Suzuki via Mark Miller)

* SOLR-10379: Add ManagedSynonymGraphFilterFactory, deprecate ManagedSynonymFilterFactory. (Steve Rowe)

* SOLR-10479: Adds support for HttpShardHandlerFactory.loadBalancerRequests(MinimumAbsolute|MaximumFraction)
  configuration. (Ramsey Haddad, Daniel Collins, Christine Poerschke)

* SOLR-3702: concat(...) function query (Andrey Kudryavtsev via Mikhail Khludnev)

* SOLR-10767: Add movingAvg Stream Evaluator (Joel Bernstein)

* SOLR-10813: Add arraySort Stream Evaluator (Joel Bernstein)

* SOLR-10696: Add cumulative probability function (Joel Bernstein)

* SOLR-10765: Add anova Stream Evaluator (Joel Bernstein)

* SOLR-10754: Add hist Stream Evaluator (Joel Bernstein)

* SOLR-10753: Add array Stream Evaluator (Joel Bernstein)

* SOLR-10747: Allow /stream handler to execute Stream Evaluators directly (Joel Bernstein)

* SOLR-10743: Add sequence StreamEvaluator (Joel Bernstein)

* SOLR-10684: Add finddelay Stream Evaluator (Joel Bernstein)

* SOLR-10731: Add knn Streaming Expression (Joel Bernstein)

* SOLR-10724: Add describe Stream Evaluator (Joel Bernstein)

* SOLR-10693: Add copyOfRange Stream Evaluator (Joel Bernstein)

* SOLR-10623: Add sql Streaming Expression (Joel Bernstein)

* SOLR-10661: Add copyOf Stream Evaluator (Joel Bernstein)

* SOLR-10663: Add distance Stream Evaluator (Joel Bernstein)

* SOLR-10664: Add scale Stream Evaluator (Joel Bernstein)

* SOLR-10666: Add rank transformation Stream Evaluator (Joel Bernstein)

* SOLR-10662: Add length Stream Evaluator (Joel Bernstein)

* SOLR-10660: Add reverse Stream Evaluator (Joel Bernstein)

* SOLR-9910: Add solr/solr.cmd parameter to append jetty parameters to the start script.
  (Mano Kovacs via Mark Miller)

* SOLR-6671: Possible to set solr.data.home property as root dir for all data (janhoy, Shawn Heisey, Mark Miller)

Bug Fixes
----------------------
* SOLR-9262: Connection and read timeouts are being ignored by UpdateShardHandler after SOLR-4509.
  (Mark Miller, shalin)

* SOLR-9837: Fix 55% performance regression of FieldCache uninvert time of
  numeric fields.  (yonik)

* SOLR-10408: v2 API introspect should return useful message for non-existent command (Cao Manh Dat)

* SOLR-10411: v2 Collection API "modify" command specification's replicationFactor property is incorrectly typed as string,
  should be integer (Cao Manh Dat)

* SOLR-10405: v2 API introspect response contains multiple copies of the experimental format WARNING (Cao Manh Dat)

* SOLR-10412: v2 API: many API command specification properties are typed "number" but should instead be typed "integer"
  (Steve Rowe, Cao Manh Dat)

* SOLR-10413: v2 API: parsed JSON type should be coerced to expected type (Cao Manh Dat, Noble Paul)

* SOLR-10223: Allow running examples as root on Linux with -force option (janhoy)

* SOLR-10830: Solr now correctly enforces that the '_root_' field has the same fieldType as the
  uniqueKey field.  With out this enforcement, child document updating was unreliable. (hossman)

* SOLR-10876: Regression in loading runtime UpdateRequestProcessors like TemplateUpdateProcessorFactory (noble)

* SOLR-10886: Using V2Request.process(solrClient) method throws NPE if the API returns an error (Cao Manh Dat)

* SOLR-10921: Work around the static Lucene BooleanQuery.maxClauseCount that causes Solr's maxBooleanClauses
  setting behavior to be "last core wins".  This patch sets  BooleanQuery.maxClauseCount to its maximum value,
  thus disabling the global check, and replaces it with specific checks where desired via
  QueryUtils.build().  (yonik)

* SOLR-10948: Fix extraction component to treat DatePointField the same as TrieDateField (hossman)

* SOLR-10506: Fix memory leak (upon collection reload or ZooKeeper session expiry) in ZkIndexSchemaReader.
  (Torsten Bøgh Köster, Christine Poerschke, Jörg Rathlev, Mike Drob)

* SOLR-6807: CloudSolrClient's ZK state version check with the server was ignored when handleSelect=false
  (David Smiley)

* SOLR-10878: MOVEREPLICA command may lose data when replicationFactor is 1. (ab, shalin)

* SOLR-10879: DELETEREPLICA and DELETENODE commands should prevent data loss when
  replicationFactor is 1. (ab)

* SOLR-10983: Fix DOWNNODE -> queue-work explosion (Scott Blum, Joshua Humphries)

* SOLR-10826: Fix CloudSolrClient to expand the collection parameter correctly (Tim Owen via Varun Thacker)

* SOLR-11039: Next button in Solr admin UI for collection list pagination does not work. (janhoy)

* SOLR-11041: MoveReplicaCmd do not specify ulog dir in case of HDFS (Cao Manh Dat)

* SOLR-11045: The new replica created by MoveReplica will have to have same name and coreName as the
  old one in case of HDFS (Cao Manh Dat)

* SOLR-11043: Fix facet.range.method=dv and interval facets on single-valued float fields with negative values.
  (Tomás Fernández Löbbe, Steve Rowe)

* SOLR-11073: Fix overflow in interval faceting when querying Long limits (e.g. (Long.MAX_VALUE TO Long.MAX_VALUE])
  (Tomás Fernández Löbbe)

* SOLR-11057: Fix overflow in point range queries when querying the type limits
  (e.g. q=field_i:{Integer.MAX_VALUE TO Integer.MAX_VALUE]) (Tomás Fernández Löbbe)

* SOLR-11136: Fix solrj XMLResponseParser when nested docs transformer is used with indented XML (hossman)

* SOLR-11130: V2Request in SolrJ should return the correct collection name so that the request is forwarded to the
  correct node (noble)

* SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null.
  (Steve Rowe)

* SOLR-11154: Child documents' return fields now include useDocValuesAsStored fields (Mohammed Sheeri Shaketi Nauage via
  Ishan Chattopadhyaya)

* SOLR-11163: Fix contrib/ltr Normalizer persistence after solr core reload or restart.
  (Yuki Yano via Christine Poerschke)

* SOLR-11182: A split shard failure on IOException should be logged (Varun Thacker)

* SOLR-10353: TestSQLHandler reproducible failure: No match found for function signature min(<NUMERIC>) (Kevin Risden)

* SOLR-11221: SolrJmxReporter broken on core reload. This resulted in some or most metrics not being reported
  via JMX after core reloads, depending on timing. (ab)

* SOLR-11235: Some SolrCore metrics should check if core is closed before reporting. (ab)

* SOLR-10698: StreamHandler should allow connections to be closed early (Joel Bernstein, Varun Thacker, Erick Erickson)

* SOLR-11243: Replica Placement rules are ignored if a cluster policy exists. (shalin)

* SOLR-11268: AtomicUpdateProcessor complains missing UpdateLog (noble, Ishan Chattopadhyaya)

* SOLR-8689: Fix bin/solr.cmd so it can run properly on Java 9 (Uwe Schindler, hossman)

* SOLR-10723 JSON Facet API: resize() implemented incorrectly for CountSlotAcc, HllAgg.NumericAcc
  resulting in exceptions when using a hashing faceting method and sorting by hll(numeric_field).
  (yonik)

* SOLR-10719: Creating a core.properties fails if the parent of core.properties is a symlinked dierctory
  (Erick Erickson)

* SOLR-10360: Solr HDFS snapshot export fails due to FileNotFoundException error when using MR1 instead of
  yarn. (Hrishikesh via Mark Miller)

* SOLR-10137: Ensure that ConfigSets created via API are mutable. (Hrishikesh via Mark Miller)

* SOLR-10829: Fixed IndexSchema to enforce that uniqueKey can not be Points based for correctness (hossman)

* SOLR-10836: The query parsers igain, significantTerms, and tlogit (used by streaming expressions by
  the same name) might throw a NullPointerException if the referenced field had no indexed data in some
  shards. The fix included an optimization to use Solr's cached AtomicReader instead of re-calculating.
  (David Smiley)

* SOLR-10715: /v2/ should not be an alias for /v2/collections (Cao Manh Dat)

* SOLR-10835: Add support for point fields in Export Handler (Tomás Fernández Löbbe)

* SOLR-10704: REPLACENODE may cause data loss when replicationFactor is 1. (ab, shalin)

* SOLR-10833: Point numeric fields should throw SolrException(BAD_REQUEST) for malformed numbers in queries.
              Trie numeric fields should throw SolrException(BAD_REQUEST) for malformed docValues range queries.
  (hossman, Tomás Fernández Löbbe)

* SOLR-10832: Fixed VersionInfo.getMaxVersionFromIndex when using PointsField with indexed="true" (hossman)

* SOLR-10763: Admin UI replication tab sometimes empty when failed replications (janhoy, Bojan Vitnik)

* SOLR-10824: fix NPE ExactSharedStatsCache, fixing maxdocs skew for terms which are absent at one of shards
when using one of Exact*StatsCache (Mikhail Khludnev)

* SOLR-10963: Fix example json in MultipleAdditiveTreesModel javadocs.
  (Stefan Langenmaier via Christine Poerschke)

* SOLR-10914: RecoveryStrategy's sendPrepRecoveryCmd can get stuck for 5 minutes if leader is unloaded. (shalin)

* SOLR-11198: downconfig downloads empty file as folder (Erick Erickson)

Optimizations
----------------------

* SOLR-4509: Move to non deprecated HttpClient impl classes to remove stale connection
  check on every request and move connection lifecycle management towards the client.
  (Ryan Zezeski, Mark Miller, Shawn Heisey, Steve Davids)

* SOLR-9255: Rename SOLR_AUTHENTICATION_CLIENT_CONFIGURER -> SOLR_AUTHENTICATION_CLIENT_BUILDER (janhoy)

* SOLR-9579: Make Solr's SchemaField implement Lucene's IndexableFieldType, removing the
  creation of a Lucene FieldType every time a field is indexed. (John Call, yonik)

* SOLR-9822: JSON Facet API: Recover performance lost due to the DocValues transition to
  an iterator API (LUCENE-7407).  This only fixes calculating counts for single-valued
  string fields from the FieldCache, resulting in up to 56% better throughput for those cases.
  (yonik)

* SOLR-10727: Avoid polluting the filter cache for certain types of faceting (typically ranges) when
  the base docset is empty. (David Smiley)

* SOLR-11070: Make docValues range queries behave the same as Trie/Point fields for Double/Float Infinity cases
  (Tomás Fernández Löbbe, Andrey Kudryavtsev)

* SOLR-10634: JSON Facet API: When a field/terms facet will retrieve all buckets (i.e. limit:-1)
  and there are no nested facets, aggregations are computed in the first collection phase
  so that the second phase which would normally involve calculating the domain for the bucket
  can be skipped entirely, leading to large performance improvements. (yonik)

* SOLR-10722: Speed up Solr's use of the UnifiedHighlighter be re-using FieldInfos. (David Smiley)

Other Changes
----------------------
* SOLR-10236: Removed FieldType.getNumericType(). Use getNumberType() instead. (Tomás Fernández Löbbe)

* SOLR-10347: Removed index level boost support from "documents" section of the admin UI (Amrit Sarkar via
  Tomás Fernández Löbbe)

* SOLR-9959: SolrInfoMBean category and hierarchy cleanup. Per-component statistics are now obtained from
  the metrics API, legacy JMX support has been replaced with SolrJmxReporter functionality. Several reporter
  improvements (support for multiple prefix filters, "enabled" flag, reuse of service clients). (ab)

* SOLR-10418: Expose safe system properties via metrics API as 'system.properties' in 'solr.jvm' group.
  Add support for selecting specific properties from any compound metric using 'property' parameter to
  /admin/metrics handler. (ab)

* SOLR-10557: Make "compact" format default for /admin/metrics. (ab)

* SOLR-10310: By default, stop splitting on whitespace prior to analysis
  in edismax and standard/"lucene" query parsers. (Steve Rowe)

* SOLR-10647: Move the V1 <-> V2 API mapping to SolrJ (noble)

* SOLR-10584: We'll now always throw an exception if defaultOperator is found in schema. This config has
  been deprecated since 3.6, and enforced for new configs since 6.6 (janhoy)

* SOLR-10585: We'll now always throw an exception if defaultSearchField is found in schema. This config has
  been deprecated since 3.6, and enforced for new configs since 6.6 (janhoy, David Smiley)

* SOLR-10414: RecoveryStrategy is now a Runnable instead of a Thread. (Tomás Fernández Löbbe)

* SOLR-10042: Delete old deprecated Admin UI, leaving the AngularJS UI the only one supported (janhoy)

* SOLR-10378: Clicking Solr logo on AdminUI shows blank page (Takumi Yoshida via janhoy)

* SOLR-10700: Deprecated and converted the PostingsSolrHighlighter to extend UnifiedSolrHighlighter and thus no
  longer use the PostingsHighlighter.  It should behave mostly the same. (David Smiley)

* SOLR-10710: Fix LTR failing tests. (Diego Ceccarelli via Tomás Fernández Löbbe)

* SOLR-10755: delete/refactor many solrj deprecations (hossman)

* SOLR-10752: replicationFactor (nrtReplicas) default is 0 if tlogReplicas is specified when creating a collection
  (Tomás Fernández Löbbe)

* SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations (hossman)

* SOLR-10793: BlobHandler should have a well-known permission name (noble)

* SOLR-10744: Update noggit to newer version (0.8) (noble)

* SOLR-10792: Deprecate and remove implicit registration of "lucenePlusSort" aka OldLuceneQParser (hossman)

* SOLR-10791: Remove deprecated options in SSLTestConfig (hossman)

* LUCENE-7852: Correct copyright year(s) in solr/LICENSE.txt file.
  (Christine Poerschke, Steve Rowe)

* SOLR-8668: In solrconfig.xml remove <mergePolicy> (and related <mergeFactor> and <maxMergeDocs>)
  support in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
  (Christine Poerschke, hossman)

* SOLR-10799: Extracted functionality to collect eligible replicas from HttpShardHandler.prepDistributed()
  to a new method (Domenico Fabio Marino via Tomás Fernández Löbbe)

* SOLR-10801: Remove several deprecated methods that were exposed to plugin writers (hossman)

* SOLR-10671: Add abstract doInit method to the SolrMetricReporter base class.
  (Christine Poerschke, Anshum Gupta)

* SOLR-10713: Ignore .pid and .out files in solr working directory (Jason Gerlowski via Mike Drob)

* SOLR-10764: AutoScalingHandler should validate policy and preferences before updating zookeeper. (shalin)

* SOLR-10782: Improve error handling and tests for Snitch and subclasses and general cleanups. (Noble Paul, shalin)

* SOLR-10419: All collection APIs should use the new Policy framework for replica placement. (Noble Paul, shalin)

* SOLR-10800: Factor out HttpShardHandler.transformReplicasToShardUrls from HttpShardHandler.prepDistributed.
  (Domenico Fabio Marino, Christine Poerschke)

* SOLR-10779: JavaBinCodec should use close consistently rather than having marshal() and close() call finish()
 (which closes the underlying stream). (Erick Erickson)

* SOLR-9623: Disable remote streaming in example configs by default. Adjust Upload Limit defaults (janhoy, yonik)

* SOLR-4646: eDismax lowercaseOperators now defaults to "false" for luceneMatchVersion >= 7.0.0 (janhoy, David Smiley)

* SOLR-8256: Set legacyCloud=false as default (Cao Manh Dat)

* SOLR-10929: Removed unused 'valType' option from ExternalFileField (hossman)

* SOLR-10864: Simplified how Trie vs Points based numerics are randomized by SolrTestCaseJ4 by adding a static
  option to PointsField to ignore 'precisionStep' attribute.  This change also begins to attempt to randomize
  'docValues' on numeric field types unless tests explicity enable/disable them. (hossman, Steve Rowe)

* LUCENE-7883: Solr no longer uses the context class loader when resolving
  resources, they are only resolved against Solr's own or "core" class loader
  by default.  (Uwe Schindler)

* SOLR-10915: Make builder based SolrClient constructors to be the only valid way to construct client objects and
  increase the visibility of builder elements to be protected so extending the builder, and the clients is possible.
  (Jason Gerlowski, Anshum Gupta)

* SOLR-10823: Add reporting period to SolrMetricReporter base class. (Christine Poerschke)

* SOLR-10807: Randomize Points based numeric field types in all existing tests & test schemas
  where Trie numerics were previously hardcoded. (hossman, Steve Rowe, Anshum Gupta)

* SOLR-6807: Changed requestDispatcher's handleSelect to default to false, thus ignoring "qt".
  Simplified configs to not refer to handleSelect or "qt".  Switch all tests that assumed true to assume false
  (added leading '/' in request handlers). Switch all tests referring to "standard" request handler to
  instead refer to "/select" with SearchHandler. Deprecated the old StandardRequestHandler. (David Smiley)

* SOLR-10456: Deprecate timeout related setters from SolrClients, and replace with Builder based implementation
  (Jason Gerlowski, Anshum Gupta)

* SOLR-11004: Consolidate SolrClient builder code in an abstract base class (Jason Gerlowski, Anshum Gupta)

* SOLR-10967: Cleanup the default configset. The changes involve some documentation corrections, removing the currency
  field from the examples and a few dynamic fields (Varun Thacker)

* SOLR-11016: Fix TestCloudJSONFacetJoinDomain test-only bug (hossman)

* SOLR-11021: The elevate.xml config-file is made optional in the ElevationComponent.
  The default configset doesn't ship with a elevate.xml file anymore (Varun Thacker)

* SOLR-10898: Fix SOLR-10898 to not deterministicly fail 1/512 runs (hossman)

* SOLR-10796: TestPointFields: increase randomized testing of non-trivial values.  (Steve Rowe)

* SOLR-11068: MOVEREPLICA and REPLACENODE API parameter names are now 'sourceNode' and 'targetNode'. The old names
  viz. 'fromNode' for MOVEREPLICA and 'source', 'target' for REPLACENODE have been deprecated. (shalin)

* SOLR-11088: Fix sporadic failures of MetricsHandlerTest.testPropertyFilter on jenkins (shalin)

* SOLR-11037: Refactor to provide NodeConfig.getSolrDataHome internal API. (ab, janhoy, shalin)

* SOLR-11119: Switch from Trie to Points field types in the .system collection schema. (Steve Rowe)

* SOLR-10494: Make default response format JSON (wt=json), and also indent text responses formats
  (indent=on) by default (Trey Grainger & Cassandra Targett via hossman)

* SOLR-10760,SOLR-11315,SOLR-11313: Remove trie field types and fields from example schemas. (Steve Rowe)

* SOLR-11056: Add random range query test that compares results across Trie*, *Point and DocValue-only fields
  (Tomás Fernández Löbbe)

* SOLR-10926: Increase the odds of randomly choosing point fields in our SolrTestCaseJ4 numeric type randomization.
  (hossman, Steve Rowe)

* SOLR-10846: ExternalFileField/FloatFieldSource should throw a clear exception on initialization with
  a Points-based keyField, which is not supported. (hossman, Steve Rowe)

* SOLR-11155: /analysis/field and /analysis/document requests should support points fields.
  (Jason Gerlowski, Steve Rowe)

* SOLR-10756: Undeprecate ZkStateReader.updateClusterState(), mark as @lucene.internal, and rename to
  forciblyRefreshAllClusterStateSlow(). (hossman, shalin, Steve Rowe)

* SOLR-11036: Separately report disk space metrics for solr.data.home and core root directory. (ab)

* SOLR-10919: ord & rord functions give confusing errors with PointFields. (hossman, Steve Rowe)

* SOLR-10847: Provide a clear exception when attempting to use the terms component with points fields.
  (hossman, Steve Rowe)

* SOLR-9321: Remove deprecated methods of ClusterState. (Jason Gerlowski, ishan, Cao Manh Dat)

* SOLR-10033: When attempting to facet with facet.mincount=0 over points fields, raise mincount to 1
  and log a warning. (Steve Rowe)

* SOLR-11178: Change error handling in AutoScalingHandler to be consistent w/ other APIs (noble)

* SOLR-11023: Added EnumFieldType, a non-Trie-based version of EnumField, and deprecated EnumField
  in favor of EnumFieldType. (hossman, Steve Rowe)

* SOLR-10803: Mark all Trie/LegacyNumeric based fields @deprecated in Solr7.  (Steve Rowe)

* SOLR-10821: Ref guide documentation for Autoscaling (Noble Paul, Cassandra Targett, shalin)

* SOLR-11239: A special value of -1 can be specified for 'maxShardsPerNode' to denote that
  there is no limit. The bin/solr script send maxShardsPerNode=-1 when creating collections. The
  use of maxShardsPerNode is not supported when a cluster policy is in effect or when a
  collection specific policy is specified during collection creation.
  (Noble Paul, shalin)

* SOLR-11183: V2 APIs are now available at /api endpoint. (Ishan Chattopadhyaya)

* SOLR-10617: JDBCStream accepts columns of type TIME, DATE & TIMESTAMP as well as CLOBs and decimal
  numeric types (James Dyer)

* SOLR-10400: Replace (instanceof TrieFooField || instanceof FooPointField) constructs with
  FieldType.getNumberType() or SchemaField.getSortField() where appropriate. (hossman, Steve Rowe)

* SOLR-10438: Assign explicit useDocValuesAsStored values to all points field types in
  schema-point.xml/TestPointFields. (hossman, Steve Rowe)

* LUCENE-7705: Allow CharTokenizer-derived tokenizers and KeywordTokenizer to configure the max token length.
  (Amrit Sarkar via Erick Erickson)

* SOLR-10659: Remove ResponseBuilder.getSortSpec use in SearchGroupShardResponseProcessor.
  (Judith Silverman via Christine Poerschke)

* SOLR-10741: Factor out createSliceShardsStr method from HttpShardHandler.prepDistributed.
  (Domenico Fabio Marino via Christine Poerschke)

* SOLR-10790: Fix warnings in Assign.java and ReplicaAssigner.java classes.
  (Christine Poerschke)

* SOLR-8437: Improve RAMDirectory details in sample solrconfig files (Mark Miller, Varun Thacker)

* SOLR-8762: return child docs in DIH debug (Gopikannan Venugopalsamy via Mikhail Khludnev)

* SOLR-10501: Test sortMissing{First,Last} with points fields.  (Steve Rowe)

* SOLR-10761: Switch trie numeric/date fields to points in data-driven-enabled example and test schemas.
  (Steve Rowe)

* SOLR-10851: SolrClients should clarify expectations for solrServerUrl parameter (Jason Gerlowski
  via Tomás Fernández Löbbe)

* SOLR-10891: BBoxField should support point-based number sub-fields. (Steve Rowe)

* SOLR-10834: Fixed tests and test configs to stop using numeric uniqueKey fields (hossman)

* SOLR-10883: Ref guide: Escape replacement substitutions, e.g. => to right arrow, so that they are
  rendered visibly in the PDF.  Also add .adoc file checks to the top-level validate target, including
  for the invisible substitutions PDF problem.  (Steve Rowe)

* SOLR-10503,SOLR-10502: Deprecate CurrencyField in favor of new CurrencyFieldType, which works
  with point fields and provides control over dynamic fields used for the raw amount and currency
  code sub-fields.  (hossman, Steve Rowe)

* SOLR-11261, SOLR-10966: Upgrade to Hadoop 2.7.4 to fix incompatibility with Java 9.
  (Uwe Schindler)

* SOLR-11324: Clean up mention of trie fields in documentation and source comments. (Steve Rowe)

==================  6.6.5 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.10
Jetty 9.3.14.v20161028

New Features
----------------------

* SOLR-12530: Ability to disable configset upload via -Dconfigset.upload.enabled=false startup parameter
  (Ishan Chattopadhyaya)

Bug Fixes
----------------------

* SOLR-12450: Don't allow referal to external resources in various config files (CVE-2018-8026).
  (Yuyang Xiao, Uwe Schindler)

==================  6.6.4 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.17
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.11
Jetty 9.4.10.v20180503

Bug Fixes
----------------------

* SOLR-12316: Do not allow to use absolute URIs for including other files in solrconfig.xml and schema parsing.
  (Ananthesh, Ishan Chattopadhyaya, Uwe Schindler)

==================  6.6.3 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.17
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.11
Jetty 9.4.8.v20171121

Bug Fixes
----------------------

* SOLR-11971: Don't allow referal to external resources in DataImportHandler's dataConfig request parameter.
  (麦 香浓郁, Uwe Schindler)

* SOLR-11503: Collections created with legacyCloud=true cannot be opened if legacyCloud=false (Erick Erickson)

* SOLR-11993: LeaderInitiatedRecoveryThread does not retry on UnknownHostException (shalin, Cao Manh Dat, Steve Rowe)

==================  6.6.2 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.16
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.10
Jetty 9.3.14.v20161028

Upgrade Notes
----------------------

* SOLR-11477: in the XML query parser (defType=xmlparser or {!xmlparser ... })
  the resolving of external entities is now disallowed by default.

* SOLR-11482: RunExecutableListener was deprecated and is disabled by default for
  security reasons. Legacy applications still using it must explicitely pass
  '-Dsolr.enableRunExecutableListener=true' to the Solr command line.
  Be aware that you should really disable API-based config editing at the same
  time, using '-Ddisable.configEdit=true'!  (Uwe Schindler)

Bug Fixes
----------------------

* SOLR-11477: Disallow resolving of external entities in the XML query parser (defType=xmlparser).
  (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)


* SOLR-11297: Message "Lock held by this virtual machine" during startup.  Solr is trying to start some cores twice.
  (Luiz Armesto, Shawn Heisey, Erick Erickson)

Other Changes
----------------------

* SOLR-10335: Upgrade to Tika 1.16. (Tim Allison, Tomás Fernández Löbbe via shalin)

==================  6.6.1 ==================

Bug Fixes
----------------------

* SOLR-10857: standalone Solr loads UNLOADed core on request (Erick Erickson, Mikhail Khludnev)

* SOLR-11024: ParallelStream should set the StreamContext when constructing SolrStreams (Joel Bernstein)

* SOLR-10908: CloudSolrStream.toExpression incorrectly handles fq clauses (Rohit via Erick Erickson)

* SOLR-11177: CoreContainer.load needs to send lazily loaded core descriptors to the proper list rather than send
  them all to the transient lists. (Erick Erickson)

* SOLR-11122: Creating a core should write a core.properties file first and clean up on failure
  (Erick Erickson)

* SOLR-10910: Clean up a few details left over from pluggable transient core and untangling
  CoreDescriptor/CoreContainer references (Erick Erickson)

* SOLR-10721: Provide a way to know when Core Discovery is finished and when all async cores are done loading
  (Erick Erickson)

* SOLR-11069: CDCR bootstrapping can get into an infinite loop when a core is reloaded (Amrit Sarkar, Erick Erickson)

* SOLR-11221: SolrJmxReporter broken on core reload. This resulted in some or most metrics not being reported
  via JMX after core reloads, depending on timing. (ab)

* SOLR-11261, SOLR-10966: Upgrade to Hadoop 2.7.4 to fix incompatibility with Java 9.
  (Uwe Schindler)

* SOLR-11228: Exclude static html files in the partials directory from authentication and authorization checks. The UI
  will open correctly with kerberos enabled (Ishan Chattopadhyaya, Varun Thacker)

==================  6.6.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.10
Jetty 9.3.14.v20161028

Upgrade Notes
----------------------

* Solr contribs map-reduce, morphlines-core and morphlines-cell have been removed.

* JSON Facet API now uses hyper-log-log for numBuckets cardinality calculation and
  calculates cardinality before filtering buckets by any mincount greater than 1.

* ZooKeeper dependency has been upgraded from 3.4.6 to 3.4.10.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-9992: Add support for grouping with PointFIelds. (Cao Manh Dat)

* SOLR-9994: Add support for CollapseQParser with PointFields. (Varun Thacker, Cao Manh Dat)

* SOLR-10076: Hide keystore and truststore passwords from /admin/info/* outputs. (Mano Kovacs via Mark Miller)

* SOLR-6736: Adding support for uploading zipped configsets using ConfigSets API (Varun Rajput, Ishan Chattopadhyaya,
  Noble Paul, Anshum Gupta, Gregory Chanan)

* SOLR-10349: Add totalTermFreq support to TermsComponent. (Shai Erera)

* SOLR-9993: Add support for ExpandComponent with PointFields. (Cao Manh Dat)

* SOLR-10239: MOVEREPLICA API (Cao Manh Dat, Noble Paul, shalin)

* SOLR-9936: Allow configuration for recoveryExecutor thread pool size. (Tim Owen via Mark Miller)

* SOLR-10447: Collections API now supports a LISTALIASES command to return a list of all collection aliases.
  (Yago Riveiro, Ishan Chattopadhyaya, Mark Miller, Steve Molloy, Shawn Heisey, Mike Drob, janhoy)

* SOLR-10446: CloudSolrClient can now be initialized using the base URL of a Solr instance instead of
  ZooKeeper hosts. This is possible through the use of newly introduced HttpClusterStateProvider.
  To fetch a list of collection aliases, this depends on LISTALIASES command, and hence this way of
  initializing CloudSolrClient would not work if you have collection aliases on older versions of Solr
  server that doesn't support LISTALIASES. (Ishan Chattopadhyaya, Noble Paul)

* SOLR-10082: Variance and Standard Deviation aggregators for the JSON Facet API.
  Example: json.facet={x:"stddev(field1)", y:"variance(field2)"}
  (Rustam Hashimov, yonik)

* SOLR-10505: Add multi-field support to TermsComponent when requesting terms' statistics. (Shai Erera)

* SOLR-10537: SolrJ: Added SolrParams.toLocalParamsString() and ClientUtils.encodeLocalParamVal. (David Smiley)

* SOLR-10507: Core Admin status command to emit collection details of each core (noble)

* SOLR-10521: introducing sort=childfield(field) asc for searching by {!parent} (Mikhail Khludnev)

* SOLR-9596: Add Solr support for SimpleTextCodec, via <codecFactory class="solr.SimpleTextCodecFactory"/>
  in solrconfig.xml (per-field specification in the schema is not possible). (Steve Rowe)

* SOLR-1485: Add payload support with payload() value source and {!payload_score} and {!payload_check}
  query parsers.  (Erik Hatcher)

* SOLR-10430: Add ls command to ZkCLI for listing only sub-directories. (Peter Szantai-Kis via Mark Miller)

* SOLR-10583: JSON Faceting now supports a query time 'join' domain change option (hossman)

* SOLR-9530: An Update Processor to convert normal update operation to an atomic operations such as
  add, set,inc, remove ,set, removeregex (Amrit Sarkar, noble)

* SOLR-10303: Add date/time Stream Evaluators (Gethin James, Dennis Gove, Joel Bernstein)

* SOLR-10351: Add analyze Stream Evaluator to support streaming NLP (Joel Bernstein)

* SOLR-10426: Add shuffle Streaming Expression (Joel Bernstein)

* SOLR-10274: The search Streaming Expression should work in non-SolrCloud mode (Joel Bernstein)

* SOLR-10504: Add echo Streaming Expression (Joel Bernstein)

* SOLR-10516: Add eval Streaming Expression (Joel Bernstein)

* SOLR-10566: Add timeseries Streaming Expression (Joel Bernstein)

* SOLR-10559: Add let, get and tuple Streaming Expressions (Dennis Gove, Joel Bernstein)

* SOLR-10582: Add Correlation Stream Evaluator (Joel Bernstein)

* SOLR-10536: stats Streaming Expression should work in non-SolrCloud mode (Joel Bernstein)

* SOLR-10622: Add regress and predict Stream Evaluators (Joel Bernstein)

* SOLR-10626: Add covariance Stream Evaluator (Joel Bernstein)

* SOLR-10625: Add convolution Stream Evaluator (Joel Bernstein)

* SOLR-10638: Add normalize Stream Evaluator (Joel Bernstein)

* SOLR-8440: Support for enabling basic authentication using bin/solr|bin/solr.cmd. (Ishan Chattopadhyaya, janhoy,
  Noble Paul, Hrishikesh Gadre)

* SOLR-10292: Adds CartesianProductStream which turns a single tuple with a multi-valued field into N
  tuples, one for each value in the multi-valued field. (Dennis Gove)

Optimizations
----------------------

* SOLR-9184: Add a static convenience method ModifiableSolrParams#of(SolrParams) which returns the same
  instance if it already is modifiable, otherwise creates a new ModifiableSolrParams instance.
  (Jörg Rathlev via Koji)

* SOLR-10499: facet.heatmap is now significantly faster when the docset (base query) matches everything and there are no
  deleted docs.  It's also faster when the docset matches a small fraction of the index or none. (David Smiley)

* SOLR-9217: Reduced heap consumption for filter({!join ... score=...})
  (Andrey Kudryavtsev, Gopikannan Venugopalsamy via Mikhail Khludnev)

* SOLR-10548: JSON Facet API now uses hyper-log-log++ for determining the number of buckets
  when merging requests from a multi-shard distributed request. (yonik)

* SOLR-10524: Better ZkStateWriter batching (Cao Manh Dat, Noble Paul, shalin, Scott Blum)

* SOLR-10619: Optimize using cache for DistributedQueue in case of single-consumer (Cao Manh Dat, Scott Blum)

Bug Fixes
----------------------
* SOLR-10281: ADMIN_PATHS is duplicated in two places and inconsistent. This can cause automatic
  retries to /admin/metrics handler by the CloudSolrClient. (shalin)

* SOLR-10108: bin/solr script recursive copy broken (Erick Erickson)

* SOLR-10362: "Memory Pool not found" error when reporting JVM metrics. (ab)

* SOLR-10369: bin\solr.cmd delete and healthcheck now works again; fixed continuation chars ^ (Luis Goes via janhoy)

* SOLR-10387: zkTransfer normalizes destination path incorrectly if source is a windows directory
  (gopikannan venugopalsamy, Erick Erickson)

* SOLR-10323: fix to SpellingQueryConverter to properly strip out colons in field-specific queries.
  (Amrit Sarkar via James Dyer)

* SOLR-10264: Fixes multi-term synonym parsing in ManagedSynonymFilterFactory.
  (Jörg Rathlev, Steve Rowe, Christine Poerschke)

* SOLR-8807: fix Spellcheck "collateMaxCollectDocs" parameter to work with queries that have the
  CollpasingQParserPlugin applied.  (James Dyer)

* SOLR-10474: TestPointFields.testPointFieldReturn() depends on order of unsorted hits. (Steve Rowe)

* SOLR-10473: Correct LBHttpSolrClient's confusing SolrServerException message when timeAllowed is exceeded.
  (Christine Poerschke)

* SOLR-10047: Mismatched Docvalues segments cause exception in Sorting/Faceting. Solr now uninverts per segment
  to avoid such exceptions. (Keith Laban via shalin)

* SOLR-10472: Fixed uninversion (aka: FieldCache) bugs with the numeric PointField classes, and CurrencyField (hossman)

* SOLR-5127: Multiple highlight fields and wildcards are now supported e.g. hl.fl=title,text_*
  (Sven-S. Porst, Daniel Debray, Simon Endele, Christine Poerschke)

* SOLR-10493: Investigate SolrCloudExampleTest failures. (Erick Erickson)

* SOLR-10552: JSON Facet API numBuckets was not consistent between distributed and non-distributed requests
  when there was a mincount > 1.  This has been corrected by changing numBuckets cardinality processing to
  ignore mincount > 1 for non-distributed requests. (yonik)

* SOLR-10520: child.facet.field doubled counts at least when rows>0. (Dr. Oleg Savrasov via Mikhail Khludnev)

* SOLR-10480: Full pagination in JSON Facet API using offset does not work. (yonik)

* SOLR-10526: facet.heatmap didn't honor facet exclusions ('ex') for distributed search. (David Smiley)

* SOLR-10500: nested child docs are adopted by neighbour when several parents come in update/json/docs
  (Alexey Suprun,noble via Mikhail Khludnev)

* SOLR-10316: Unloading a core can remove a ZK SolrCore registration entry for the wrong SolrCore. (Mark Miller)

* SOLR-10588: Prevent redundant core reload on config update (Mikhail Khludnev)

* SOLR-10549: The new 'large' attribute had been forgotten in /schema/fieldtypes?showDefaults=true (David Smiley)

* SOLR-10615: requests are suspended until SolrDispatchFilter initialization is completed.
  After core container shutdown or severe initialization problem Solr responds with
  http stauts 404 Not Found instead of 500 as it was before (Mikhail Khludnev)

* SOLR-8149: Admin UI - Plugins / Stats - active item is now highlighted (Labuzov Dmitriy via janhoy)

* SOLR-10630: HttpSolrCall.getAuthCtx().new AuthorizationContext() {...}.getParams()
  sometimes throws java.lang.NullPointerException (hu xiaodong via shalin)

* SOLR-9527: Improve distribution of replicas when restoring a collection
  (Hrishikesh Gadre, Stephen Lewis, Rohit, Varun Thacker)

* LUCENE-7821: The classic and flexible query parsers, as well as Solr's
 "lucene"/standard query parser, should require " TO " in range queries,
  and accept "TO" as endpoints in range queries. (hossman, Steve Rowe)

* SOLR-10735: Windows script (solr.cmd) didn't work properly with directory containing spaces. Adding quotations
  to fix (Uwe Schindler, janhoy, Tomas Fernandez-Lobbe, Ishan Chattopadhyaya)

Ref Guide
----------------------

* SOLR-10758: Modernize the Solr ref guide's Chinese language analysis coverage. (Steve Rowe)

Other Changes
----------------------

* SOLR-9221: Remove Solr contribs: map-reduce, morphlines-core and morphlines-cell. (Steve Rowe)

* SOLR-10249: Refactor IndexFetcher.doFetch() to return a more detailed result. (Jeff Miller via David Smiley)

* SOLR-10304: Refactor Document handling out of SolrIndexSearcher into a new class "SolrDocumentFetcher".
  Deprecated SolrPluginUtils.docListToSolrDocumentList(). (David Smiley)

* SOLR-10352: bin/solr script now prints warning when available system entropy is lower than 300 (Esther Quansah via
  Ishan Chattopadhyaya)

* SOLR-10344: Update Solr default/example and test configs to use WordDelimiterGraphFilterFactory. (Steve Rowe)

* SOLR-10343: Update Solr default/example and test configs to use SynonymGraphFilterFactory. (Steve Rowe)

* SOLR-10365: Handle a SolrCoreInitializationException while publishing core state during SolrCore creation
  (Ishan Chattopadhyaya)

* SOLR-10357: Enable edismax and standard query parsers to handle the option combination
  sow=false / autoGeneratePhraseQueries="true" by setting QueryBuilder.autoGenerateMultiTermSynonymsQuery.
  (Steve Rowe)

* SOLR-10147: Admin UI -> Cloud -> Graph: Impossible to see shard state (Amrit Sarkar, janhoy)

* SOLR-10399: Generalize some internal facet logic to simplify points/non-points field handling (Adrien Grand, hossman)

* SOLR-7383: New DataImportHandler 'atom' example, replacing broken 'rss' example (Alexandre Rafalovitch)

* SOLR-9601: Redone DataImportHandler 'tika' example, removing all unused and irrelevant definitions (Alexandre Rafalovitch)

* SOLR-8906: Make transient core cache pluggable (Erick Erickson)

* SOLR-9745: print errors from solr.cmd (Gopikannan Venugopalsamy via Mikhail Khludnev)

* SOLR-10394: Rename getSortWithinGroup to getWithinGroupSort in search.grouping.Command class.
  (Judith Silverman, Christine Poerschke)

* SOLR-10440: LBHttpSolrClient.doRequest is now always wrapped in a Mapped Diagnostic Context (MDC).
  (Christine Poerschke)

* SOLR-10429: UpdateRequest#getRoutes()should copy the response parser (noble)

* SOLR-10007: Clean up references to CoreContainer and CoreDescriptors (Erick Erickson)

* SOLR-10151: Use monotonically incrementing counter for doc ids in TestRecovery. (Peter Szantai-Kis, Mano Kovacs via Mark Miller)

* SOLR-10514: Upgrade Metrics library to 3.2.2. (ab)

* SOLR-9386: Upgrade Zookeeper to 3.4.10. (Shawn Heisey, Steve Rowe)

* SOLR-10519: SolrCLI.atPath cannot handle children that begin with a slash. (Erick Erickson)

* SOLR-9867: Adding isLoading=true as core status. Fixing start after stop scenario in bin/solr
  (Andrey Kudryavtsev, Mikhail Khludnev)

* SOLR-7041: Cutover tests to using 'q.op' and 'df' instead of schema 'defaultOperator' and 'defaultSearchField' (janhoy)

* SOLR-10601: StreamExpressionParser should handle white space around = in named parameters (Joel Bernstein)

* SOLR-10614: Static fields have turned to instance's field in SimplePostTool.
  Enabled TestSolrCLIRunExample.testTechproductsExample(). (Andrey Kudryavtsev, Mikhail Khludnev)

* SOLR-10522: Revert SpellCheckComponent response format change from SOLR-9972 (rel. 6.5.0).  While this
  was an improvement for the json "arrntv" format, it caused problems for the default json format.
  (James Dyer, reported by Nikita Pchelintsev)

* SOLR-10644: solr.in.sh installed by install script should be writable by solr user (janhoy)

* SOLR-10729: Deprecated LatLonType, GeoHashField, SpatialPointVectorFieldType, and SpatialTermQueryPrefixTreeFieldType.
  Instead, switch to LatLonPointSpatialField or SpatialRecursivePrefixTreeFieldType or RptWithGeometrySpatialField.
  (David Smiley)

==================  6.5.1 ==================

Bug Fixes
----------------------

* SOLR-10383: Fix debug related NullPointerException in solr/contrib/ltr OriginalScoreFeature class.
  (Vitezslav Zak, Christine Poerschke)

* SOLR-10416: The JSON output of /admin/metrics is fixed to write the container as a
  map (SimpleOrderedMap) instead of an array (NamedList). (shalin)

* SOLR-10277: On 'downnode', lots of wasteful mutations are done to ZK.
  (Joshua Humphries, Scott Blum, Varun Thacker, shalin)

* SOLR-10421: Fix params persistence for solr/contrib/ltr (MinMax|Standard)Normalizer classes.
  (Jianxiong Dong, Christine Poerschke)

* SOLR-10404: The fetch() streaming expression wouldn't work if a value included query syntax chars (like :+-).
  Fixed, and enhanced the generated query to not pollute the queryCache. (David Smiley)

* SOLR-10423: Disable graph query production via schema configuration <fieldtype ... enableGraphQueries="false">.
  This fixes broken queries for ShingleFilter-containing query-time analyzers when request param sow=false.
  (Steve Rowe)

* SOLR-10425: Fix indexed="false" on numeric PointFields (Tomás Fernández Löbbe, hossman)

* SOLR-10341: SQL AVG function mis-interprets field type. (Joel Bernstein)

* SOLR-10444: SQL interface does not use client cache. (Joel Bernstein)

* SOLR-10420: Solr 6.x leaking one SolrZkClient instance per second (Scott Blum, Cao Manh Dat, Markus Jelsma, Steve Rowe)

* SOLR-10439: The new 'large' attribute had been forgotten in /schema/fields?showDefaults=true (David Smiley)

* SOLR-10527: edismax with sow=false fails to create dismax-per-term queries when any field is boosted.
  (Steve Rowe)

==================  6.5.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.14.v20161028
Apache Calcite 1.11.0

Detailed Change List
----------------------

Upgrade Notes
----------------------
* SOLR-10226: JMX metric "avgTimePerRequest" (and the corresponding metric in the metrics API for
  each handler) used to be a simple non-decaying average based on total cumulative time and the
  number of requests. New Codahale Metrics implementation applies exponential decay to this value,
  which heavily biases the average towards the last 5 minutes. (ab)

* SOLR-8593: Parallel SQL now uses Apache Calcite as its SQL framework. As part of this change
  the default aggregation mode has been changed to facet rather than map_reduce. There has also been changes
  to the SQL aggregate response and some SQL syntax changes. Consult the documentation for full details.


New Features
----------------------

* SOLR-9836: Add ability to recover from leader when index corruption is detected on SolrCore creation.
  (Mike Drob via Mark Miller)

* SOLR-9926: Allow passing arbitrary java system properties to zkcli. (Hrishikesh Gadre via Mark Miller)

* SOLR-9885: Allow pre-startup Solr log management in Solr bin scripts to be disabled. (Mano Kovacs via Mark Miller)

* SOLR-9481: Authentication and Authorization plugins now work in standalone mode if security.json is placed in
  SOLR_HOME on every node. Editing config through API is supported but affects only that one node. (janhoy)

* SOLR-8029: Added new style APIs and a framework for creating new APIs and mapping old APIs to new
  (noble, Steve Rowe, Cassandra Targett, Timothy Potter)

* SOLR-9933: SolrCoreParser now supports configuration of custom SpanQueryBuilder classes.
  (Daniel Collins, Christine Poerschke)

* SOLR-7955: Auto create .system collection on first request if it does not exist (noble)

* SOLR-10087: StreamHandler now supports registering custom streaming expressions from the blob store (Kevin Risden)

* SOLR-9997: Enable configuring SolrHttpClientBuilder via java system property. (Hrishikesh Gadre via Mark Miller)

* SOLR-9912: Add facet.excludeTerms parameter support. (Jonny Marks, David Smiley, Christine Poerschke)

* SOLR-9916: Adds Stream Evaluators to support evaluating values from tuples. Supports boolean,
  numeric, and conditional evaluators. BooleanOperations have been removed in preference of
  BooleanEvaluators. (Dennis Gove)

* SOLR-9903: Stop interrupting the update executor on shutdown, it can cause graceful shutdowns to put replicas into Leader
  Initiated Recovery among other undesirable things. (Mark Miller)

* SOLR-8396: Add support for PointFields in Solr (Ishan Chattopadhyaya, Tomás Fernández Löbbe)

* SOLR-9987: Add support for MultiValued DocValues in PointFields using SortedNumericDocValues (Tomás Fernández Löbbe)

* SOLR-5944: In-place updates of Numeric DocValues. To leverage this, the _version_ field and the updated
  field must both be stored=false, indexed=false, docValues=true. (Ishan Chattopadhyaya, hossman, noble,
  shalin, yonik)

* SOLR-10158: Add support for "preload" option in MMapDirectoryFactory.
  (Amrit Sarkar via Uwe Schindler)

* SOLR-10153 & SOLR-10152: The Unified and Postings based highlighters: Add hl.bs.type=SEPARATOR along with new param
  hl.bs.separator to break passages by a provided single character. (Amrit Sarkar, David Smiley)

* SOLR-10156: Add significantTerms Streaming Expression (Joel Bernstein)

* SOLR-8593: Integrate Apache Calcite into the SQLHandler (Kevin Risden, Cao Manh Dat, Joel Bernstein)

* SOLR-10146: Added button to the Admin UI 'Collection' tab for deleting an inactive shard (Amrit Sarkar, janhoy)

* SOLR-9999: Instrument DirectUpdateHandler2. This registers existing statistics under metrics API and adds
  more metrics to track the rates of update and delete commands. (ab)

* SOLR-9986: Implement DatePointField (Cao Manh Dat, Tomás Fernández Löbbe)

* SOLR-8045: Deploy V2 API at /v2 instead of /solr/v2 (Cao Manh Dat, Noble Paul)

* SOLR-10039: New LatLonPointSpatialField replacement for LatLonType (and some uses of RPT).  Multi-value capable
  indexed geo lat-lon points, query by rect or circle.  Efficient distance sorting/boosting too. (David Smiley)

* SOLR-10250: CloudSolrClient can now return versions for documents added or deleted when "versions=true" is passed.
  However, if there is a leader election while this request is in transit, the versions may not be returned from that
  shard. (Boris Naguet, Ishan Chattopadhyaya)

* SOLR-9045: Make RecoveryStrategy settings configurable. (Christine Poerschke)

* SOLR-10224: Add disk total and disk free metrics. (ab)

* SOLR-10085: SQL result set fields should be ordered by the field list (Joel Bernstein)

* SOLR-10254: significantTerms Streaming Expression should work in non-SolrCloud mode (Joel Bernstein)

* SOLR-10286: string/text fields may now declare themselves as large="true" in the schema.  Large fields are always
  lazy loaded and will only take up space in the document cache if the actual value is < 512KB.  This option
  requires "stored" and must not be multiValued.  It's intended for fields that might have very large values so that
  they don't get cached in memory. (David Smiley)

* SOLR-9185: Solr's edismax and "Lucene"/standard query parsers will no longer split on whitespace before sending
  terms to analysis, if given the "sow=false" request param ("sow"=>"split on whitespace").  This enables multi-term
  source synonyms to match at query-time using SynonymGraphFilterFactory; other analysis components will also now
  work at query time, e.g. ShingleFilterFactory.  By default, and when the "sow=true" param is specified, these
  parsers' behavior remains the same: queries will be split on whitespace before sending individual terms to analysis.
  (Steve Rowe)

Bug Fixes
----------------------

* SOLR-9976: Fix init bug in SegmentsInfoRequestHandlerTest (hossman)

* SOLR-9977: Fix config bug in DistribDocExpirationUpdateProcessorTest that allowed false assumptions
  about when index version changes (hossman)

* SOLR-9979: Macro expansion should not be done in shard requests (Tomás Fernández Löbbe)

* SOLR-9114: NPE using TermVectorComponent, MoreLikeThisComponent in combination with ExactStatsCache (Cao Manh Dat, Varun Thacker)

* SOLR-10049: Collection deletion leaves behind the snapshot metadata (Hrishikesh Gadre via yonik)

* SOLR-10120: A SolrCore reload can remove the index from the previous SolrCore during replication index rollover. (Mark Miller)

* SOLR-10124: Replication can skip removing a temporary index directory in some cases when it should not. (Mark Miller)

* SOLR-9996: Unstored IntPointField returns Long type (Ishan Chattopadhyaya)

* SOLR-10104: BlockDirectoryCache release hooks do not work with multiple directories. (Mike Drob, Mark Miller)

* SOLR-10121: Fix race conditions in HDFS BlockCache that can contribute to corruption in high
  concurrency situations. (yonik)

* SOLR-10141: Upgrade to Caffeine 2.4.0 since v1.0.1 contributed to BlockCache corruption because the
  removal listener was called more than once for some items and not at all for other items. (Ben Manes, yonik)

* SOLR-10114: Reordered delete-by-query causes inconsistenties between shards that have
  child documents (Mano Kovacs, Mihaly Toth, yonik)

* SOLR-10159: When DBQ is reordered with an in-place update, upon whose updated value the DBQ is based
  on, the DBQ fails due to excessive caching in DeleteByQueryWrapper (Ishan Chattopadhyaya)

* SOLR-10020: CoreAdminHandler silently swallows some errors. (Mike Drob via Erick Erickson)

* SOLR-10063: CoreContainer shutdown has race condition that can cause a hang on shutdown. (Mark Miller)

* SOLR-10170: ClassCastException in RecoveryStrategy. (Mark Miller)

* SOLR-9846: Overseer is not always closed after being started. (Mark Miller)

* SOLR-10168: ShardSplit can fail with NPE in OverseerCollectionMessageHandler#waitForCoreAdminAsyncCallToComplete. (Mark Miller)

* SOLR-9824: Some bulk update paths could be very slow due to CUSC polling. (David Smiley, Mark Miller)

* SOLR-10055: Linux installer now renames existing bin/solr.in.* as bin/solr.in.*.orig to make the installed config in
  /etc/defaults be the one found by default when launching solr manually. (janhoy)

* SOLR-10196: ElectionContext#runLeaderProcess can hit NPE on core close. (Mark Miller)

* SOLR-10225: Fix HDFS BlockCache evictions metric to not count explicit removal
  due to a directory close. (yonik)

* SOLR-10088: Installer script does not put zoo.cfg in SOLR_HOME (janhoy)

* SOLR-10226: add back "totalTime" metric to all handlers. See also the back-compat note. (ab)

* SOLR-9838: "inc" atomic update doesn't respect default field value (hoss, Amrit Sarkar, Ishan Chattopadhyaya)

* SOLR-10269: MetricsHandler JSON output incorrect. (ab)

* SOLR-10279: The autoAddReplica feature can result in SolrCores being assigned new shards when using
  legacyCloud=false and will also fail on a state check when taking over a core registration with a new
  core. (Mark Miller, Hrishikesh Gadre, Patrick Dvorack)

* SOLR-10184: Fix bin/solr so it can run properly on java9 (hossman, Uwe Schindler)

* SOLR-9516: Admin UI (angular) now works with Kerberos, by excluding serving of /solr/libs/* through
  SolrDispatchFilter. (Cassandra Targett, Amrit Sarkar via Ishan Chattopadhyaya)

* SOLR-10302: Solr's zkcli scripts now able to find the metrics libraries, which it couldn't earlier (kiran, Ishan Chattopadhyaya)

* SOLR-10283: Learning to Rank (LTR) SolrFeature to reject searches with missing efi (External Feature Information) used by fq.
  (Christine Poerschke)

* SOLR-10237: Poly-fields should work with subfields that have docValues=true (Tomás Fernández Löbbe, David Smiley)

* SOLR-10218: The Schema API commands "add-field-type" and "replace-field-type" improperly specify SimilarityFactory params.
  (Benjamin Deininger, Troy Mohl, Steve Rowe)

* SOLR-10319: SolrCore "instanceDir" metric not visible in JMX. (ab)

Optimizations
----------------------

* SOLR-9941: Clear the deletes lists at UpdateLog before replaying from log. This prevents redundantly pre-applying
  DBQs, during the log replay, to every update in the log as if the DBQs were out of order. (hossman, Ishan Chattopadhyaya)

* SOLR-9764: All filters that match all documents in the index now share the same memory (DocSet).
  (Michael Sun, yonik)

* SOLR-9584: Support Solr being proxied with another endpoint than default /solr, by using relative links
  in AdminUI javascripts (Yun Jie Zhou via janhoy)

* SOLR-10143: PointFields will create IndexOrDocValuesQuery when a field is both, indexed=true and docValues=true
  (Tomás Fernández Löbbe)

* SOLR-10273: The field with the longest value (if it exceeds 4K) is moved to be last in the Lucene Document in order
  to benefit from stored field optimizations in Lucene that can avoid reading it when it's not needed.  If the field is
  multi-valued, they all move together to the end to retain order. (David Smiley)

Other Changes
----------------------
* SOLR-9980: Expose configVersion in core admin status (Jessica Cheng Mallet via Tomás Fernández Löbbe)

* SOLR-9972: SpellCheckComponent collations and suggestions returned as a JSON object rather than a list
  (Christine Poerschke in response to bug report from Ricky Oktavianus Lazuardy)

* SOLR-9983: Fixing NullPointerException failure by TestManagedSchemaThreadSafety
  adding check for Zookeeper session expiration (Steve Rowe, Mikhail Khludnev)

* SOLR-10043: Reduce logging of pre-start log rotation (janhoy)

* SOLR-10018: Increase the default hl.maxAnalyzedChars to 51200 for the Unified & Postings Highlighter so that all
  highlighters now have this same default. (David Smiley)

* SOLR-6246: Added tests to check that the changes in LUCENE-7564 and LUCENE-7670
  enable AnalyzingInfixSuggester and BlendedInfixSuggester to play nicely with core reload.
  SolrSuggester.build() now throws SolrCoreState.CoreIsClosedException when interrupted
  by a core reload/shutdown. (Steve Rowe)

* SOLR-9800: Factor out FacetComponent.newSimpleFacets method. (Jonny Marks via Christine Poerschke)

* SOLR-9914: SimpleFacets: refactor "contains" check into "SubstringBytesRefFilter" class.
  (Jonny Marks, David Smiley, Christine Poerschke)

* SOLR-10072: The test TestSelectiveWeightCreation appears to be unreliable. (Michael Nilsson via Mark Miller)

* SOLR-10011: Refactor PointField & TrieField to now have a common base class, NumericFieldType. The
  TrieField.TrieTypes and PointField.PointTypes are now consolidated to NumericFieldType.NumberType. This
  refactoring also fixes a bug whereby PointFields were not using DocValues for range queries for
  indexed=false, docValues=true fields. (Ishan Chattopadhyaya, Tomás Fernández Löbbe)

* SOLR-9890: factor out ShardResultTransformerUtils.[un]marshSortValue methods
  (Judith Silverman, Christine Poerschke)

* SOLR-9966: Convert/migrate tests using EasyMock to Mockito (Cao Manh Dat,  Uwe Schindler)

* SOLR-10173: Make HttpShardHandlerFactory.getReplicaListTransformer more extensible.
  (Ramsey Haddad via Christine Poerschke)

* SOLR-9842: UpdateRequestProcessors have no way to guarantee the closing of resources used for a request.
  (Mark Miller)

* SOLR-9848: Lower solr.cloud.wait-for-updates-with-stale-state-pause back down from 7 seconds.
  (Mark Miller)

* SOLR-10020: Cannot reload a core if it fails initialization. (Mike Drob via Erick Erickson)

* SOLR-9450: The docs/ folder in the binary distribution now contains a single index.html file linking
  to the online documentation, reducing the size of the download (janhoy, Shawn Heisey, Uwe Schindler)

* SOLR-7453: Remove replication & backup scripts in the solr/scripts directory of the checkout (Varun Thacker)

* SOLR-10214: Remove unused HDFS BlockCache metrics and add storeFails, as well as adding total
  counts for lookups, hits, and evictions. (yonik)

* SOLR-10134: EmbeddedSolrServer responds on Schema API requests (Robert Alexandersson via Mikhail Khludnev)

* SOLR-10219: re-enable HDFS tests under JDK9 (hossman, Uwe Schindler)

* SOLR-10155: For numeric types facet.contains= and facet.prefix= are now rejected.
  (Gus Heck, Christine Poerschke)

* SOLR-10171: Add Constant Reduction Rules to Calcite Planner (Kevin Risden)

* SOLR-10230: default TTL of PKIAuthenticationPlugin increased to 10secs (noble)

* SOLR-10235: Fix DIH's TestJdbcDataSource to work with Java 9 and other Java runtimes that
  do not use the same DriverManager implementation like Oracle's original one. The test now
  uses a fully implemented Driver instance returning a mock connection. The test also works
  correct now if other drivers were installed before test execution (e.g., through IDE).
  (hossman, Uwe Schindler)

* SOLR-8876: change morphline test config files to work around 'importCommands' bug when using java9 (hossman)

* SOLR-10247: Support non-numeric metrics and a "compact" format of /admin/metrics output. (ab)

* SOLR-9990: Add PointFields in example/default schemas (Tomás Fernández Löbbe)

==================  6.4.2 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.14.v20161028

Detailed Change List
----------------------

Bug Fixes
----------------------
* SOLR-10130, SOLR-10182: Serious performance degradation in Solr 6.4.1 due to the new metrics collection.
  Default settings in solrconfig.xml /config/indexConfig/metrics have been changed to turn off
  IndexWriter metrics collection. Directory level metrics collection has been completely removed until
  a better design is found. (ab, ishan)

* SOLR-10138: Transaction log replay can hit an NPE due to new Metrics code. (ab)

* SOLR-10083: Fix instanceof check in ConstDoubleSource.equals (Pushkar Raste via Christine Poerschke)

* SOLR-10190: Fix NPE in CloudSolrClient when reading stale alias (Janosch Woschitz via Tomás Fernández Löbbe)

* SOLR-10192: Fix copy/paste in solr-ltr pom.xml template. (Christine Poerschke)

==================  6.4.1 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.14.v20161028

Bug Fixes
----------------------
* SOLR-9969: "Plugin/Stats" section of the UI doesn't display empty metric types (Tomás Fernández Löbbe)

* SOLR-8491: solr.cmd SOLR_SSL_OPTS is overwritten (Sam Yi, Andy Hind, Marcel Berteler, Kevin Risden)

* SOLR-10031: Validation of filename params in ReplicationHandler (Hrishikesh Gadre, janhoy)

* SOLR-10054: Core swapping doesn't work with new metrics changes in place (ab)

==================  6.4.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.14.v20161028

Detailed Change List
----------------------

Upgrade Notes
----------------------

* SOLR-9166: Export handler returns zero for numeric fields that are not in the original doc. One
  consequence of this change is that you must be aware that some tuples will not have values if
  there were none in the original document.

* SOLR-8785: Metrics related classes in org.apache.solr.util.stats have been removed in favor of
  the dropwizard metrics library. Any custom plugins using these classes should be changed to use
  the equivalent classes from the metrics library.
  As part of this, the following changes were made to the output of Overseer Status API:
  * The "totalTime" metric has been removed because it is no longer supported
  * The metrics "75thPctlRequestTime", "95thPctlRequestTime", "99thPctlRequestTime"
    and "999thPctlRequestTime" in Overseer Status API have been renamed to "75thPcRequestTime", "95thPcRequestTime"
    and so on for consistency with stats output in other parts of Solr.
  * The metrics "avgRequestsPerMinute", "5minRateRequestsPerMinute" and "15minRateRequestsPerMinute" have been
    replaced by corresponding per-second rates viz. "avgRequestsPerSecond", "5minRateRequestsPerSecond"
    and "15minRateRequestsPerSecond" for consistency with stats output in other parts of Solr.

* SOLR-9708: You are encouraged to try out the UnifiedHighlighter by setting hl.method=unified and report feedback. It
  might become the default in 7.0. It's more efficient/faster than the other highlighters, especially compared to the
  original Highlighter. That said, some options aren't supported yet.
  It will get more features in time, especially with your input. See HighlightParams.java
  for a listing of highlight parameters annotated with which highlighters use them.
  hl.useFastVectorHighlighter is now considered deprecated in lieu of hl.method=fastVector.

* SOLR-9712: maxWarmingSearchers now defaults to 1, and more importantly commits will now block if this
  limit is exceeded instead of throwing an exception (a good thing). Consequently there is no longer a
  risk in overlapping commits.  Nonetheless users should continue to avoid excessive committing. Users are
  advised to remove any pre-existing maxWarmingSearchers entries from their solrconfig.xml files.

* SOLR-7466: complexphrase query parser now supports leading wildcards, beware of its' possible heaviness.
  Users are encouraged to use ReversedWildcardFilter in index time analysis.

New Features
----------------------
* SOLR-9918: Add SkipExistingDocumentsProcessor that skips duplicate inserts and ignores updates to missing docs
  (Tim Owen via koji)

* SOLR-9293: Solrj client support for hierarchical clusters and other topics
  marker. (Dawid Weiss)

* SOLR-9681: FacetModule / JSON Facet API added the ability to add filters directly to
  any facet command.  The filters are applied after any domain change operations.
  Example:  { type:terms, field:category, filter:"user:yonik" }
  (yonik)

* SOLR-9442, SOLR-9787: Adds Array of Name Type Value (json.nl=arrntv) style to JSONResponseWriter.
  (Jonny Marks, Christine Poerschke, hossman)

* SOLR-8542: Adds Solr Learning to Rank (LTR) plugin for reranking results with machine learning models.
  (Michael Nilsson, Diego Ceccarelli, Joshua Pantony, Jon Dorando, Naveen Santhapuri, Alessandro Benedetti, David Grohmann, Christine Poerschke)

* SOLR-9055: Make collection backup/restore extensible. (Hrishikesh Gadre, Varun Thacker, Mark Miller)

* SOLR-9682: JSON Facet API: added "param" query type to facet domain filter specification to obtain
  filters via query parameters. (yonik)

* SOLR-9038: Add a command-line tool to manage the snapshots functionality (Hrishikesh Gadre via yonik)

* SOLR-9633: Limit memory consumed by FastLRUCache with a new 'maxRamMB' config parameter.
  (yonik, Michael Sun, shalin)

* SOLR-9666: SolrJ LukeResponse support dynamic fields (Fengtan via Kevin Risden)

* SOLR-9077: Streaming expressions should support collection alias (Kevin Risden)

* SOLR-9324: Support Secure Impersonation / Proxy User for solr authentication
  (Gregory Chanan, Hrishikesh Gadre via yonik)

* SOLR-9721: javabin Tuple parser for streaming and other end points (noble)

* SOLR-9708: Added UnifiedSolrHighlighter, a highlighter adapter for Lucene's UnifiedHighlighter. The adapter is a
  derivative of the PostingsSolrHighlighter, supporting mostly the same parameters with some differences.
  Introduced "hl.method" parameter which can be set to original|fastVector|postings|unified to pick the highlighter at
  runtime without the need to modify solrconfig from the default configuration. hl.useFastVectorHighlighter is now
  considered deprecated in lieu of hl.method=fastVector. (Timothy Rodriguez, David Smiley)

* SOLR-9728: Ability to specify Key Store type in solr.in.sh file for SSL (Michael Suzuki, Kevin Risden)

* SOLR-5043: New solr.dns.prevent.reverse.lookup system property that can be used to prevent long core
  (re)load delays on systems with missconfigured hostname/DNS (hossman)

* SOLR-9844: FieldCache information fetched via the mbeans handler or seen via the UI now displays the total size used.
  The individual cache entries in the response are now formatted better as well. (Varun Thacker)

* SOLR-9513: Generic authentication plugins (GenericHadoopAuthPlugin and ConfigurableInternodeAuthHadoopPlugin) that delegate
  all functionality to Hadoop authentication framework. (Hrishikesh Gadre via Ishan Chattopadhyaya)

* SOLR-9860: Enable configuring invariantParams via HttpSolrClient.Builder (Hrishikesh Gadre, Ishan Chattopadhyaya)

* SOLR-4735, SOLR-9921: Improve metrics reporting. This uses the dropwizard metric library, adding an internal
  API for registering and reporting metrics from Solr components. Several new metrics and an improved JMX
  reporter have been added (Alan Woodward, Jeff Wartes, Christine Poerschke, Kelvin Wong, shalin, ab)

* SOLR-9788: Use instrumented jetty classes provided by the dropwizard metric library. (shalin)

* SOLR-9805: Use metrics-jvm library to instrument jvm internals such as GC, memory usage and others. (shalin)

* SOLR-9812, SOLR-9911, SOLR-9960: Added a new /admin/metrics API to return all metrics collected by Solr via API.
  API supports four optional multi-valued parameters:
  - 'group' (all,jvm,jetty,node,core),
  - 'type' (all,counter,timer,gauge,histogram),
  - 'prefix' that filters the returned metrics,
  - 'registry' that selects one or more registries by prefix (eg. solr.jvm,solr.core.collection1)
  - Example: http://localhost:8983/solr/admin/metrics?group=jvm,jetty&type=counter
  - Example: http://localhost:8983/solr/admin/metrics?group=jvm&prefix=buffers,os
  - Example: http://localhost:8983/solr/admin/metrics?registry=solr.node,solr.core&prefix=ADMIN
  (shalin, ab)

* SOLR-9884: Add version to segments handler output (Steven Bower via Erick Erickson)

* SOLR-9725: Substitute properties into JdbcDataSource configuration ( Jamie Jackson, Yuri Sashevsky via Mikhail Khludnev)

* SOLR-9877: SOLR-9923: SOLR-9948: Use instrumented http client and connection pool in HttpShardHandler and
  UpdateShardHandler. The metrics are collected per query-less URL and method by default but it can be configured
  to host/method and per-method as well. (shalin)

* SOLR-9880: Add Ganglia, Graphite and SLF4J metrics reporters. (ab)

* SOLR-9897: Add hl.requireFieldMatch toggle support when using the UnifiedHighlighter.  Defaults to false like the
  other highlighters that support this. (David Smiley)

* SOLR-9905: Add NullStream to isolate the performance of the ExportWriter (Joel Bernstein)

* SOLR-9891: Add mkroot command to bin/solr and bin/solr.cmd (Erick Erickson)

* SOLR-9668,SOLR-7197: introduce cursorMark='true' in SolrEntityProcessor (Yegor Kozlov, Raveendra Yerraguntl via Mikhail Khludnev)

* SOLR-9684: Add priority Streaming Expression (Joel Bernstein, David Smiley)

* SOLR-9896: Instrument and collect metrics from query, update, core admin and core load thread pools. (shalin)

* SOLR-9854: Collect metrics for index merges and index store IO (ab)

* SOLR-8530: Add HavingStream to Streaming API and StreamingExpressions (Joel Bernstein)

* SOLR-7466: Enable leading wildcard in complexphrase query parser, optimize it with  ReversedWildcardFilterFactory
  when it's provided (Mikhail Khludnev)

* SOLR-9935: Add hl.fragsize support when using the UnifiedHighlighter to avoid snippets/Passages that are too small.
  Defaults to 70. (David Smiley)

* SOLR-9856: Collect metrics for shard replication and tlog replay on replicas (ab).

* SOLR-9886: Add a 'enable' flag to caches to enable/disable them (Pushkar Raste, noble)

* SOLR-9947: Clean up some SolrInfoMBean categories. Add an alternative hierarchical view in JMX
  for SolrInfoMBeans, which uses similar conventions to SolrJmxReporter. (ab)

Optimizations
----------------------
* SOLR-9704: Facet Module / JSON Facet API: Optimize blockChildren facets that have
  filters specified by using those filters as acceptDocs. (yonik)

* SOLR-9726: Reduce number of lookupOrd calls made by the DocValuesFacets.getCounts method.
  (Jonny Marks via Christine Poerschke)

* SOLR-9772: Deriving distributed sort values (fieldSortValues) should reuse
  comparator and only invalidate leafComparator. (John Call via yonik)

* SOLR-9786: FieldType has a new getSetQuery() method that can take a set of terms
  and create a more efficient query (such as TermsQuery).  The solr query parser has been
  changed to use this method when appropriate.  The parser also knows when it is being
  used to parse a filter and will create TermsQueries from large lists of normal terms
  or numbers, resulting in a query that will execute faster.  This also acts to avoid
  BooleanQuery maximum clause limit.  Query parsing itself has also been optimized,
  resulting in less produced garbage and 5-7% better performance.
  (yonik)

* SOLR-9902: StandardDirectoryFactory should use Files API for it's move implementation. (Mark Miller, Mike Drob)

Bug Fixes
----------------------
* SOLR-9701: NPE in export handler when "fl" parameter is omitted.
  (Erick Erickson)

* SOLR-9433: SolrCore clean-up logic uses incorrect path to delete dataDir on failure to create a core.
  (Evan Sayer, shalin)

* SOLR-9360: Solr script not properly checking SOLR_PID
  (Alessandro Benedetti via Erick Erickson)

* SOLR-9716: RecoveryStrategy sends prep recovery command without setting read time out which can cause
  replica recovery to hang indefinitely on network partitions. (Cao Manh Dat, shalin)

* SOLR-9624: In Admin UI, do not attempt to highlight CSV output (Alexandre Rafalovitch)

* SOLR-9005: In files example, add a guard condition to javascript URP script (Alexandre Rafalovitch)

* SOLR-9519: JSON Facet API: don't stop at an empty facet bucket if any sub-facets still have a chance
  of matching something due to filter exclusions (which can widen the domain again).
  (Michael Sun, yonik)

* SOLR-9740: A bug in macro expansion of multi-valued parameters caused non-expanded values
  after the first expanded value in the same multi-valued parameter to be dropped.
  (Erik Hatcher, yonik)

* SOLR-9751: PreAnalyzedField can cause managed schema corruption. (Steve Rowe)

* SOLR-9736: Solr resolves the collection name against the first available leader or first replica
  of the first slice. This puts undue pressure on leader cores and likely on the wrong ones. This is
  fixed to randomly pick a leader on updates or a replica core otherwise. (Cao Manh Dat via shalin)

* SOLR-9284: The HDFS BlockDirectoryCache should not let it's keysToRelease or names maps grow indefinitely.
  (Mark Miller, Michael Sun)

* SOLR-9729: JDBCStream improvements (Kevin Risden)

* SOLR-9626: new Admin UI now also highlights matched terms in the Analysis screen. (Alexandre Rafalovitch)

* SOLR-9512: CloudSolrClient's cluster state cache can break direct updates to leaders (noble)

* SOLR-5260: Facet search on a docvalue field in a multi shard collection (Trym Møller, Erick Erickson)

* SOLR-9768: RecordingJsonParser produces incomplete json (Wojciech Stryszyk via ab)

* SOLR-9616: Solr throws exception when expand=true on empty index (Timo Hund via Ishan Chattopadhyaya)

* SOLR-9832: Schema modifications are not immediately visible on the coordinating node. (Steve Rowe)

* SOLR-9834: A variety of spots in the code can create a collection zk node after the collection has been
  removed. (Mark Miller)

* SOLR-9707: Don't forward DeleteByQuery requests to down replicas. (Jessica Cheng Mallet via Varun Thacker)

* SOLR-9823: CoreContainer incorrectly setting MDCLoggingContext for core (Jessica Cheng Mallet via Erick Erickson)

* SOLR-1953: It may be possible for temporary files to accumulate until the Solr process is shut down.
  (Karl Wright, Mark Miller)

* SOLR-9847: Stop blocking further schema updates while waiting for a pending update to propagate to other replicas.
  This reduces the likelihood of a (time-limited) distributed deadlock during concurrent schema updates.
  (Mark Miller, Steve Rowe)

* SOLR-9760: Windows script doesn't need write permission (Alex Crome by Mikhail Khludnev)

* SOLR-9699,SOLR-4668: fix exception from core status in parallel with core reload (Mikhail Khludnev)

* SOLR-9859: replication.properties cannot be updated after being written and neither replication.properties or
  index.properties are durable in the face of a crash. (Pushkar Raste, Chris de Kok, Cao Manh Dat, Mark Miller)

* SOLR-9901: Implement move in HdfsDirectoryFactory. (Mark Miller)

* SOLR-9900: fix false positives on range queries with ReversedWildcardFilterFactory (Yonik Seeley via Mikhail Khludnev)

* SOLR-9495: AIOBE with confusing message for incomplete sort spec in Streaming Expression (Gus Heck, Joel Bernstein)

* SOLR-9154: Fix DirectSolrSpellChecker to work when added through the Config API. (Anshum Gupta)

* SOLR-9919: random Streaming Expression is not registered in /stream or /graph handler (Joel Bernstein)

* SOLR-7495: Support Facet.field on a non-DocValued, single-value, int field (Varun Thacker, Scott Stults)

* SOLR-9917: JSON Facet API percentile function caused a NullPointerException in distributed mode when
  there were no values in a bucket from a shard. (yonik)

* SOLR-9931: JSON Facet API hll (hyper-log-log) function returned 0 for non-empty buckets with no field values
  in local mode, but nothing for distributed mode.  Both modes now return 0.  (yonik)

* SOLR-9503: NPE in Replica Placement Rules when using Overseer Role with other rules (Tim Owen via noble)

* SOLR-9883: Example schemaless solr config files can lead to invalid tlog replays: when updates are buffered,
  update processors ordered before DistributedUpdateProcessor, e.g. field normalization, are never run. (Steve Rowe)

* SOLR-9644: SimpleMLTQParser and CloudMLTQParser did not handle field boosts properly
  and CloudMLTQParser included extra strings from the field definitions in the query.
  (Ere Maijala via Anshum Gupta)

* SOLR-9954: Prevent against failure during failed snapshot cleanup from swallowing the actual cause
  for the snapshot to fail. (thelabdude)

Other Changes
----------------------

* SOLR-7539: Upgrade the clustering plugin to Carrot2 3.15.0. (Dawid Weiss)

* SOLR-9621: Remove several Guava & Apache Commons calls in favor of java 8 alternatives.
  (Michael Braun via David Smiley)

* SOLR-9720: Refactor Responsewriters to remove dependencies on TupleStream,
  Tuple, Explanation (noble)

* SOLR-9717: Refactor '/export' to not hardcode the JSON output and to use an API (noble)

* SOLR-9739: JavabinCodec implements PushWriter interface (noble)

* SOLR-8332: Factor HttpShardHandler[Factory]'s url shuffling out into a ReplicaListTransformer class.
  (Christine Poerschke, Noble Paul)

* SOLR-9597: Add setReadOnly(String ...) to ConnectionImpl (Kevin Risden)

* SOLR-9609: Change hard-coded keysize from 512 to 1024 (Jeremy Martini via Erick Erickson)

* SOLR-8785: Use Dropwizard Metrics library for core metrics. The copied over code in
  org.apache.solr.util.stats has been removed. (Jeff Wartes, Kelvin Wong, Christine Poerschke, shalin)

* SOLR-9784: Refactor CloudSolrClient to eliminate direct dependency on ZK (noble)

* SOLR-9801: Upgrade jetty to 9.3.14.v20161028 (shalin)

* SOLR-9783: (Search|Top)Group[s]ShardResponseProcessor.process: turned sortWithinGroup null check into assert.
  (Christine Poerschke)

* SOLR-9660: in GroupingSpecification factor [group](sort|offset|limit) into [group](sortSpec)
  (Judith Silverman, Christine Poerschke)

* SOLR-9819: Upgrade commons-fileupload to 1.3.2, fixing a potential vulnerability CVE-2016-3092 (Anshum Gupta)

* SOLR-9827: ConcurrentUpdateSolrClient creates a RemoteSolrException if the remote host responded with a non-ok
  response (instead of a SolrException) and includes the remote error message as part of the exception message
  (Tomás Fernández Löbbe)

* SOLR-9846: OverseerAutoReplicaFailoverThread can take too long to stop and leak out of unit tests. (Mark Miller)

* SOLR-8959: Refactored TestSegmentSorting out of TestMiniSolrCloudCluster (hossman)

* SOLR-9874: Solr will reject CREATEALIAS requests if target collections don't exist (Tomás Fernández Löbbe)

* SOLR-9878: fixing lazy logic for retrieving ReversedWildcardFilterFactory in SolrQueryParserBase (Mikhail Khludnev)

* SOLR-9758: refactor preferLocalShards implementation (Christine Poerschke)

* SOLR-9448: providing a test to workaround a differently named uniqueKey field (Mikhail Khludnev)

* SOLR-9899: StandardDirectoryFactory should use optimizations for all FilterDirectorys not just NRTCachingDirectory.
  (Mark Miller)

* SOLR-9915: PeerSync alreadyInSync check is not backwards compatible and results in full replication during a rolling restart
  (Tim Owen via noble)

* SOLR-3990: Moves getIndexSize() from ReplicationHandler to SolrCore (Shawn Heisey)

* SOLR-9944: Map the nodes function name to the GatherNodesStream (Joel Bernstein)

* SOLR-9777: IndexFingerprinting should use getCombinedCoreAndDeletesKey() instead of getCoreCacheKey() for per-segment caching (Ishan Chattopadhyaya)

* SOLR-9934: SolrTestCase.clearIndex has been improved to take advantage of low level test specific logic that
  clears the index metadata more completely then a normal *:* DBQ can due to update versioning.  (hossman)

* SOLR-9893: Update Mockito to version 2.6.2 for Java 9 support. Disable all legacy EasyMock tests when running
  on Java 9 until they were migrated to Mockito. (Uwe Schindler)

==================  6.3.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.12.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.8.v20160314

Detailed Change List
----------------------

Upgrade Notes
----------------------

* If you use the JSON Facet API (json.facet) with method=stream, you must now set sort='index asc' to get the streaming
  behavior; otherwise it won't stream.  Reminder: "method" is a hint that doesn't change defaults of other parameters.

* If you use the JSON Facet API (json.facet) to facet on a numeric field and if you use mincount=0 or if you set the
  prefix, then you will now get an error as these options are incompatible with numeric faceting.

* Solr's logging verbosity at the INFO level has been greatly reduced, and
  you may need to update the log configs to use the DEBUG level to see all the
  logging messages you used to see at INFO level before.

* We are no longer backing up solr.log and solr_gc.log files in date-stamped copies forever. If you relied on
  the solr_log_<date> or solr_gc_log_<date> being in the logs folder that will no longer be the case.
  See SOLR-9570 for details.

* The create/deleteCollection methods on MiniSolrCloudCluster have been
  deprecated.  Clients should instead use the CollectionAdminRequest API.  In
  addition, MiniSolrCloudCluster#uploadConfigDir(File, String) has been
  deprecated in favour of #uploadConfigSet(Path, String)

* The bin/solr.in.sh (bin/solr.in.cmd on Windows) is now completely commented by default. Previously, this wasn't so,
  which had the effect of masking existing environment variables.

New Features
----------------------
* SOLR-5725: facet.method=enum can bypass exact counts calculation with facet.exists=true, it just returns 1 for
  terms which exists in result docset. (Alexey Kozhemiakin, Sebastian Koziel, Radoslaw Zielinski via Mikhail Khludnev)

* SOLR-9127: Excel workbook (.xlsx) response writer. use 'wt=xlsx' (Tony Moriarty, noble)

* SOLR-9469: JettySolrRunner now has the option of restarting using a different
  port (Alan Woodward)

* SOLR-9319: DELETEREPLICA can accept a 'count' and remove appropriate replicas (Nitin Sharma, noble)

* SOLR-8186: Reduce logging to logs/solr-<port>-console.log when not running in foreground mode
  Show timestamp also in foreground log. Also removes some logging noise. (janhoy)

* SOLR-8487: Adds CommitStream to support sending commits to a collection being updated. (Dennis Gove)

* SOLR-9534: You can now set Solr's log level through environment variable SOLR_LOG_LEVEL
  Also adds conveience arguments -q (quiet: WARN) and -v (verbose: DEBUG) to bin/solr (janhoy)

* SOLR-9537: Support facet scoring with the scoreNodes expression (Joel Bernstein)

* SOLR-9558: DIH TemplateTransformerto to support multivalued fields (Ted Sullivan via noble)

* SOLR-9557: Every implicit requesthandler now has a default 'useParams' attribute (noble)

* SOLR-9572: config API to show expanded useParams for request handlers inline (noble)

* SOLR-9258: Optimizing, storing and deploying AI models with Streaming Expressions (Cao Manh Dat, Joel Bernstein)

* SOLR-9205: Added method LukeResponse.getSchemaFlags() which returns field
  information as an EnumSet (Fengtan, Alan Woodward)

* SOLR-9520: Kerberos delegation support in SolrJ (Ishan Chattopadhyaya, noble)

* SOLR-9146: Parallel SQL engine should support >, >=, <, <=, <>, != syntax (Timothy Potter, Joel Bernstein, Kevin Risden)

* SOLR-9337: Add fetch Streaming Expression (Joel Bernstein)

* SOLR-9103: Restore ability for users to add custom Streaming Expressions (Cao Manh Dat)

* SOLR-9657: New TemplateUpdateProcessorFactory added (noble)

* SOLR-9417: Allow daemons to terminate when they finish iterating a topic (Joel Bernstein)

* SOLR-8370: Display configured Similarity in Schema-Browser, both global/default and per-field/field-type
  (janhoy, Alexandre Rafalovitch)

* SOLR-9326: Ability to create/delete/list snapshots at collection level.
  (Hrishikesh Gadre via yonik)

* SOLR-9662: New parameter -u <user:pass> in bin/post to pass basicauth credentials (janhoy)

* SOLR-9654: Add "overrequest" parameter to JSON Facet API to control amount of overrequest
  on a distributed terms facet. (yonik)

* SOLR-2212: Add a factory class corresponding to Lucene's NoMergePolicy. (Lance Norskog, Cao Manh Dat via shalin)

* SOLR-9670: Support SOLR_AUTHENTICATION_OPTS in solr.cmd (janhoy)

* SOLR-9559: Add ExecutorStream to execute stored Streaming Expressions (Joel Bernstein)

* SOLR-1085: Add support for MoreLikeThis queries and responses in SolrJ client.
  (Maurice Jumelet, Bill Mitchell, Cao Manh Dat via shalin)

Bug Fixes
----------------------

* SOLR-9310: PeerSync fails on a node restart due to IndexFingerPrint mismatch (Pushkar Raste, noble)

* SOLR-9484: The modify collection API should wait for the modified properties to show up in the
  cluster state. (Cao Manh Dat, shalin)

* SOLR-9507: CoreContainer threads now correctly set their MDC logging values
  (Alan Woodward)

* SOLR-9522: Improve error handling in ZKPropertiesWriter (Varun Thacker)

* SOLR-8080: bin/solr start script now exits with informative message if using wrong Java version (janhoy)

* SOLR-9475: bin/install_solr_service.sh script got improved detection of Linux distro, especially within
  virtualized/Docker environment through parsing of /etc/*-release files. Now also supports CentOS. (janhoy)

* SOLR-9524: SolrIndexSearcher.getIndexFingerprint uses dubious synchronization (Mike Drob, noble)

* SOLR-9542: Kerberos delegation tokens requires Jackson library (Ishan Chattopadhyaya via noble)

* SOLR-9330: Fix AlreadyClosedException on admin/mbeans?stats=true (Mikhail Khludnev)

* SOLR-9411: Better validation for Schema API add-field and add-dynamic-field (janhoy, Steve Rowe)

* SOLR-9504: A replica with an empty index becomes the leader even when other more qualified replicas
  are in line. (shalin)

* SOLR-9554: Fix NullPointerException when cores are loaded in parallel and switch schema.xml to managed-scheme.
 (Alan Woodward, Mikhail Khludnev)

* SOLR-9556: OverseerAutoFailoverReplicaThread was not exiting on interrupt
  (Alan Woodward)

* SOLR-9563: Collection creation could fail if an ADDREPLICA subrequest arrived
  at a node before its local state had updated with the new collection data
  (Alan Woodward)

* SOLR-9278: Index replication interactions with IndexWriter can cause deadlock. (Xunlong via Mark Miller)

* SOLR-9604: Pooled SSL connections were not being re-used (Alan Woodward,
  Mikhail Khludnev, hossman)

* SOLR-9325: solr.log is now written to $SOLR_LOGS_DIR without changing log4j.properties (janhoy)

* SOLR-9518: Kerberos Delegation Tokens don't work without a chrooted ZK (Ishan Chattopadhyaya,via noble)

* SOLR-9687: Fixed Interval Facet count issue in cases of open/close intervals on the same values
 (Andy Chillrud, Tomás Fernández Löbbe)

* SOLR-9441: Solr collection backup on HDFS can only be manipulated by the Solr process owner.
 (Hrishikesh Gadre via Mark Miller)

* SOLR-9536: OldBackupDirectory timestamp field needs to be initialized to avoid NPE.
 (Hrishikesh Gadre, hossman via Mark Miller)

* SOLR-2039: Multivalued fields with dynamic names does not work properly with DIH.
  (K A, ruslan.shv, Cao Manh Dat via shalin)

* SOLR-4164: group.limit=-1 was not supported for grouping in distributed mode.
  (Cao Manh Dat, Lance Norskog, Webster Homer, hossman, yonik)

* SOLR-9692: blockUnknown property makes inter-node communication impossible (noble)

* SOLR-2094: XPathEntityProcessor should reinitialize the XPathRecordReader instance if
  the 'forEach' or 'xpath' attributes are templates & it is not a root entity (Cao Manh Dat, noble)

* SOLR-9697: zk upconfig broken on windows (Xavier Jmlucjav via janhoy)

Optimizations
----------------------

* SOLR-9374: Speed up Jmx MBean retrieval for FieldCache. (Tim Owen via shalin)

* SOLR-9449: Example schemas do not index _version_ field anymore because the field
  has DocValues enabled already. (shalin)

* SOLR-9447: Do not clone SolrInputDocument if update processor chain does not contain custom processors.
  (shalin)

* SOLR-9452: JsonRecordReader should not deep copy document before handler.handle(). (noble, shalin)

* SOLR-9142: JSON Facet API: new method=dvhash can be chosen for fields with high cardinality. (David Smiley)

* SOLR-9446: Leader failure after creating a freshly replicated index can send nodes into recovery even if
  index was not changed (Pushkar Raste, noble)

* SOLR-9592: retrieving docValues as stored values was sped up by using the proper leaf
  reader rather than ask for a global view.  In extreme cases, this leads to a 100x speedup.
  (Takahiro Ishikawa, yonik)

* SOLR-9566: Don't put replicas into recovery when first creating a Collection
  (Alan Woodward)

* SOLR-9546: Eliminate unnecessary boxing/unboxing going on in SolrParams (Pushkar Raste, noble)

* SOLR-9506: cache IndexFingerprint for each segment (Pushkar Raste, yonik, noble)

* SOLR-7506: Roll over GC logs by default via bin/solr scripts (shalin, janhoy)

Other Changes
----------------------

* SOLR-9412: Add failOnMissingParams option to MacroExpander, add TestMacroExpander class.
  (Jon Dorando, Christine Poerschke)

* SOLR-9406: SolrSuggester should selectively register close hook (Gethin James, Joel Bernstein)

* SOLR-8961: Add a test module for solr-test-framework (Alan Woodward)

* SOLR-9474: MiniSolrCloudCluster will not reuse ports by default when
  restarting its JettySolrRunners (Alan Woodward)

* SOLR-9498: Remove HDFS properties from DIH solrconfig.xml, as started in SOLR-6943 (Alexandre Rafalovitch)

* SOLR-9365: Reduce noise in solr logs during graceful shutdown. (Cao Manh Dat via shalin)

* SOLR-9451: Make clusterstatus command logging less verbose. (Varun Thacker)

* SOLR-9502: ResponseWriters should natively support MapSerializable  (noble)

* SOLR-9538: Relocate (BinaryResponse|JSON|Smile)Writer tests to org.apache.solr.response
  which is the package of the classes they test. (Jonny Marks via Christine Poerschke)

* SOLR-9508: Install script install_solr_service.sh now checks existence of tools.
  New option -n to avoid starting service after installation (janhoy)

* SOLR-7826: Refuse "bin/solr create" if run as root, unless -force is specified (janhoy, Binoy Dalal)

* SOLR-6871: Updated the quickstart tutorial to cover the 6.2.0 release, and added ant target
 "generate-website-quickstart" to convert the bundled version of the tutorial into one suitable
 for the website.

* SOLR-5563: Move lots of SolrCloud logging from 'info' to 'debug' (janhoy, Alan
  Woodward)

* SOLR-9544: Allow ObjectReleaseTracker more time to check for asynchronously
  closing resources (Alan Woodward)

* SOLR-6677: Reduced logging during startup and shutdown, moved more logs to DEBUG level
  (janhoy, Shawn Heisey, Alan Woodward)

* SOLR-6090: Remove unreachable printLayout usage in cloud tests. (Cao Manh Dat via shalin)

* SOLR-9551: Add JSONWriter constructor variant, JSONWriterTest.testConstantsUnchanged test.
  (Jonny Marks, Christine Poerschke)

* SOLR-9500: Add a LogLevel annotation to set log levels on specific tests (Alan
  Woodward)

* SOLR-9548: The beginning of solr.log now starts with a more informative welcome message (janhoy)

* SOLR-9547: Do not allow bin/solr start as root user, unless -force param specified (janhoy)

* SOLR-9567: Make ReRankQParserPlugin's private ReRankCollector a public class of its own. (Christine Poerschke)

* SOLR-7436: Solr stops printing stacktraces in log and output (janhoy, hossman, Markus Jelsma)

* SOLR-9576: Make FieldAnalysisRequestHandler, DocumentAnalysisRequestHandler & DumpRequestHandler
  implicit (noble)

* SOLR-9574: Factor out AbstractReRankQuery from ReRankQParserPlugin's private ReRankQuery. (Christine Poerschke)

* SOLR-5041: Add a test to make sure that a leader always recovers from log on startup. (Cao Manh Dat, shalin)

* SOLR-9588: Remove Guava dependency from SolrJ (Ishan Chattopadhyaya, noble)

* SOLR-8140: Remove mentions of unimplemented admin-extra from the new Admin UI (Alexandre Rafalovitch)

* SOLR-9589: Remove jackson dependency from SolrJ (Ishan Chattopadhyaya, noble)

* SOLR-8385: Narrow StreamFactory.withFunctionName clazz parameter to prevent misconfiguration (Jason Gerlowski, Kevin Risden)

* SOLR-8969: SQLHandler causes NPE in non-cloud mode (Markus Jelsma, Kevin Risden)

* SOLR-9610: New AssertTool in SolrCLI for easier cross platform assertions from command line (janhoy)

* SOLR-9680: Better error messages in SolrCLI when authentication required (janhoy)

* SOLR-9639: Test only fix. Prevent CDCR tests from removing collection during recovery that used to blow up jvm  (Mikhail Khludnev)

* SOLR-9625: Add HelloWorldSolrCloudTestCase class (Christine Poerschke, Alan Woodward, Alexandre Rafalovitch)

* SOLR-9642: Refactor the core level snapshot cleanup mechanism to rely on Lucene (Hrishikesh Gadre via yonik)

* SOLR-9627: Add QParser.getSortSpec, deprecate misleadingly named QParser.getSort (Judith Silverman, Christine Poerschke)

* SOLR-9632: Add MiniSolrCloudCluster#deleteAllCollections() method (Alan Woodward)

* SOLR-9634: Deprecate collection methods on MiniSolrCloudCluster (Alan Woodward)

* SOLR-7850: Moved defaults within bin/solr.in.sh (and bin/solr.in.cmd on Windows) to bin/solr (and bin/solr.cmd)
  such that the default state of these files is to set nothing. This makes Solr work better with Docker. (David Smiley)

* SOLR-9570: Various log tidying now happens at Solr startup:
  Old solr_log_<date> and solr_gc_log_<date> files are removed, avoiding disks to fill up,
  solr.log.X files are rotated, preserving solr.log from last run in solr.log.1, solr.log.1 => solr.log.2 etc
  solr-*-console.log files are moved into $SOLR_LOGS_DIR/archived/ instead of being overwritten
  Last JVM garbage collection log solr_gc.log is moved into $SOLR_LOGS_DIR/archived/
  (janhoy)

* SOLR-4531: Add tests to ensure that recovery does not fail on corrupted tlogs.
  (Simon Scofield, Cao Manh Dat via shalin)

* SOLR-5245: Add a test to ensure that election contexts are keyed off both collection name and coreNodeName
  so that killing a shard in one collection does not result in leader election in a different collection.
  See SOLR-5243 for the related bug. (Cao Manh Dat via shalin)

* SOLR-9533: Reload core config when a core is reloaded (Gethin James, Joel Bernstein)

* SOLR-9371: Fix bin/solr calculations for start/stop wait time and RMI_PORT.
  (Shawn Heisey via Erick Erickson)

==================  6.2.1 ==================

Bug Fixes
----------------------

* SOLR-9494: Use of {!collapse} sometimes doesn't correctly return true for Collector.needsScores(), especially when the
  query was cached. This can cause an exception when 'q' is a SpanQuery or potentially others. (David Smiley)

* SOLR-6744: fl renaming / alias of uniqueKey field generates null pointer exception in SolrCloud configuration
  (Mike Drob via Tomás Fernández Löbbe)

* SOLR-9445: Admin requests are retried by CloudSolrClient and LBHttpSolrClient on failure. (shalin)

* SOLR-9439: Shard split clean up logic for older failed splits is faulty. The delete shard API
  has also been made more resilient against failures resulting from non-existent cores. (shalin)

* SOLR-9430: Fix locale lookup in DIH <propertyWriter/> to use BCP47 language tags
  to be consistent with other places in Solr. Language names still work for backwards
  compatibility. (Uwe Schindler, Boris Steiner)

* SOLR-9389: HDFS Transaction logs stay open for writes which leaks Xceivers. (Tim Owen via Mark Miller)

* SOLR-9188: blockUnknown property makes inter-node communication impossible (noble)

* SOLR-9455: Deleting a sub-shard in recovery state can mark parent shard as inactive. (shalin)

* SOLR-9461: DELETENODE, REPLACENODE should pass down the 'async' param to subcommands (shalin, noble)

* SOLR-9444: Fix path usage for cloud backup/restore.  (Hrishikesh Gadre, Uwe Schindler, Varun Thacker)

* SOLR-9381: Snitch for freedisk uses '/' instead of 'coreRootDirectory' (Tim Owen, noble)

* SOLR-9488: Shard split can fail to write commit data on shutdown/restart causing replicas to recover
  without replicating the index. This can cause data loss. (shalin)

* SOLR-9490: Fixed bugs in BoolField that caused it to erroneously return "false" for all docs depending
  on usage (Colvin Cowie, Dan Fox, hossman)

* SOLR-9438: Shard split can be marked successful and sub-shard states switched to 'active' even when
  one or more sub-shards replicas do not recover due to the leader crashing or restarting between the time
  the replicas are created and before they can recover. This can cause data loss. (shalin)

* SOLR-9408: Fix TreeMergeOutputFormat to add timestamp metadata to a commit. SolrCloud replication relies on this.
  (Jessica Cheng Mallet via Varun Thacker)

Other Changes
----------------------

* SOLR-7362: Fix TestReqParamsAPI test failures (noble, Varun Thacker)

==================  6.2.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.12.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.8.v20160314

Detailed Change List
----------------------

New Features
----------------------

* SOLR-9187: Support dates and booleans in /export handler, support boolean DocValues fields (Erick Erickson)

* SOLR-8048: bin/solr script should support basic auth credentials provided in solr.in.sh (noble)

* SOLR-7374: Core level Backup/Restore now supports specifying the directory implementation to use
  via the "repository" parameter. (Hrishikesh Gadre, Varun Thacker, Mark Miller)

* SOLR-9216: Support collection.configName in MODIFYCOLLECTION request (Keith Laban, noble)

* SOLR-9251: Support for a new tag 'role' in replica placement rules (noble)

* SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper (Erick Erickson, janhoy)

* SOLR-9242: Collection Backup/Restore now supports specifying the directory implementation to use
  via the "repository" parameter. (Hrishikesh Gadre, Varun Thacker)

* SOLR-9193: Add scoreNodes Streaming Expression (Joel Bernstein)

* SOLR-9243: Add terms.list parameter to the TermsComponent to fetch the docFreq for a list of terms
  (Joel Bernstein)

* SOLR-9090: Add directUpdatesToLeadersOnly flag to solrj CloudSolrClient.
  (Marvin Justice, Christine Poerschke)

* SOLR-9270: Allow spatialContextFactory to be simply "JTS". And if any spatial params include the old
  Spatial4j package "com.spatial4j.core" it is rewritten to "org.locationtech.spatial4j" with a warning.
  (David Smiley)

* SOLR-9240: Support parallel ETL with the topic expression (Joel Bernstein)

* SOLR-9275: XML QueryParser support (defType=xmlparser) now extensible via configuration.
  (Christine Poerschke)

* SOLR-9200: Add Delegation Token Support to Solr.
  (Gregory Chanan)

* SOLR-9038: Solr core snapshots: The current commit can be snapshotted which retains the commit and associates it with
  a name.  The core admin API can create snapshots, list them, and delete them. Snapshot names can be referenced in
  doing a core backup, and in replication.  Snapshot metadata is stored in a new snapshot_metadata/ dir.
  (Hrishikesh Gadre via David Smiley)

* SOLR-9279: New boolean comparison function queries comparing numeric arguments: gt, gte, lt, lte, eq
  (Doug Turnbull, David Smiley)

* SOLR-9252: Feature selection and logistic regression on text (Cao Manh Dat, Joel Bernstein)

* SOLR-6465: CDCR: fall back to whole-index replication when tlogs are insufficient.
  (Noble Paul, Renaud Delbru, shalin)

* SOLR-9320: A REPLACENODE command to decommission an existing node with another new node
   (noble, Nitin Sharma, Varun Thacker)

* SOLR-9318: A DELETENODE command to delete all replicas in that node (noble, Nitin Sharma, Varun Thacker)

Bug Fixes
----------------------

* SOLR-9191: OverseerTaskQueue.peekTopN() fatally flawed (Scott Blum, Noble Paul)

* SOLR-9199: ZkController#publishAndWaitForDownStates logic is inefficient (Hrishikesh Gadre)

* SOLR-9161: Change SolrPluginUtils.invokeSetters implementation to accommodate setter variants.
  (Christine Poerschke, Steve Rowe, Uwe Schindler)

* SOLR-9234: srcField parameter works only when all fields are captured in the /update/json/docs
  endpoint (noble)

* SOLR-8546: SOLR-8546: TestLazyCores is failing a lot on the Jenkins cluster. (Erick Erickson)

* SOLR-9237: DefaultSolrHighlighter.doHighlightingByFastVectorHighlighter can't be overidden (janhoy)

* SOLR-8626: 404 error when clicking nodes in cloud graph view in angular UI. (janhoy, Trey Grainger via shalin)

* SOLR-9254: GraphTermsQueryQParserPlugin throws NPE when field being searched is not present in segment
  (Joel Bernstein)

* SOLR-8657: Fix SolrRequestInfo error logs if QuerySenderListener is being used (Pascal Chollet,
  Tomás Fernández Löbbe)

* SOLR-8777: Duplicate Solr process can cripple a running process. (Jessica Cheng Mallet, Scott Blum, shalin)

* SOLR-9246: If the JDBCStream sees an unknown column type it will now throw a detailed exception. (Dennis Gove)

* SOLR-9181: Fix some races in CollectionStateWatcher API (Alan Woodward, Scott
  Blum)

* SOLR-9235: Fixed NPE when using non-numeric range query in deleteByQuery (hossman)

* SOLR-9088: Fixed TestManagedSchemaAPI failures which exposed race conditions in the schema API ( Varun Thacker, noble)

* SOLR-9207: PeerSync recovery failes if number of updates requested is high. A new useRangeVersions config option
  is introduced (defaults to true) to send version ranges instead of individual versions for peer sync.
  (Pushkar Raste, shalin)

* SOLR-8858: SolrIndexSearcher#doc() completely ignores field filters unless lazy field loading is enabled.
  (Caleb Rackliffe, David Smiley, shalin)

* SOLR-9236: AutoAddReplicas will append an extra /tlog to the update log location on replica failover.
  (Eungsop Yoo, Mark Miller)

* SOLR-9291: ZkSolrResourceLoader should not retry fetching resources if the server has been shutdown.
  (shalin)

* SOLR-9287: Including 'score' in the 'fl' param when doing an RTG no longer causes an NPE
  (hossman, Ishan Chattopadhyaya)

* SOLR-7280: In cloud-mode sort the cores smartly before loading & limit threads to improve cluster stability
  (noble, Erick Erickson, shalin)

* SOLR-9285: Fixed AIOOBE when using ValueSourceAugmenter in single node RTG (hossman)

* SOLR-9288: Fix [docid] transformer to return -1 when used in RTG with uncommitted doc (hossman)

* SOLR-9309: Fix SolrCloud RTG response structure when multi ids requested but only 1 found (hossman)

* SOLR-9334: CloudSolrClient.collectionStateCache is unbounded (noble)

* SOLR-9339: NPE in CloudSolrClient when the response is null (noble)

* SOLR-8596: Web UI doesn't correctly generate queries which include local parameters (Alexandre Rafalovitch, janhoy)

* SOLR-8645: managed-schema is now syntax highlighted in cloud->Tree view (Alexandre Rafalovitch via janhoy)

* SOLR-8379: UI Cloud->Tree view now shows .txt files correctly (Alexandre Rafalovitch via janhoy)

* SOLR-9003: New Admin UI's Dataimport screen now correctly displays DIH Debug output (Alexandre Rafalovitch)

* SOLR-9308: Fix distributed RTG to forward request params, fixes fq and non-default fl params (hossman)

* SOLR-9179: NPE in IndexSchema using IBM JDK (noble, Colvin Cowie)

* SOLR-9397: Config API does not support adding caches (noble)

* SOLR-9405: ConcurrentModificationException in ZkStateReader.getStateWatchers.
  (Alan Woodward, Edward Ribeiro, shalin)

* SOLR-9232: Admin UI now fully implements Swap Cores interface (Alexandre Rafalovitch)

* SOLR-8715: Admin UI's Schema screen now works for fields with stored=false and some content indexed (Alexandre Rafalovitch)

* SOLR-8911: In Admin UI, enable scrolling for overflowing Versions and JVM property values (Alexandre Rafalovitch)

* SOLR-9002: Admin UI now correctly displays json and text files in the collection/Files screen (Upayavira, Alexandre Rafalovitch)

* SOLR-8993: Admin UI now correctly supports multiple DIH handler end-points (Upayavira, Alexandre Rafalovitch)

* SOLR-9032: Admin UI now correctly implements Create Alias command (Upayavira, Alexandre Rafalovitch)

* SOLR-9391: LBHttpSolrClient.request now correctly returns Rsp.server when
  previously skipped servers were successfully tried. (Christine Poerschke)


Optimizations
----------------------

* SOLR-9219: Make hdfs blockcache read buffer sizes configurable and improve cache concurrency. (Mark Miller)

* SOLR-9264: Optimize ZkController.publishAndWaitForDownStates to not read all collection states and
  watch relevant collections instead. (Hrishikesh Gadre, shalin)

* SOLR-9335: Solr cache/search/update stats counters now use LongAdder which are supposed to have higher throughput
  under high contention. (Varun Thacker)

* SOLR-9350: JSON Facets: method="stream" will no longer always uses & populates the filter cache, likely
  flushing it.  'cacheDf' can be configured to set a doc frequency threshold, now defaulting to 1/16th doc count.
  Using -1 Disables use of the cache. (David Smiley, yonik)

Other Changes
----------------------

* SOLR-9195: Remove unnecessary allocation and null check in UpdateRequestProcessorChain's
  getReqProcessors method. (Christine Poerschke)

* SOLR-8981: Upgraded Extraction module to Apache Tika 1.13.
  (Tim Allison, Lewis John McGibbney via Uwe Schindler)

* SOLR-9076: Update to Hadoop 2.7.2
  (Mark Miller, Gregory Chanan)

* SOLR-8787: TestAuthenticationFramework should not extend TestMiniSolrCloudCluster. (Trey Cahill via shalin)

* SOLR-9180: More comprehensive tests of psuedo-fields for RTG and SolrCloud requests (hossman)

* SOLR-7930: Comment out trappy references to example docs in elevate.xml files (Erick Erickson)

* SOLR-9277: Clean up some more remnants of supporting old and new style solr.xml in tests (Erick Erickson)

* SOLR-9163: Sync up basic_configs and data_driven_schema_configs, removing almost all differences
  except what is required for schemaless. (yonik)

* SOLR-9340: Change ZooKeeper disconnect and session expiry related logging from INFO to WARN to
  make debugging easier (Varun Thacker)

* SOLR-9358: [AngularUI] In Cloud->Tree file view area, collapse metadata by default (janhoy)

* SOLR-9256: asserting hasNext() contract in JdbcDataSource in DataImportHandler (Kristine Jetzke via Mikhai Khludnev)

* SOLR-9209: extracting JdbcDataSource.createResultSetIterator() for extension (Kristine Jetzke via Mikhai Khludnev)

* SOLR-9353: Factor out ReRankQParserPlugin.ReRankQueryRescorer private class. (Christine Poerschke)

* SOLR-9392: Fixed CDCR Test failures which were due to leaked resources. (shalin)

* SOLR-9385: Add QParser.getParser(String,SolrQueryRequest) variant. (Christine Poerschke)

* SOLR-9367: Improved TestInjection's randomization logic to use LuceneTestCase.random() (hossman)

* SOLR-9331: Remove ReRankQuery's length constructor argument and member. (Christine Poerschke)

* SOLR-9092: For the delete replica command we attempt to send the core admin delete request only
  if that node is actually up. (Jessica Cheng Mallet, Varun Thacker)

* SOLR-9410: Make ReRankQParserPlugin's private ReRankWeight a public class of its own. (Christine Poerschke)

* SOLR-9404: Refactor move/renames in JSON FacetProcessor and FacetFieldProcessor. (David Smiley)

* SOLR-9421: Refactored out OverseerCollectionMessageHandler to smaller classes (noble)

* SOLR-8643: BlockJoinFacetComponent is substituted by BlockJoinFacetDocSetComponent. It doesn't need to change solrconfig.xml (Mikhail Khludnev)

* SOLR-8644: Test asserts that block join facets work with parent level fq exclusions. (Dr. Oleg Savrasov via Mikhail Khludnev)

==================  6.1.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.12.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.8.v20160314

Upgrading from Solr any prior release
----------------------

* If you use historical dates, specifically on or before the year 1582, you should re-index.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-8782: Add asynchronous sugar methods to the SolrJ Collections API.  You
  can now call .processAsync() to run a method asynchronously, or
  .processAndWait() to wait for a call to finish without holding HTTP
  collections open.  (Alan Woodward)

* SOLR-8765: Enforce required parameters at query construction time in the SolrJ
  Collections API, add static factory methods, and deprecate old setter methods.
  (Alan Woodward, Jason Gerlowski)

* SOLR-8842: authorization APIs do not use name as an identifier for a permission
  for update, delete commands and 'before' attribute (noble)

* SOLR-8814: Support GeoJSON response writer and general spatial formatting.  Adding
     &wt=geojson&geojson.field=<your geometry field>
  Will return a FeatureCollection for each SolrDocumentList and a Feature with the
  requested geometry for each SolrDocument.  The requested geometry field needs
  to either extend AbstractSpatialFieldType or store a GeoJSON string.  This also adds
  a [geo] DocumentTransformer that can return the Shape in a variety of formats:
    &fl=[geo f=<your geometry field> w=(GeoJSON|WKT|POLY)]
  The default format is GeoJSON.  For information on the supported formats, see:
  https://github.com/locationtech/spatial4j/blob/master/FORMATS.md
  To return the FeatureCollection as the root element, add '&omitHeader=true" (ryan)

* SOLR-8859: Spatial fields like RPT can now be configured to use Spatial4j registered shape formats
  e.g. via format="GeoJSON".  (ryan, David Smiley)

* SOLR-445: new TolerantUpdateProcessorFactory to support skipping update commands that cause
  failures when sending multiple updates in a single request.
  (Erick Erickson, Tomás Fernández Löbbe, Anshum Gupta, hossman)

* SOLR-8890: New static method in DistributedUpdateProcessorFactory to allow UpdateProcessorFactories
  to indicate request params that should be forwarded when DUP distributes updates. (hossman)

* SOLR-8888: Add shortestPath Streaming Expression. This expression performs a breadth first
  graph traversal to find the shortest path(s) in an unweighted, directed graph stored in a
  SolrCloud collection. (Joel Bernstein)

* SOLR-8938: Add optional --excluderegex argument to ZkCLI. (Christine Poerschke)

* SOLR-8976: Add SolrJ support for REBALANCELEADERS Collections API (Anshum Gupta)

* SOLR-8962: Add sort Streaming Expression. The expression takes a single input stream and a
  comparator and outputs tuples in stable order of the comparator. (Dennis Gove)

* SOLR-8349: Allow sharing of large in memory data structures across cores (Gus Heck, noble)

* SOLR-9009: Adds ability to get an Explanation of a Streaming Expression (Dennis Gove)

* SOLR-8918: Adds Streaming to the admin page under the collections section. Includes
  ability to see graphically the expression explanation (Dennis Gove)

* SOLR-8913: When using a shared filesystem we should store data dir and tlog dir locations in
  the cluster state. (Mark Miller)

* SOLR-8809: Implement Connection.prepareStatement (Kevin Risden)

* SOLR-9020: Implement StatementImpl/ResultSetImpl get/set fetch* methods and proper errors for traversal methods (Kevin Risden)

* SOLR-9041: 'core-admin-read' and 'core-admin-edit' are well known permissions (noble)

* SOLR-8986: Add Random Streaming Expression (Joel Bernstein)

* SOLR-8925: Add gatherNodes Streaming Expression to support breadth first traversals (Joel Bernstein)

* SOLR-9027: Add GraphTermsQuery to limit traversal on high frequency nodes (Joel Bernstein, David Smiley)

* SOLR-5750: Add /admin/collections?action=BACKUP and RESTORE assuming access to a shared file system.
  (Varun Thacker, David Smiley)

* SOLR-9049: RuleBasedAuthorizationPlugin supports regex in param values eg: "command" : "REGEX:(i?)create" (noble)

* SOLR-8972: Add GraphHandler and GraphMLResponseWriter to support graph visualizations (Joel Bernstein)

* SOLR-9026: Extend facet telemetry support to legacy (non-json) facets under "debug/facet-debug" in
  the response. (Michael Sun, yonik)

* SOLR-7117: Provide an option to limit the maximum number of cores that can be created on a node by the
  Auto Add Replica feature. For this you can set a "maxCoresPerNode" property via the Cluster Property API
  (Varun Thacker, Mark Miller)

* SOLR-8208: [subquery] document transformer executes separate requests per result document. (Cao Manh Dat  via Mikhail Khludnev)

* SOLR-8323, SOLR-9113: Add CollectionStateWatcher API (Alan Woodward, Scott Blum)

* SOLR-8988: Adds query option facet.distrib.mco which when set to true allows the use of facet.mincount=1 in cloud mode.
  (Keith Laban, Dennis Gove)

* SOLR-8583: Apply highlighting to hl.alternateField by default for Default and FastVectorHighlighter.
  Turn off with hl.highlightAlternate=false (janhoy, David Smiley)

* SOLR-7123: '/update/json/docs' path supports nested documents (noble)

* SOLR-8610: Resolve variables in encryptKeyFile of DIH's JdbcDataSource (Kristine Jetzke via Mikhail Khludnev)

* SOLR-7739: Add a new ClassificationUpdateProcessorFactory. (Alessandro Benedetti via Tommaso Teofili)

Bug Fixes
----------------------

* SOLR-8855: The HDFS BlockDirectory should not clean up it's cache on shutdown. (Mark Miller)

* SOLR-8948: OverseerTaskQueue.containsTaskWithRequestId encounters json parse error if a
  SolrResponse node is in the overseer queue. (Jessica Cheng Mallet via shalin)

* SOLR-7729: ConcurrentUpdateSolrClient ignores the collection parameter in some methods.
  (Nicolas Gavalda, Jorge Luis Betancourt Gonzalez via Mark Miller)

* SOLR-8662: SchemaManager waits correctly for replicas to be notified of a new change.
  (sarowe, Noble Paul, Varun Thacker)

* SOLR-8983: Cleanup clusterstate and replicas for a failed create collection request
  (Varun Thacker, Anshum Gupta)

* SOLR-9029: fix rare ZkStateReader visibility race during collection state format update (Scott Blum, hossman)

* SOLR-9046: Fix solr.cmd that wrongly assumes Jetty will always listen on 0.0.0.0.
  (Bram Van Dam, Uwe Schindler)

* SOLR-9064: Adds an explanation of the incoming stream to an UpdateStream's explanation (Dennis Gove)

* SOLR-9128: Fix error handling issues in Streaming classes (Joel Bernstein)

* SOLR-9151: Fix SolrCLI so that bin/solr -e cloud example can be run from any CWD (janhoy)

* SOLR-9141: Fix ClassCastException when using the /sql handler count() function with
  single-shard collections (Minoru Osuka via James Dyer)

* SOLR-9165: Spellcheck does not return collations if "maxCollationTries" is used with "cursorMark".
  (James Dyer)

* SOLR-8940: Fix group.sort option (hossman)

* SOLR-8612: closing JDBC Statement on failures in DataImportHandler (DIH) (Kristine Jetzke via Mikhail Khludnev)

* SOLR-8676: keep LOG4J_CONFIG in solr.cmd (Kristine Jetzke via Mikhail Khludnev)

* SOLR-9198: config APIs unable to add multiple values with same name (noble)

* SOLR-8812: edismax: turn off mm processing if no explicit mm spec is provided
  and there are explicit operators (except for AND) - addresses problems caused by SOLR-2649.
  (Greg Pendlebury, Jan Høydahl, Erick Erickson, Steve Rowe)

* SOLR-9176: facet method ENUM was sometimes unnecessarily being rewritten to
  FCS, causing slowdowns (Alessandro Benedetti, Jesse McLaughlin, Alan Woodward)

Optimizations
----------------------
* SOLR-8722: Don't force a full ZkStateReader refresh on every Overseer operation.
  (Scott Blum via shalin)

* SOLR-8745: Deprecate costly ZkStateReader.updateClusterState(), replace with a narrow
  forceUpdateCollection(collection) (Scott Blum via shalin)

* SOLR-8856: Do not cache merge or 'read once' contexts in the hdfs block cache. (Mark Miller, Mike Drob)

* SOLR-8922: Optimize filter creation (DocSetCollector) to minimize the amount of garbage
  produced. This resulted in up to 3x throughput when small filter creation was the bottleneck,
  as well as orders of magnitude less garbage. (Jeff Wartes, yonik)

* SOLR-8937: bin/post (SimplePostTool) now streams the standard input instead of buffering fully.
  (David Smiley)

* SOLR-8973: Zookeeper frenzy when a core is first created. (Janmejay Singh, Scott Blum, shalin)

* SOLR-9014: Deprecate and reduce usage of ClusterState methods which may make calls to ZK via
  the lazy collection reference. (Scott Blum, shalin)

* SOLR-9106: Cluster properties are now cached on ZkStateReader. (Alan Woodward)

* SOLR-9147: Upgrade commons-io to 2.5, avoid expensive array resizing in EmbeddedSolrServer (Mikhail Khludnev)

* SOLR-8744: Overseer operations performed with fine grained mutual exclusion (noble, Scott Blum)

* SOLR-9204: Improve performance of getting directory size with hdfs. (Mark Miller)

Other Changes
----------------------
* SOLR-8860: Remove back-compat handling of router format made in SOLR-4221 in 4.5.0. (shalin)

* SOLR-8866: UpdateLog will now throw an exception if it doesn't know how to serialize a value.
  (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)

* 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)

* SOLR-8869: Optionally disable printing field cache entries in SolrFieldCacheMBean (Gregory Chanan)

* SOLR-8892: Allow SolrInfoMBeans to return different statistics for /jmx vs web ui calls.
  (Gregory Chanan, Mark Miller)

* SOLR-8097: Implement builder pattern design for constructing SolrJ clients and also deprecate direct construction
  of client objects. (Jason Gerlowski, Shawn Heisey, Anshum Gupta)

* SOLR-9015: Adds SelectStream as a default function in the StreamHandler (Dennis Gove)

* SOLR-8929: Add an idea module for solr/server to enable launching start.jar (Scott Blum, Steve Rowe)

* SOLR-8933: Solr should not close container streams. (Mike Drob, Uwe Schindler, Mark Miller)

* SOLR-9037: Replace multiple "/replication" strings with one static constant. (Christine Poerschke)

* SOLR-9047: zkcli should allow alternative locations for log4j configuration (Gregory Chanan)

* SOLR-9066: Make CountMetric return long instead of double (Kevin Risden)

* SOLR-9065, SOLR-9072, SOLR-9132: Migrate some distributed tests to SolrCloudTestCase. (Alan Woodward)

* SOLR-8184: Negative tests for JDBC Connection String (Susheel Kumar, Jason Gerlowski, Kevin Risden)

* SOLR-8458: Add Streaming Expressions tests for parameter substitution (Joel Bernstein, Cao Manh Dat, Dennis Gove, Kevin Risden)

* SOLR-8467: CloudSolrStream and FacetStream should take a SolrParams object rather than a
  Map<String, String> to allow more complex Solr queries to be specified. (Erick Erickson)

* SOLR-9083: Remove all <types> and <fields> from schemas. NOTE: as in the JIRA I left a few in to insure the (no cost)
  back compat. (Erick Erickson)

* SOLR-9105: Fix a bunch of typos across 103 files (Bartosz Krasiński via janhoy)

* SOLR-9159: New cloud based concurrent atomic update test (hossman)

* SOLR-9119: several static methods in ValueSourceParser have been made private (hossman)

* SOLR-9110: Move JoinFromCollection- SubQueryTransformer- BlockJoinFacet- Distrib Tests to SolrCloudTestCase  (Mikhail Khludnev)

* SOLR-9136: Separate out the error statistics into server-side error vs client-side error
  (Jessica Cheng Mallet via Erick Erickson)

* SOLR-9107: new @RandomizeSSL annotation for more fine grained control of SSL testing (hossman, sarowe)

* SOLR-9081: Make SolrTestCaseJ4.beforeClass() / .afterClass() public so it
  works with Mockito (Georg Sorst, Alan Woodward)

* SOLR-8445: fix line separator in log4j.properties files (Ahmet Arslan via Mikhail Khludnev)

* SOLR-2199: DataImportHandler (DIH) JdbcDataSource supports multiple resultsets per query (Kristine Jetzke, Mark Waddle via Mikhail Khludnev)

==================  6.0.1 ==================

Upgrade Notes
----------------------

* If you use historical dates, specifically on or before the year 1582, you should re-index.

Bug Fixes
----------------------

* SOLR-8914: ZkStateReader's refreshLiveNodes(Watcher) is not thread safe. (Scott Blum, hoss,
  sarowe, Erick Erickson, Mark Miller, shalin)

* SOLR-9016: Fix SolrIdentifierValidator to not allow empty identifiers. (Shai Erera)

* SOLR-8992: Restore Schema API GET method functionality removed in 6.0 (noble, Steve Rowe)

* SOLR-9080, SOLR-9085: (6.0 bug) For years <= 1582, date math (round,add,sub) introduced error.  Range faceting
  on such dates was also affected.  With this fixed, this is the first release range faceting works on BC years.
  (David Smiley)

* SOLR-8857: HdfsUpdateLog does not use configured or new default number of version buckets and is
  hard coded to 256. (Mark Miller, yonik, Gregory Chanan)

* SOLR-8902: Make sure ReturnFields only returns the requested fields from (fl=) evn when
  DocumentTransformers ask for getExtraRequestFields()  (ryan)

* SOLR-8875: SolrCloud Overseer clusterState could unexpectedly be null resulting in NPE.
  (Scott Blum via David Smiley)

* SOLR-8946: bin/post failed to detect stdin usage on Ubuntu; maybe other unixes. (David Smiley)

* SOLR-9004: Fix "name" field type definition in films example. (Alexandre Rafalovitch via Varun Thacker)

* SOLR-8990: Fix top term links from schema browser page to use {!term} parser (hossman)

* SOLR-8971: Preserve root cause when wrapping exceptions (hossman)

* SOLR-9034: Atomic updates failed to work when there were copyField targets that had docValues
  enabled. (Karthik Ramachandran, Ishan Chattopadhyaya, yonik)

* SOLR-9028: Fixed some test related bugs preventing SSL + ClientAuth from ever being tested (hossman)

* SOLR-9059: NPE in SolrClientCache following collection reload (Joel Bernstein, Ryan Yacyshyn)

* SOLR-8792: ZooKeeper ACL support fixed. (Esther Quansah, Ishan Chattopadhyaya, Steve Rowe)

* SOLR-9030: The 'downnode' overseer command can trip asserts in ZkStateWriter.
  (Scott Blum, Mark Miller, shalin)

* SOLR-9036: Solr slave is doing full replication (entire index) of index after master restart.
  (Lior Sapir, Mark Miller, shalin)

* SOLR-9058: Makes HashJoinStream and OuterHashJoinStream support different field names in the
  incoming streams, eg. fieldA=fieldB. (Dennis Gove, Stephan Osthold)

* SOLR-9093: Fix NullPointerException in TopGroupsShardResponseProcessor. (Christine Poerschke)

* SOLR-9118: HashQParserPlugin should trim partition keys (Joel Bernstein)

* SOLR-9117: The first SolrCore is leaked after reload. (Jessica Cheng Mallet via shalin)

* SOLR-9116: Race condition causing occasional SolrIndexSearcher leak when SolrCore is reloaded.
  (Jessica Cheng Mallet via shalin)

* SOLR-8801: /bin/solr create script always returns exit code 0 when a collection/core already exists.
  (Khalid Alharbi, Marius Grama via Steve Rowe)

* SOLR-9134: Fix RestManager.addManagedResource return value. (Christine Poerschke)

Other Changes
----------------------
* SOLR-7516: Improve javadocs for JavaBinCodec, ObjectResolver and enforce the single-usage policy.
  (Jason Gerlowski, Benoit Vanalderweireldt, shalin)

* SOLR-8967: In SolrCloud mode, under the 'Core Selector' dropdown in the UI the Replication tab won't be displayed
  anymore. The Replication tab is only beneficial to users running Solr in master-slave mode. (Varun Thacker)

* SOLR-8985: Added back support for 'includeDynamic' flag to /schema/fields endpoint (noble)

* SOLR-9131: Fix "start solr" text in cluster.vm Velocity template (janhoy)

* SOLR-9053: Upgrade commons-fileupload to 1.3.1, fixing a potential vulnerability (Jeff Field, Mike Drob via janhoy)

* SOLR-9115: Get rid of javax.xml.bind.DatatypeConverter in SimplePostTool
  for Java 9 compatibility. (Uwe Schindler)

* SOLR-5776,SOLR-9068,SOLR-8970:
  - Refactor SSLConfig so that SSLTestConfig can provide SSLContexts using a NullSecureRandom
    to prevent SSL tests from blocking on entropy starved machines.
  - SSLTestConfig: Alternate (psuedo random) NullSecureRandom for Constants.SUN_OS.
  - SSLTestConfig: Replace NullSecureRandom w/ NotSecurePsuedoRandom.
  - Change SSLTestConfig to use a keystore file that is included as a resource in the
    test-framework jar so users subclassing SolrTestCaseJ4 don't need to preserve magic paths.
  (hossman)

==================  6.0.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.12.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.8.v20160314

System Requirements
----------------------
* LUCENE-5950: Move to Java 8 as minimum Java version.
  (Ryan Ernst, Uwe Schindler)

Upgrading from Solr 5.x
----------------------

* The deprecated SolrServer and subclasses have been removed, use SolrClient
  instead.

* The deprecated <nrtMode> configuration in solrconfig.xml has been removed.
  Please remove it from solrconfig.xml.

* SolrClient.shutdown() has been removed, use SolrClient.close() instead.

* The deprecated zkCredientialsProvider element in solrcloud section of solr.xml
  is now removed. Use the correct spelling (zkCredentialsProvider) instead.

* SOLR-7957: internal/expert - ResultContext was significantly changed and expanded
  to allow for multiple full query results (DocLists) per Solr request.
  TransformContext was rendered redundant and was removed. (yonik)

* Several changes have been made regarding the "Similarity" used in Solr, in order to provide
  better default behavior for new users.  There are 3 key impacts of these changes on existing
  users who upgrade:
  * DefaultSimilarityFactory has been removed. If you currently have DefaultSimilarityFactory explicitly
    referenced in your schema.xml, edit your config to use the functionally identical
    ClassicSimilarityFactory.  See SOLR-8239 for more details.
  * The implicit default Similarity used when no <similarity/> is configured in schema.xml has
    been changed to SchemaSimilarityFactory.  Users who wish to preserve back-compatible behavior should
    either explicitly configure ClassicSimilarityFactory, or ensure that the luceneMatchVersion
    for the collection is less then 6.0.  See SOLR-8270 + SOLR-8271 for details.
  * SchemaSimilarityFactory has been modified to use BM25Similarity as the default for fieldTypes that
    do not explicitly declare a Similarity.  The legacy behavior of using ClassicSimilarity as the
    default will occur if the luceneMatchVersion for the collection is less then 6.0, or the
    'defaultSimFromFieldType' configuration option may be used to specify any default of your choosing.
    See SOLR-8261 + SOLR-8329 for more details.

* If your solrconfig.xml file doesn't explicitly mention the schemaFactory to use then Solr will choose
  the ManagedIndexSchemaFactory by default. Previously it would have chosen ClassicIndexSchemaFactory.
  This means that the Schema APIs ( /<collection>/schema ) are enabled and the schema is mutable.
  When Solr starts your schema.xml file will be renamed to managed-schema. If you want to retain the old behaviour
  then please ensure that the solrconfig.xml explicitly uses the ClassicIndexSchemaFactory :
  <schemaFactory class="ClassicIndexSchemaFactory"/> or your luceneMatchVersion in the solrconfig.xml is less than 6.0

* SolrIndexSearcher.QueryCommand and QueryResult were moved to their own classes. If you reference them
  in your code, you should import them under o.a.s.search (or use your IDE's "Organize Imports").

* SOLR-8698: 'useParams' attribute specified in request handler cannot be overridden from request params

* When requesting stats in date fields, "sum" is now a double value instead of a date. See SOLR-8671

* SOLR-8736: The deprecated GET methods for schema are now accessible through the bulk API. The output
  has less details and is not backward compatible.

* In the past, Solr guaranteed that retrieval of multi-valued fields would preserve the order of values.
  Because values may now be retrieved from column-stored fields (docValues="true"), in conjunction with the
  fact that docValues do not currently preserve order, means that users should set useDocValuesAsStored="false"
  to prevent future optizations from using the column-stored values over the row-stored values when
  fields have both stored="true" and docValues="true".

* Formatted date-times from Solr have some differences. If the year is more than 4 digits, there is a leading '+'.
  When there is a non-zero number of milliseconds, it is padded with zeros to 3 digits. Negative year (BC) dates are
  now possible.  Parsing: It is now an error to supply a portion of the date out of its, range, like 67 seconds.

* SolrJ no longer includes DateUtil. If for some reason you need to format or parse dates, simply use Instant.format()
  and Instant.parse().

* If you are using an RPT or other spatial field referencing Spatial4j in its configuration, then replace the string
  "com.spatial4j.core" with "org.locationtech.spatial4j".  Consider updating direct to Solr 6.2 which accepts the
  old value, albeit with a warning.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-3085: New edismax param mm.autoRelax which helps in certain cases of the stopwords/zero-hits issue (janhoy)

* SOLR-7560: Parallel SQL Support (Joel Bernstein)

* SOLR-7707: Add StreamExpression Support to RollupStream (Dennis Gove, Joel Bernstein)

* SOLR-7903: Add the FacetStream to the Streaming API and wire it into the SQLHandler (Joel Bernstein)

* SOLR-7986: JDBC Driver for SQL Interface (Uwe Schindler, Joel Bernstein)

* SOLR-8038: Add the StatsStream to the Streaming API and wire it into the SQLHandler (Joel Bernstein)

* SOLR-8086: Add support for SELECT DISTINCT queries to the SQL interface (Joel Bernstein)

* SOLR-7543: Basic graph traversal query
  Example: {!graph from="node_id" to="edge_id"}id:doc_1
  (Kevin Watters, yonik)

* SOLR-6273: Cross Data Center Replication. Active/passive replication for separate
  SolrClouds hosted on separate data centers. (Renaud Delbru, Yonik Seeley via Erick Erickson)

* SOLR-7938: MergeStream now supports merging more than 2 streams together (Dennis Gove)

* SOLR-8198: Change ReducerStream to use StreamEqualitor instead of StreamComparator (Dennis Gove)

* SOLR-8268: StatsStream now implements the Expressible interface (Dennis Gove)

* SOLR-7584: Adds Inner and LeftOuter Joins to the Streaming API and Streaming Expressions (Dennis Gove, Corey Wu)

* SOLR-8188: Adds Hash and OuterHash Joins to the Streaming API and Streaming Expressions (Dennis Gove)

* SOLR-7669: Add SelectStream and Tuple Operations to the Streaming API and Streaming Expressions (Dennis Gove)

* SOLR-8337: Add ReduceOperation and wire it into the ReducerStream (Joel Bernstein)

* SOLR-7904: Add StreamExpression Support to FacetStream (Dennis Gove)

* SOLR-6398: Add IterativeMergeStrategy to support running Parallel Iterative Algorithms inside of Solr
  (Joel Bernstein)

* SOLR-8436: Real-time get now supports filters. (yonik)

* SOLR-7535: Add UpdateStream to Streaming API and Streaming Expression (Jason Gerlowski, Joel Bernstein)

* SOLR-8479: Add JDBCStream to Streaming API and Streaming Expressions for integration with external data sources
  (Dennis Gove)

* SOLR-8002: Add column alias support to the Parallel SQL Interface (Joel Bernstein)

* SOLR-7525: Add ComplementStream and IntersectStream to the Streaming API and Streaming Expressions
  (Dennis Gove, Jason Gerlowski, Joel Bernstein)

* SOLR-8415: Provide command to switch between non/secure mode in ZK
  (Mike Drob, Gregory Chanan)

* SOLR-8556: Add ConcatOperation to be used with the SelectStream (Joel Bernstein, Dennis Gove)

* SOLR-8550: Add asynchronous DaemonStreams to the Streaming API (Joel Bernstein)

* SOLR-8285: Ensure the /export handler works with NULL field values (Joel Bernstein)

* SOLR-8502: Improve Solr JDBC Driver to support SQL Clients like DBVisualizer (Kevin Risden, Joel Bernstein)

* SOLR-8588: Add TopicStream to the streaming API to support publish/subscribe messaging (Joel Bernstein, Kevin Risden)

* SOLR-8666: Adds header 'zkConnected' to response of SearchHandler and PingRequestHandler to notify the client when
  a connection to zookeeper has been lost and there is a possibility of stale data on the node the request is coming
  from. (Keith Laban, Dennis Gove)

* SOLR-8522: Make it possible to use ip fragments in replica placement rules , such as ip_1, ip_2 etc (Arcadius Ahouansou, noble)

* SOLR-8698: params.json can now specify 'appends' and 'invariants' (noble)

* SOLR-8831: allow _version_ field to be retrievable via docValues (yonik)


Bug Fixes
----------------------
* SOLR-8386: Add field option in the new admin UI schema page loads up even when no schemaFactory has been
  explicitly specified since the default is ManagedIndexSchemaFactory. (Erick Erickson, Upayavira, Varun Thacker)

* SOLR-8191: Guard against CloudSolrStream close method NullPointerException
  (Kevin Risden, Joel Bernstein)

* SOLR-8485: SelectStream now properly handles non-lowercase and/or quoted select field names (Dennis Gove)

* SOLR-8525: Fix a few places that were failing to pass dimensional
  values settings when copying a FieldInfo (Ishan Chattopadhyaya via
  Mike McCandless)

* SOLR-8409: Ensures that quotes in solr params (eg. q param) are properly handled (Dennis Gove)

* SOLR-8640: CloudSolrClient does not send credentials for update request (noble, hoss)

* SOLR-8461: CloudSolrStream and ParallelStream can choose replicas that are not active
  (Cao Manh Dat, Varun Thacker, Joel Bernstein)

* SOLR-8527: Improve JdbcTest to cleanup properly on failures (Kevin Risden, Joel Bernstein)

* SOLR-8578: Successful or not, requests are not always fully consumed by Solrj clients and we
  count on HttpClient or the JVM. (Mark Miller)

* SOLR-8683: Always consume the full request on the server, not just in the case of an error.
  (Mark Miller)

* SOLR-8416: The collections create API should return after all replicas are active.
  (Michael Sun, Mark Miller, Alexey Serba)

* SOLR-8701: CloudSolrClient decides that there are no healthy nodes to handle a request too early.
  (Mark Miller)

* SOLR-8694: DistributedMap/Queue can create too many Watchers and some code simplification.
  (Scott Blum via Mark Miller)

* SOLR-8695: Ensure ZK watchers are not triggering our watch logic on connection events and
  make this handling more consistent. (Scott Blum via Mark Miller)

* SOLR-8633: DistributedUpdateProcess processCommit/deleteByQuery call finish on DUP and
  SolrCmdDistributor, which violates the lifecycle and can cause bugs. (hossman via Mark Miller)

* SOLR-8656: PeerSync should use same nUpdates everywhere. (Ramsey Haddad via Mark Miller)

* SOLR-8697, SOLR-8837: Scope ZK election nodes by session to prevent elections from interfering with each other
  and other small LeaderElector improvements. (Scott Blum via Mark Miller, Alan
  Woodward)

* SOLR-8599: After a failed connection during construction of SolrZkClient attempt to retry until a connection
  can be made. (Keith Laban, Dennis Gove)

* SOLR-8497: Merge index does not mark the Directory objects it creates as 'done' and they are retained in the
  Directory cache. (Sivlio Sanchez, Mark Miller)

* SOLR-8696: Start the Overseer before actions that need the overseer on init and when reconnecting after
  zk expiration and improve init logic. (Scott Blum, Mark Miller)

* SOLR-8420: Fix long overflow in sumOfSquares for Date statistics. (Tom Hill, Christine Poerschke,
  Tomás Fernández Löbbe)

* SOLR-8748: OverseerTaskProcessor limits number of concurrent tasks to just 10 even though the thread pool
  size is 100. The limit has now been increased to 100. (Scott Blum, shalin)

* SOLR-8375: ReplicaAssigner rejects valid nodes (Kelvin Tan, noble)

* SOLR-8738: Fixed false success response when invalid deleteByQuery requests intially hit non-leader
  cloud nodes (hossman)

* SOLR-8771: Multi-threaded core shutdown creates executor per core. (Mike Drob via Mark Miller)

* SOLR-8145: Fix position of OOM killer script when starting Solr in the background (Jurian Broertjes via
  Timothy Potter)

* SOLR-8769: Fix document exclusion in mlt query parser in Cloud mode for schemas that have non-"id"
  unique field (Erik Hatcher, Anshum Gupta)

* SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
  placement. splitshard should preassign nodes using rules, if rules are present (noble, Shai Erera)

* SOLR-8779: Fix missing InterruptedException handling in ZkStateReader.java (Varun Thacker)

* SOLR-8449: Fix the core restore functionality to allow restoring multiple times on the same core
  (Johannes Brucher, Varun Thacker)

* SOLR-8155: JSON Facet API - field faceting on a multi-valued string field without
  docValues (i.e. UnInvertedField implementation), but with a prefix or with a sort
  other than count, resulted in incorrect results.  This has been fixed, and facet.prefix
  support for facet.method=uif has been enabled. (Mikhail Khludnev, yonik)

* SOLR-8790: Collections API responses contain node name in the core-level responses that are
  returned. (Anshum Gupta)

* SOLR-8804: Fix a race condition in the ClusterStatus API call whereby the call would fail when a concurrent delete
  collection api command was executed (Alexey Serba, Varun Thacker)

* SOLR-8835: JSON Facet API: fix faceting exception on multi-valued numeric fields that
  have docValues. (yonik)

* SOLR-8838: Returning non-stored docValues is incorrect for negative floats and doubles.
  (Ishan Chattopadhyaya, Steve Rowe)

* SOLR-8867: {!frange} queries will now avoid matching documents without a value in the
  numeric field.  For more complex functions, FunctionValues.exists() must also return true
  for the document to match.  (yonik)

* SOLR-8886: Fix TrieField.toObject(IndexableField) to work for field with docValues
  enabled. (yonik)

* SOLR-8891: Fix StrField.toObject and toExternal to work with docValue IndexableField
  instances. (yonik)

* SOLR-8865: Real-time get sometimes fails to retrieve stored fields from docValues.
  (Ishan Chattopadhyaya, yonik)

Optimizations
----------------------
* SOLR-7876: Speed up queries and operations that use many terms when timeAllowed has not been
  specified.  Speedups of up to 8% were observed.  (yonik)

* SOLR-8037: Speed up creation of filters from term range queries (i.e. non-numeric range queries)
  and use the filter cache for term range queries that are part of larger queries.  Some observed
  speedups were up to 2.5x for production of filters, and up to 10x for query evaluation with
  embedded term range queres that resulted in filter cache hits.  (yonik)

* SOLR-8559: FCS facet performance optimization which significantly speeds up processing when terms
  are high cardinality and the matching docset is small. When facet minCount > 0 and the number of
  matching documents is small (or 0) this enhancement prevents considering terms which have a 0
  count. Also includes change to move to the next non-zero term value when selecting a segment
  position. (Keith Laban, Steve Bower, Dennis Gove)

* SOLR-8532: Optimize GraphQuery when maxDepth is set by not collecting edges at the maxDepth level.
  (Kevin Watters via yonik)

* SOLR-8669: Non binary responses use chunked encoding because we flush the outputstream early.
  (Mark Miller)

* SOLR-8720: ZkController#publishAndWaitForDownStates should use #publishNodeAsDown. (Mark Miller)

* SOLR-8082: Can't query against negative float or double values when indexed="false"
  docValues="true" multiValued="false".  (hossman, Ishan Chattopadhyaya, yonik, Steve Rowe)

Other Changes
----------------------

* SOLR-6127: Improve example docs, using films data (Varun Thacker via ehatcher)

* SOLR-6895: Deprecated SolrServer classes have been removed (Alan Woodward,
  Erik Hatcher)

* SOLR-6954: Deprecated SolrClient.shutdown() method removed (Alan Woodward)

* SOLR-7355: Switch from Google's ConcurrentLinkedHashMap to Caffeine.  Only
  affects HDFS support. (Ben Manes via Shawn Heisey)

* SOLR-7624: Remove deprecated zkCredientialsProvider element in solrcloud section of solr.xml.
  (Xu Zhang, Per Steffensen, Ramkumar Aiyengar, Mark Miller)

* SOLR-7513: Add Equalitors to Streaming Expressions (Dennis Gove, Joel Bernstein)

* SOLR-7528: Simplify Interfaces used in Streaming Expressions (Dennis Gove, Joel Bernstein)

* SOLR-7554: Add checks in Streams for incoming stream order (Dennis Gove, Joel Bernstein)

* SOLR-7441: Improve overall robustness of the Streaming stack: Streaming API,
  Streaming Expressions, Parallel SQL (Joel Bernstein)

* SOLR-8153: Support upper case and mixed case column identifiers in the SQL interface
  (Joel Bernstein)

* SOLR-8132: HDFSDirectoryFactory now defaults to using the global block cache. (Mark Miller)

* SOLR-8261: Change SchemaSimilarityFactory default to BM25Similarity (hossman)

* SOLR-8259: Remove deprecated JettySolrRunner.getDispatchFilter()

* SOLR-8258: Change default hdfs tlog replication factor from 1 to 3. (Mark Miller)

* SOLR-8270: Change implicit default Similarity to use BM25 when luceneMatchVersion >= 6 (hossman)

* SOLR-8271: Change implicit default Similarity to use SchemaSimilarityFactory when luceneMatchVersion >= 6 (hossman)

* SOLR-8179: SQL JDBC - DriverImpl loadParams doesn't support keys with no values in the connection string
  (Kevin Risden, Joel Bernstein)

* SOLR-8131: Make ManagedIndexSchemaFactory the default schemaFactory when luceneMatchVersion >= 6
  (Uwe Schindler, shalin, Varun Thacker)

* SOLR-8266: Remove Java Serialization from the Streaming API. The /stream handler now only accepts
  Streaming Expressions. (Jason Gerlowski, Joel Bernstein)

* SOLR-8426: Enable /export, /stream and /sql handlers by default and remove them from example configs.  (shalin)

* SOLR-8443: Change /stream handler http param from "stream" to "expr" (Joel Bernstein, Dennis Gove)

* SOLR-5209: Unloading or deleting the last replica of a shard now no longer
  cascades to remove the shard from the clusterstate. (Christine Poerschke)

* SOLR-8190: Implement Closeable on TupleStream (Kevin Risden, Joel Bernstein)

* SOLR-8529: Improve JdbcTest to not use plain assert statements (Kevin Risden, Joel Bernstein)

* SOLR-7339: Upgrade Jetty to v9.3.8.v20160314. (Gregg Donovan, shalin, Mark Miller, Steve Rowe)

* SOLR-5730: Make Lucene's SortingMergePolicy and EarlyTerminatingSortingCollector configurable in Solr.
  (Christine Poerschke, hossmann, Tomás Fernández Löbbe, Shai Erera)

* SOLR-8677: Prevent shards containing invalid characters from being created.  Checks added server-side
  and in SolrJ.  (Shai Erera, Jason Gerlowski, Anshum Gupta)

* SOLR-8693: Improve ZkStateReader logging. (Scott Blum via Mark Miller)

* SOLR-8710: Upgrade morfologik-stemming to version 2.1.0. (Dawid Weiss)

* SOLR-8711: Upgrade Carrot2 clustering dependency to 3.12.0. (Dawid Weiss)

* SOLR-8690: Make peersync fingerprinting optional with solr.disableFingerprint system
  property. (yonik)

* SOLR-8691: Cache index fingerprints per searcher. (yonik)

* SOLR-8746: Renamed Overseer.getInQueue to getStateUpdateQueue, getInternalQueue to getInternalWorkQueue
  and added javadocs. (Scott Blum, shalin)

* SOLR-8752: Add a test for SizeLimitedDistributedMap and improve javadocs. (shalin)

* SOLR-8671: Date statistics: make "sum" a double instead of a long/date (Tom Hill, Christine Poerschke,
  Tomás Fernández Löbbe)

* SOLR-8713: new UI and example solrconfig files point to Reference Guide for Solr Query Syntax instead
  of the wiki. (Marius Grama via Tomás Fernández Löbbe)

* SOLR-8758: Add a new SolrCloudTestCase class, using MiniSolrCloudCluster (Alan
  Woodward)

* SOLR-8736: schema GET operations on fields, dynamicFields, fieldTypes, copyField are
  reimplemented as a part of the bulk API with less details (noble)

* SOLR-8766: Remove deprecated <admin> tag in solrconfig.xml and support for admin/gettableFiles
  (noble, Jason Gerlowski, Varun Thacker)

* SOLR-8799: Improve error message when tuple can't be read by SolrJ JDBC (Kevin Risden, Joel Bernstein)

* SOLR-8836: Return 400, and a SolrException when an invalid json is provided to the update handler
  instead of 500. (Jason Gerlowski via Anshum Gupta)

* SOLR-8740: docValues are now enabled by default for most non-text (string, date, and numeric) fields
  in the schema templates. (yonik)

* SOLR-8819: Implement DatabaseMetaDataImpl getTables() and fix getSchemas(). (Trey Cahill,
  Joel Bernstein, Kevin Risden)

* SOLR-8810: Implement Connection.setReadOnly, Statement.set/getFetchSize,
  ResultSet.getType (Kevin Risden)

* SOLR-8904: All dates are formatted via Instant.toString() (ISO-8601); see Solr upgrade notes for differences. Will
  now parse (and format) dates with a leading '+' or '-' (BC dates or dates > 4 digit year.
  [value] and ms() and contrib/analytics now parse with date math. (David Smiley)

* SOLR-8904: DateUtil in SolrJ moved to the extraction contrib as ExtractionDateUtil.  Obsolete methods were removed.
  (David Smiley)

======================= 5.5.5 =======================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.10.4
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.2.13.v20150730

Upgrade Notes
----------------------

* SOLR-11477: in the XML query parser (defType=xmlparser or {!xmlparser ... })
  the resolving of external entities is now disallowed by default.

* SOLR-11482: RunExecutableListener was deprecated and is disabled by default for
  security reasons. Legacy applications still using it must explicitely pass
  '-Dsolr.enableRunExecutableListener=true' to the Solr command line.
  Be aware that you should really disable API-based config editing at the same
  time, using '-Ddisable.configEdit=true'!  (Uwe Schindler)

Bug Fixes
----------------------

* SOLR-10420: Leaking one SolrZkClient instance per second (Scott Blum, Cao Manh Dat, Markus Jelsma, Steve Rowe)

* SOLR-11477: Disallow resolving of external entities in the XML query parser (defType=xmlparser).
  (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)

Other
----------------------

* SOLR-11486: Update jmatio to 1.2 and prevent deserialization inside Matlab files.
  (Uwe Schindler, Steve Rowe)

======================= 5.5.4 =======================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.15.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.14.v20161028


Other Changes
----------------------

* SOLR-9819: Upgrade commons-fileupload to 1.3.2, fixing a potential vulnerability CVE-2016-3092 (Anshum Gupta)

* SOLR-10031: Validation of filename params in ReplicationHandler (Hrishikesh Gadre, janhoy)


======================= 5.5.3 =======================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.13
Carrot2 3.12.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.3.8.v20160314


(No Changes)


======================= 5.5.2 =======================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.10.4
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.2.13.v20150730

Bug Fixes
---------------------

* SOLR-8695: Ensure ZK watchers are not triggering our watch logic on connection events and
  make this handling more consistent. (Scott Blum via Mark Miller)

* SOLR-9198: config APIs unable to add multiple values with same name (noble)

* SOLR-9191: OverseerTaskQueue.peekTopN() fatally flawed (Scott Blum, Noble Paul)

* SOLR-8812: edismax: turn off mm processing if no explicit mm spec is provided
  and there are explicit operators (except for AND) - addresses problems caused by SOLR-2649.
  (Greg Pendlebury, Jan Høydahl, Erick Erickson, Steve Rowe)

* SOLR-9034: Atomic updates failed to work when there were copyField targets that had docValues
  enabled. (Karthik Ramachandran, Ishan Chattopadhyaya, yonik)

* SOLR-8940: Fix group.sort option (hossman)

* SOLR-8857: HdfsUpdateLog does not use configured or new default number of version buckets and is
  hard coded to 256. (Mark Miller, yonik, Gregory Chanan)

* SOLR-8875: SolrCloud Overseer clusterState could unexpectedly be null resulting in NPE.
  (Scott Blum via David Smiley)

* SOLR-8946: bin/post failed to detect stdin usage on Ubuntu; maybe other unixes. (David Smiley)

* SOLR-9004: Fix "name" field type definition in films example. (Alexandre Rafalovitch via Varun Thacker)

* SOLR-8990: Fix top term links from schema browser page to use {!term} parser (hossman)

* SOLR-8971: Preserve root cause when wrapping exceptions (hossman)

* SOLR-8792: ZooKeeper ACL support fixed. (Esther Quansah, Ishan Chattopadhyaya, Steve Rowe)

* SOLR-9030: The 'downnode' overseer command can trip asserts in ZkStateWriter.
  (Scott Blum, Mark Miller, shalin)

* SOLR-9036: Solr slave is doing full replication (entire index) of index after master restart.
  (Lior Sapir, Mark Miller, shalin)

* SOLR-9093: Fix NullPointerException in TopGroupsShardResponseProcessor. (Christine Poerschke)

* SOLR-9118: HashQParserPlugin should trim partition keys (Joel Bernstein)

* SOLR-9117: The first SolrCore is leaked after reload. (Jessica Cheng Mallet via shalin)

* SOLR-9116: Race condition causing occasional SolrIndexSearcher leak when SolrCore is reloaded.
  (Jessica Cheng Mallet via shalin)

* SOLR-8801: /bin/solr create script always returns exit code 0 when a collection/core already exists.
  (Khalid Alharbi, Marius Grama via Steve Rowe)

* SOLR-9134: Fix RestManager.addManagedResource return value. (Christine Poerschke)

* SOLR-9151: Fix SolrCLI so that bin/solr -e cloud example can be run from any CWD (janhoy)

* SOLR-9165: Spellcheck does not return collations if "maxCollationTries" is used with "cursorMark".
  (James Dyer)

* SOLR-8612: closing JDBC Statement on failures in DataImportHandler (DIH) (Kristine Jetzke via Mikhail Khludnev)

* SOLR-8676: keep LOG4J_CONFIG in solr.cmd (Kristine Jetzke via Mikhail Khludnev)

* SOLR-9176: facet method ENUM was sometimes unnecessarily being rewritten to
  FCS, causing slowdowns (Alessandro Benedetti, Jesse McLaughlin, Alan Woodward)

Other Changes
----------------------

* SOLR-7516: Improve javadocs for JavaBinCodec, ObjectResolver and enforce the single-usage policy.
  (Jason Gerlowski, Benoit Vanalderweireldt, shalin)

* SOLR-8967: In SolrCloud mode, under the 'Core Selector' dropdown in the UI the Replication tab won't be displayed
  anymore. The Replication tab is only beneficial to users running Solr in master-slave mode. (Varun Thacker)

* SOLR-9131: Fix "start solr" text in cluster.vm Velocity template (janhoy)

* SOLR-9053: Upgrade commons-fileupload to 1.3.1, fixing a potential vulnerability (Jeff Field, Mike Drob via janhoy)

* SOLR-8866: UpdateLog will now throw an exception if it doesn't know how to serialize a value.
  (David Smiley)

* SOLR-8933: Solr should not close container streams. (Mike Drob, Uwe Schindler, Mark Miller)

* SOLR-9037: Replace multiple "/replication" strings with one static constant. (Christine Poerschke)

* SOLR-9047: zkcli should allow alternative locations for log4j configuration (Gregory Chanan)

* SOLR-9105: Fix a bunch of typos across 103 files (Bartosz Krasiński via janhoy)

* SOLR-8445: fix line separator in log4j.properties files (Ahmet Arslan via Mikhail Khludnev)

* SOLR-8674: Stop ignoring sysprop solr.tests.mergePolicy, and make tests randomly choose between
  setting <mergePolicy> and <mergePolicyFactory>, which was added in SOLR-8621.  (Christine Poerschke)

======================= 5.5.1 =======================

Bug Fixes
----------------------

* SOLR-8737: Managed synonym lists do not include the original term in the expand (janhoy)

* SOLR-8734: fix (maxMergeDocs|mergeFactor) deprecation warnings: in solrconfig.xml
  <maxMergeDocs|mergeFactor> may not be combined with <mergePolicyFactory> and
  <maxMergeDocs|mergeFactor> on their own or combined with <mergePolicy> is a warning.
  (Christine Poerschke, Shai Erera)

* SOLR-8712: Variable solr.core.instanceDir was not being resolved (Kristine
  Jetzke, Shawn Heisey, Alan Woodward)

* SOLR-8793: Fix Core admin status API to not fail when computing the size of the segments_N
  file if the file no longer exists (for example, if a commit happened and the IndexReader
  hasn't refreshed yet). In this case the reported size of the file is -1.
  (Shai Erera, Alexey Serba, Richard Coggins)

* SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
  placement. splitshard should preassign nodes using rules, if rules are present (noble, Shai Erera)

* SOLR-8838: Returning non-stored docValues is incorrect for negative floats and doubles.
  (Ishan Chattopadhyaya, Steve Rowe)

* SOLR-8870: AngularJS Query tab no longer URL-encodes the /select part of the request, fixing possible 404 issue
  when Solr is behind a proxy. Also, now supports old-style &qt param when handler not prefixed with "/" (janhoy)

* SOLR-8725: Allow hyphen in collection, core, shard, and alias name as the non-first character
  (Anshum Gupta) (from 6.0)

* SOLR-8155: JSON Facet API - field faceting on a multi-valued string field without
  docValues (i.e. UnInvertedField implementation), but with a prefix or with a sort
  other than count, resulted in incorrect results.  This has been fixed, and facet.prefix
  support for facet.method=uif has been enabled. (Mikhail Khludnev, yonik)

* SOLR-8835: JSON Facet API: fix faceting exception on multi-valued numeric fields that
  have docValues. (yonik)

* SOLR-8908: Fix to OnReconnect listener registration to allow listeners to deregister, such
  as when a core is reloaded or deleted to avoid a memory leak. (Timothy Potter)

* SOLR-8662: SchemaManager waits correctly for replicas to be notified of a new change
  (sarowe, Noble Paul, Varun Thacker)

* SOLR-9007: Remove mention of the managed_schema_configs as valid config directory when creating
  the collection for the SolrCloud example. (Timothy Potter)

* SOLR-8983: Cleanup clusterstate and replicas for a failed create collection request
  (Varun Thacker, Anshum Gupta)

* SOLR-8578: Successful or not, requests are not always fully consumed by Solrj clients and we
  count on HttpClient or the JVM. (Mark Miller)

* SOLR-8683: Always consume the full request on the server, not just in the case of an error.
  (Mark Miller)

* SOLR-8701: CloudSolrClient decides that there are no healthy nodes to handle a request too early.
  (Mark Miller)

* SOLR-8416: The collections create API should return after all replicas are active.
  (Michael Sun, Mark Miller, Alexey Serba)

* SOLR-8914: ZkStateReader's refreshLiveNodes(Watcher) is not thread safe. (Scott Blum, hoss,
  sarowe, Erick Erickson, Mark Miller, shalin)

* SOLR-8973: Zookeeper frenzy when a core is first created. (Janmejay Singh, Scott Blum, shalin)

* SOLR-8694: DistributedMap/Queue can create too many Watchers and some code simplification.
  (Scott Blum via Mark Miller)

* SOLR-8633: DistributedUpdateProcess processCommit/deleteByQuery call finish on DUP and
  SolrCmdDistributor, which violates the lifecycle and can cause bugs. (hossman via Mark Miller)

* SOLR-8656: PeerSync should use same nUpdates everywhere. (Ramsey Haddad via Mark Miller)

* SOLR-8697, SOLR-8837: Scope ZK election nodes by session to prevent elections from interfering with each other
  and other small LeaderElector improvements. (Scott Blum via Mark Miller, Alan
  Woodward)

* SOLR-8599: After a failed connection during construction of SolrZkClient attempt to retry until a connection
  can be made. (Keith Laban, Dennis Gove)

* SOLR-8420: Fix long overflow in sumOfSquares for Date statistics. (Tom Hill, Christine Poerschke,
  Tomás Fernández Löbbe)

* SOLR-8748: OverseerTaskProcessor limits number of concurrent tasks to just 10 even though the thread pool
  size is 100. The limit has now been increased to 100. (Scott Blum, shalin)

* SOLR-8375: ReplicaAssigner rejects valid nodes (Kelvin Tan, noble)

* SOLR-8738: Fixed false success response when invalid deleteByQuery requests intially hit non-leader
  cloud nodes (hossman)

* SOLR-8771: Multi-threaded core shutdown creates executor per core. (Mike Drob via Mark Miller)

* SOLR-8145: Fix position of OOM killer script when starting Solr in the background (Jurian Broertjes via
  Timothy Potter)

* SOLR-8769: Fix document exclusion in mlt query parser in Cloud mode for schemas that have non-"id"
  unique field (Erik Hatcher, Anshum Gupta)

* SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
  placement. splitshard should preassign nodes using rules, if rules are present (noble, Shai Erera)

* SOLR-8779: Fix missing InterruptedException handling in ZkStateReader.java (Varun Thacker)

* SOLR-8449: Fix the core restore functionality to allow restoring multiple times on the same core
  (Johannes Brucher, Varun Thacker)

* SOLR-8790: Collections API responses contain node name in the core-level responses that are
  returned. (Anshum Gupta)

* SOLR-8804: Fix a race condition in the ClusterStatus API call whereby the call would fail when a concurrent delete
  collection api command was executed (Alexey Serba, Varun Thacker)

* SOLR-9016: Fix SolrIdentifierValidator to not allow empty identifiers. (Shai Erera)

* SOLR-8886: Fix TrieField.toObject(IndexableField) to work for field with docValues
  enabled. (yonik)

* SOLR-8891: Fix StrField.toObject and toExternal to work with docValue IndexableField
  instances. (yonik)

* SOLR-8865: Real-time get sometimes fails to retrieve stored fields from docValues.
  (Ishan Chattopadhyaya, yonik)

* SOLR-9046: Fix solr.cmd that wrongly assumes Jetty will always listen on 0.0.0.0.
  (Bram Van Dam, Uwe Schindler)

Other Changes
----------------------

* SOLR-8758: Add a new SolrCloudTestCase class, using MiniSolrCloudCluster (Alan
  Woodward)

======================= 5.5.0 =======================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.10.4
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.2.13.v20150730

Upgrading from Solr 5.4
-----------------------

* The Solr schema version has been increased to 1.6. Since schema version 1.6, all non-stored docValues fields
  will be returned along with other stored fields when all fields (or pattern matching globs) are specified
  to be returned (e.g. fl=*) for search queries. This behavior can be turned on and off by setting
  'useDocValuesAsStored' parameter for a field or a field type to true (default since schema version 1.6)
  or false (default till schema version 1.5).
  Note that enabling this property has performance implications because DocValues are column-oriented and may
  therefore incur additional cost to retrieve for each returned document. All example schema are upgraded to
  version 1.6 but any older schemas will default to useDocValuesAsStored=false and continue to work as in
  older versions of Solr. If this new behavior is desirable, then you should set version attribute in your
  schema file to '1.6'. Re-indexing is not necessary to upgrade the schema version.
  Also note that while returning non-stored fields from docValues (default in schema versions 1.6+, unless
  useDocValuesAsStored is false), the values of a multi-valued field are returned in sorted order.
  If you require the multi-valued fields to be returned in the original insertion order, then make your
  multi-valued field as stored. This requires re-indexing.
  See SOLR-8220 for more details.

* All protected methods from CoreAdminHandler other than handleCustomAction() is removed by SOLR-8476 and can
  no more be overridden. If you still wish to override those methods, override the handleRequestBody()

* The PERSIST CoreAdmin action which was a NOOP and returned a deprecated message has been removed. See SOLR-8476
  for more details. The corresponding SolrJ action has also been removed.

* bin/post now defaults application/json files to the /update/json/docs end-point.  Use `-format solr` to force
  files to the /update end-point.   See SOLR-7042 for more details.

* In solrconfig.xml the <mergePolicy> element is deprecated in favor of a similar <mergePolicyFactory> element,
  the <mergeFactor> and <maxMergeDocs> elements are also deprecated, please see SOLR-8621 for full details.

  To migrate your existing solrconfig.xml, you can replace elements as follows:

  <!-- TieredMergePolicy example -->
  <!-- deprecated -->
  <mergeFactor>??</mergeFactor>
  <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
    <bool name="useCompoundFile">???</bool> <!-- deprecated since Lucene/Solr 4.4.0 -->
    ...
  </mergePolicy>
  <!-- replacement -->
  <useCompoundFile>???</useCompoundFile> <!-- since Lucene/Solr 4.4.0 -->
  <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
    <int name="maxMergeAtOnce">??</int> <!-- formerly the <mergeFactor> element implicitly set this -->
    <int name="segmentsPerTier">??</int> <!-- formerly the <mergeFactor> element implicitly set this -->
    ...
  </mergePolicyFactory>

  <!-- Log(ByteSize|Doc)MergePolicy example -->
  <!-- deprecated -->
  <maxMergeDocs>????</maxMergeDocs>
  <mergeFactor>??</mergeFactor>
  <mergePolicy class="org.apache.lucene.index.Log?MergePolicy">
    <bool name="useCompoundFile">???</bool> <!-- deprecated since Lucene/Solr 4.4.0 -->
    ...
  </mergePolicy>
  <!-- replacement -->
  <useCompoundFile>???</useCompoundFile> <!-- since Lucene/Solr 4.4.0 -->
  <mergePolicyFactory class="org.apache.solr.index.Log?MergePolicyFactory">
    <int name="maxMergeDocs">????</int> <!-- formerly the <maxMergeDocs> element set this -->
    <int name="mergeFactor">??</int> <!-- formerly the <mergeFactor> element set this -->
    ...
  </mergePolicyFactory>

* Clearing up stored async collection api responses via REQUESTSTATUS call is now deprecated and would be
  removed in 6.0. See SOLR-8648 for more details.

* SOLR-6594: Deprecated the old schema API which will be removed in a later major release

Detailed Change List
----------------------

New Features
----------------------

* SOLR-7928: Improve CheckIndex to work against HdfsDirectory
  (Mike Drob, Gregory Chanan)

* SOLR-8378: Add upconfig and downconfig commands to the bin/solr script
  (Erick Erickson)

* SOLR-8434: Add wildcard support to role, to match any role in RuleBasedAuthorizationPlugin (noble)

* SOLR-4280: Allow specifying "spellcheck.maxResultsForSuggest" as a percentage of filter
  query results (Markus Jelsma via James Dyer)

* SOLR-8429: Add a flag 'blockUnknown' to BasicAuthPlugin to block unauthenticated requests (noble)

* SOLR-8230: JSON Facet API: add "facet-info" into debug section of response when debugQuery=true
  (Michael Sun, yonik)

* SOLR-8428: RuleBasedAuthorizationPlugin adds an 'all' permission (noble)

* SOLR-5743: BlockJoinFacetComponent and BlockJoinDocSetFacetComponent for calculating facets by
  child.facet.field parameter with {!parent ..}.. query. They count facets on children documents
  aggregating (deduplicating) counts by parent documents (Dr. Oleg Savrasov via Mikhail Khludnev)

* SOLR-8220: Read field from DocValues for non stored fields.
  (Keith Laban, yonik, Erick Erickson, Ishan Chattopadhyaya, shalin)

* SOLR-8470: Make TTL of PKIAuthenticationPlugin's tokens configurable through a system property
  (pkiauth.ttl) (noble)

* SOLR-8477: Let users choose compression mode in SchemaCodecFactory (Tomás Fernández Löbbe)

* SOLR-839: XML QueryParser support (defType=xmlparser)
  Lucene includes a queryparser that supports the creation of Lucene queries from XML.
  The queries supported by lucene.queryparser.xml.CoreParser are now supported by the newly
  created solr.search.SolrCoreParser and in future SolrCoreParser could support additional
  queries also.
  Example: <BooleanQuery fieldName="description">
             <Clause occurs="must"> <TermQuery>shirt</TermQuery> </Clause>
             <Clause occurs="mustnot"> <TermQuery>plain</TermQuery> </Clause>
             <Clause occurs="should"> <TermQuery>cotton</TermQuery> </Clause>
             <Clause occurs="must">
               <BooleanQuery fieldName="size">
                 <Clause occurs="should"> <TermsQuery>S M L</TermsQuery> </Clause>
               </BooleanQuery>
             </Clause>
           </BooleanQuery>
  (Erik Hatcher, Karl Wettin, Daniel Collins, Nathan Visagan, Ahmet Arslan, Christine Poerschke)

* SOLR-8312: Add domain size and numBuckets to facet telemetry info (facet debug info
  for the new Facet Module).  (Michael Sun, yonik)

* SOLR-8534: Add generic support for collection APIs to be async. Thus more actions benefit from having async
  support. The commands that additionally get async support are: delete/reload collection, create/delete alias,
  create/delete shard, delete replica, add/delete replica property, add/remove role,
  overseer status, balance shard unique, rebalance leaders, modify collection, migrate state format (Varun Thacker)

* SOLR-4619: Improve PreAnalyzedField query analysis. (Andrzej Bialecki, Steve Rowe)

* SOLR-8560: Added RequestStatusState enum which can be used when comparing states of
  asynchronous requests. (Shai Erera)

* SOLR-8586: added index fingerprint, a hash over all versions currently in the index.
  PeerSync now uses this to check if replicas are in sync. (yonik)

* SOLR-8500: Allow the number of threads ConcurrentUpdateSolrClient StreamingSolrClients configurable by a
  system property. NOTE: this is an expert option and can result in more often needing to do full index replication
  for recovery, the sweet spot for using this is very high volume, leader-only indexing. (Tim Potter, Erick Erickson)

* SOLR-8642: SOLR allows creation of collections with invalid names
  (Jason Gerlowski via Erick Erickson)

* SOLR-8621: Deprecate <mergePolicy> in favor of <mergePolicyFactory>. It allows to configure
  both the "simple" merge policies, but also more advanced ones, e.g. UpgradeIndexMergePolicy.
  (Christine Poerschke, Shai Erera)

* SOLR-8648: DELETESTATUS API for selective deletion and flushing of stored async collection API responses.
  (Anshum Gupta)

* SOLR-8466: adding facet.method=uif to bring back UnInvertedField faceting which is used to work on
  facet.method=fc. It's more performant for rarely changing indexes. Note: it ignores prefix and contains yet.
  (Jamie Johnson via Mikhail Khludnev)

Bug Fixes
----------------------

* SOLR-8175: Word Break Spellchecker would throw AIOOBE with certain queries containing
   "should" clauses. (Ryan Josal via James Dyer)

* SOLR-2556: The default spellcheck query converter was ignoring terms consisting entirely
  of digits. (James Dyer)

* SOLR-8366: ConcurrentUpdateSolrClient attempts to use response's content type as charset encoding
  for parsing exception. (shalin)

* SOLR-6271: Fix ConjunctionSolrSpellChecker to not compare StringDistance by instance.
  (Igor Kostromin via James Dyer)

* SOLR-7304: Fix Spellcheck Collate to not invalidate range queries. (James Dyer)

* SOLR-8373: KerberosPlugin: Using multiple nodes on same machine leads clients to
  fetch TGT for every request (Ishan Chattopadhyaya via noble)

* SOLR-8367: Fix the LeaderInitiatedRecovery 'all replicas participate' fail-safe.
  (Mark Miller, Mike Drob)

* SOLR-8401: Windows start script fails when executed from a different drive.
  (Nicolas Gavalda via Erick Erickson)

* SOLR-6992: Fix "Files" UI to show the managed-schema file as well.
  (Shawn Heisey, Varun Thacker)

* SOLR-2649: MM ignored in edismax queries with operators.
  (Greg Pendlebury, Jan Høydahl et. al. via Erick Erickson)

* SOLR-8372: Canceled recovery can rarely lead to inconsistent shards:
  If a replica is recovering via index replication, and that recovery fails
  (for example if the leader goes down), and then some more updates are received
  (there could be a few left to be processed from the leader that just went down),
  and then that replica is brought down, it will think it is up-to-date when
  restarted. (shalin, Mark Miller, yonik)

* SOLR-8419: TermVectorComponent for distributed search when distrib.singlePass could include term
  vectors for documents that matched the query yet weren't in the returned documents. (David Smiley)

* SOLR-8015: HdfsLock may fail to close a FileSystem instance if it cannot immediately
  obtain an index lock. (Mark Miller)

* SOLR-8422: When authentication enabled, requests fail if sent to a node that doesn't host
  the collection (noble)

* SOLR-8059: &debug=results for distributed search when distrib.singlePass (sometimes activated
  automatically) could result in an NPE. (David Smiley, Markus Jelsma)

* SOLR-8460: /analysis/field could throw exceptions for custom attributes. (David Smiley, Uwe Schindler)

* SOLR-8276: Atomic updates and realtime-get do not work with non-stored docvalues.
  (Ishan Chattopadhyaya, yonik via shalin)

* SOLR-7462: AIOOBE in RecordingJSONParser (Scott Dawson, noble)

* SOLR-8494: SimplePostTool and therefore the bin/post script cannot upload files larger than 2.1GB. (shalin)

* SOLR-8451: We should not call method.abort in HttpSolrClient or HttpSolrCall#remoteQuery and
  HttpSolrCall#remoteQuery should not close streams. (Mark Miller)

* SOLR-8450: Our HttpClient retry policy is too permissive. (Mark Miller, shalin)

* SOLR-8533: Raise default maxUpdateConnections and maxUpdateConnectionsPerHost to 100k each.
  (Mark Miller)

* SOLR-8453: Solr should attempt to consume the request inputstream on errors as we cannot
  count on the container to do it. (Mark Miller, Greg Wilkins, yonik, Joakim Erdfelt)

* SOLR-6279: cores?action=UNLOAD now waits for the core to close before unregistering it from ZK.
  (Christine Poerschke)

* SOLR-2798: Fixed local params to work correctly with multivalued params
  (Demian Katz via hossman)

* SOLR-8541: Highlighting a geo RPT field would throw an NPE instead of doing nothing.
  (Pawel Rog via David Smiley)

* SOLR-8548: Core discovery was not following symlinks (Aaron LaBella via Alan
  Woodward)

* SOLR-8564: Fix Embedded ZooKeeper to use <solrHome>/zoo_data for it's data directory

* SOLR-8371: Try and prevent too many recovery requests from stacking up and clean up some faulty
  cancel recovery logic. (Mark Miller)

* SOLR-8582 : memory leak in JsonRecordReader affecting /update/json/docs. Large payloads
  cause OOM (noble, shalin)

* SOLR-8605: Regular expression queries starting with escaped forward slash caused
  an exception. (Scott Blum, yonik)

* SOLR-8607: The Schema API refuses to add new fields that match existing dynamic fields.
  (Jan Høydahl, Steve Rowe)

* SOLR-8575: Fix HDFSLogReader replay status numbers, a performance bug where we can reopen
  FSDataInputStream much too often, and an hdfs tlog data integrity bug.
  (Mark Miller, Patrick Dvorack, yonik)

* SOLR-8651: The commitWithin parameter is not passed on for deleteById in UpdateRequest in
  distributed queries (Jessica Cheng Mallet via Erick Erickson)

* SOLR-8551: Make collection deletion more robust. (Mark Miller)

Optimizations
----------------------

* SOLR-8501: Specify the entity request size when known in HttpSolrClient. (Mark Miller)

* SOLR-8615: Just like creating cores, we should use multiple threads when closing cores.
  (Mark Miller)

* SOLR-7281: Add an overseer action to publish an entire node as 'down'. (Mark Miller, shalin)

* SOLR-8669: Non binary responses use chunked encoding because we flush the outputstream early.
  (Mark Miller)

Other Changes
----------------------

* LUCENE-6900: Added test for score ordered grouping, and refactored TopGroupsResultTransformer.
  (David Smiley)

* SOLR-8336: CoreDescriptor now takes a Path for its instance directory, rather
  than a String (Alan Woodward)

* SOLR-8351: Improve HdfsDirectory toString representation
  (Mike Drob via Gregory Chanan)

* SOLR-8321: add a (SolrQueryRequest free) SortSpecParsing.parseSortSpec variant
  (Christine Poerschke)

* SOLR-8338: in OverseerTest replace strings such as "collection1" and "state" with variable
  or enum equivalent  (Christine Poerschke)

* SOLR-8333: Several API tweaks so that public APIs were no longer refering to private classes
  (ehatcher, Shawn Heisey, hossman)

* SOLR-8357: UpdateLog.RecentUpdates now implements Closeable (Alan Woodward)

* SOLR-8339: Refactor SolrDocument and SolrInputDocument to have a common base abstract class
  called SolrDocumentBase. Deprecated methods toSolrInputDocument and toSolrDocument in ClientUtils.
  (Ishan Chattopadhyaya via shalin)

* SOLR-8353: Support regex for skipping license checksums (Gregory Chanan)

* SOLR-8313: SimpleQueryParser doesn't use MultiTermAnalysis for Fuzzy Queries (Tom Hill via Erick Erickson)

* SOLR-8359: Restrict child classes from using parent logger's state
  (Jason Gerlowski, Mike Drob, Anshum Gupta)

* SOLR-8131: All example config sets now explicitly use the ManagedIndexSchemaFactory
  instead of ClassicIndexSchemaFactory. This means that the Schema APIs ( /<collection>/schema )
  are enabled by default and the schema is mutable. The schema file will be called managed-schema
  (Uwe Schindler, shalin, Varun Thacker)

* SOLR-8381: Cleanup data_driven managed-schema and solrconfig.xml files. Commented out copyFields are removed
  and solrconfig.xml doesn't refer to field which are not defined. (Varun Thacker)

* SOLR-7774: revise BasicDistributedZkTest.test logic w.r.t. 'commitWithin did not work on some nodes'
  (Christine Poerschke)

* SOLR-8360: simplify ExternalFileField.getValueSource implementation (Christine Poerschke)

* SOLR-8387: All example configs shipped with Solr explicitly use ManagedIndexSchemaFactory, the schema file will
  be called managed-schema instead of schema.xml . It is not advised to use hand edit the managed-schema. You should
  use the schema APIs instead ( /<collection>/schema ) . If you do not want this behaviour in the example configs,
  before you start solr rename managed-schema to schema.xml and change the schemaFactory in solrconfig.xml file
  to explicitly use ClassicIndexSchemaFactory instead : <schemaFactory class="ClassicIndexSchemaFactory"/>
  (Varun Thacker)

* SOLR-8305: replace LatLonType.getValueSource's QParser use (Christine Poerschke)

* SOLR-8388: factor out response/TestSolrQueryResponse.java from servlet/ResponseHeaderTest.java
  more TestSolrQueryResponse.java tests; add SolrReturnFields.toString method, ReturnFieldsTest.testToString test;
  (Christine Poerschke)

* SOLR-8383: SolrCore.java + QParserPlugin.java container initialCapacity tweaks
  (Christine Poerschke, Mike Drob)

* LUCENE-6925: add RandomForceMergePolicy class in test-framework (Christine Poerschke)

* SOLR-8404: tweak SolrQueryResponse.getToLogAsString, add TestSolrQueryResponse.testToLog (Christine Poerschke)

* SOLR-8352: randomise unload order in UnloadDistributedZkTest.testUnloadShardAndCollection (Christine Poerschke)

* SOLR-8414: AbstractDistribZkTestBase.verifyReplicaStatus could throw NPE (Christine Poerschke)

* SOLR-8410: Add all read paths to 'read' permission in RuleBasedAuthorizationPlugin (noble)

* SOLR-8279: Add a new test fault injection approach and a new SolrCloud test that stops and starts the cluster
  while indexing data and with random faults. (Mark Miller)

* SOLR-8419: TermVectorComponent for distributed search now requires a uniqueKey in the schema.  Also, it no longer
  returns "uniqueKeyField" in the response. (David Smiley)

* SOLR-8317: add & use responseHeader and response accessors to SolrQueryResponse. (Christine Poerschke)

* SOLR-8452: replace "partialResults" occurrences with SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY
  (Christine Poerschke)

* SOLR-8454: ZkStateReader logging improvements and cleanup of dead code (Shai Erera, Anshum Gupta)

* SOLR-8455: RecovertStrategy logging improvements and sleep-between-recovery-attempts bug fix.
  (Shai Erera)

* SOLR-8481: TestSearchPerf no longer needs to duplicate SolrIndexSearcher.(NO_CHECK_QCACHE|NO_CHECK_FILTERCACHE)
  (Christine Poerschke)

* SOLR-8486: No longer require jar/unzip for bin/solr (Steven E. Harris, janhoy)

* SOLR-8483: relocate 'IMPORTANT NOTE' in open-exchange-rates.json test-file to avoid
  OpenExchangeRatesOrgProvider.java warnings (Christine Poerschke)

* SOLR-8489: TestMiniSolrCloudCluster.createCollection to support extra & alternative collectionProperties
  (Christine Poerschke)

* SOLR-8482: add & use QueryCommand.[gs]etTerminateEarly accessors. (Christine Poerschke)

* SOLR-8498: Improve error message when a large value is stored in an indexed string field. (shalin)

* SOLR-8484: refactor update/SolrIndexConfig.LOCK_TYPE_* into core/DirectoryFactory.LOCK_TYPE_*
  (Christine Poerschke)

* SOLR-8504: (IndexSchema|SolrIndexConfig)Test: private static finals for
  solrconfig.xml and schema.xml String literals. (Christine Poerschke)

* SOLR-8505: core/DirectoryFactory.LOCK_TYPE_HDFS - add & use it instead of String literals
  (Christine Poerschke)

* SOLR-7042: bin/post now uses /update/json/docs for application/json content types, including support for
  .jsonl (JSON Lines) files.  (Erik Hatcher and shalin)

* SOLR-8476: Refactor and cleanup CoreAdminHandler (noble, Varun Thacker)

* SOLR-8535: Support forcing define-lucene-javadoc-url to be local (Gregory Chanan)

* SOLR-8549: Solr start script checks for cores which have failed to load as well before attempting to
  create a core with the same name (Varun Thacker)

* SOLR-8555: SearchGroupShardResponseProcessor (initialCapacity) tweaks (Christine Poerschke)

* LUCENE-6978: Refactor several code places that lookup locales
  by string name to use BCP47 locale tag instead. LuceneTestCase
  now also prints locales on failing tests this way. In addition,
  several places in Solr now additionally support BCP47 in config
  files.  (Uwe Schindler, Robert Muir)

* SOLR-7907: Remove CLUSTERSTATUS related exclusivity checks while running commands in the Overseer because the
  CLUSTERSTATUS request is served by the individual nodes itself and not via the Overseer node (Varun Thacker)

* SOLR-8566: various initialCapacity tweaks (Fix Versions: trunk 5.5)
  (Christine Poerschke)

* SOLR-8565: add & use CommonParams.(ROWS|START)_DEFAULT constants (Christine Poerschke)

* SOLR-8595: Use BinaryRequestWriter by default in HttpSolrClient and ConcurrentUpdateSolrClient. (shalin)

* SOLR-8597: add default, no-op QParserPlugin.init(NamedList) method (Christine Poerschke)

* SOLR-7968: Make QueryComponent more extensible. (Markus Jelsma via David Smiley)

* SOLR-8600: add & use ReRankQParserPlugin parameter [default] constants,
  changed ReRankQuery.toString to use StringBuilder. (Christine Poerschke)

* SOLR-8308: Core gets inaccessible after RENAME operation with special characters
  (Erik Hatcher, Erick Erickson)

* SOLR-3141: Warn in logs when expensive optimize calls are made (yonik, janhoy)

==================  5.4.1 ==================

Bug Fixes
----------------------

* SOLR-8460: /analysis/field could throw exceptions for custom attributes. (David Smiley, Uwe Schindler)

* SOLR-8373: KerberosPlugin: Using multiple nodes on same machine leads clients to
  fetch TGT for every request (Ishan Chattopadhyaya via noble)

* SOLR-8059: &debug=results for distributed search when distrib.singlePass (sometimes activated
  automatically) could result in an NPE. (David Smiley, Markus Jelsma)

* SOLR-8422: When authentication enabled, requests fail if sent to a node that doesn't host
  the collection (noble)

* SOLR-7462: AIOOBE in RecordingJSONParser (Scott Dawson, noble)

* SOLR-8496: SolrIndexSearcher.getDocSet(List<Query>) incorrectly included deleted documents
  when all of the queries were uncached (or there was no filter cache).  This caused
  multi-select faceting (including the JSON Facet API) to include deleted doc counts
  when the remaining non-excluded filters were all uncached.  This bug was first introduced in 5.3.0
  (Andreas Müller, Vasiliy Bout, Erick Erickson, Shawn Heisey, Hossman, yonik)

* SOLR-8418: Adapt to changes in LUCENE-6590 for use of boosts with MLTHandler and
  Simple/CloudMLTQParser (Jens Wille, Ramkumar Aiyengar)

New Features
----------------------

* SOLR-8470: Make TTL of PKIAuthenticationPlugin's tokens configurable through a system property
  (pkiauth.ttl) (noble)

==================  5.4.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.10.4
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.2.13.v20150730

Upgrading from Solr 5.3
-----------------------

* DefaultSimilarityFactory has been renamed to ClassicSimilarityFactory to match the underlying rename of
  DefaultSimilarity to ClassicSimilarity and the (eventual) move away from using it as a default.
  If you currently have DefaultSimilarityFactory explicitly referenced in your schema.xml, you will now get
  a warning urging you to edit your config to use the functionally identical ClassicSimilarityFactory.
  DefaultSimilarityFactory will be removed completely in Solr 6.  See SOLR-8239 for more details.

* SOLR-7859: The following APIs are now deprecated:
  - SolrCore.getStartTime: Use SolrCore.getStartTimeStamp instead.
  - SolrIndexSearcher.getOpenTime: Use SolrIndexSearcher.getOpenTimeStamp instead.

* SOLR-8307: EmptyEntityResolver was moved from core to solrj, and moved from the org.apache.solr.util
  package to org.apache.solr.common.  If you are using this class, you will need to adjust the import package.

* Logger declarations in most source files have changed to code that
  no longer needs to explicitly state the class name.  This fixes situations
  where a logger for a different class was incorrectly used. See SOLR-8324
  and its sub-issues for details.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-5756: A utility Collection API to move a collection from shared clusterstate.json (stateFormat=1,
  default until 4.x) to the per-collection state.json stored in ZooKeeper (stateFormat=2,
  default since 5.0) seamlessly without any application down-time.
  Example:
  http://localhost:8983/solr/admin/collections?action=MIGRATESTATEFORMAT&collection=<collection_name>
  (Noble Paul, Scott Blum, shalin)

* SOLR-7219: filterCache access added to the solr query syntax.
  Example: description:HDTV OR filter(+promotion:tv +promotion_date:[NOW/DAY TO NOW/DAY+7DAY])
  (yonik)

* SOLR-7775: Allow fromIndex parameter to ScoreJoinQParserPlugin {!join score=.. fromIndex=..}..
   to refer to a single-sharded collection that has a replica on all nodes where there is a
   replica in the to index (Andrei Beliakov via Mikhail Khludnev)

* SOLR-7961: Print Solr's version with command bin/solr version (janhoy)

* SOLR-7789: Introduce a ConfigSet management API (Gregory Chanan)

* SOLR-4316: Add a collections dropdown to angular admin UI (Upayavira, Shalin Shekhar Mangar)

* SOLR-7915: Provide pluggable context tool support for VelocityResponseWriter (Erik Hatcher)

* LUCENE-6795: SystemInfoHandler was improved to also show detailed operating
  system statistics on IBM J9 virtual machines. It also no longer fails on Java 9
  with Jigsaw module system.  (Uwe Schindler)

* SOLR-8053: Basic auth support in SolrJ (noble)

* SOLR-7995: Add a LIST command to ConfigSets API (Gregory Chanan)

* SOLR-4388: In Angular UI, add a Collections UI when in cloud mode (Upayavira)

* SOLR-7858, SOLR-8199: Add links between original and new Admin UIs (Upayavira)

* SOLR-7888: Analyzing suggesters can now filter suggestions by a context field (Arcadius Ahouansou, janhoy)

* SOLR-8217: JSON Facet API: add "method" param to terms/field facets to give an execution
  hint for what method should be used to facet.  (yonik)

* SOLR-8113: CloneFieldUpdateProcessorFactory now supports choosing a "dest" field name based on a regex
  pattern and replacement init options. (Gus Heck, hossman)

* SOLR-8139: Create/delete fields/dynamic fields/copy fields via schema tab on Angular UI

* SOLR-8166: Introduce possibility to configure ParseContext in
  ExtractingRequestHandler/ExtractingDocumentLoader (Andriy Binetsky
  via Uwe Schindler)

* SOLR-7569: A collection API to force elect a leader, called FORCELEADER, when all replicas in a shard are down
  (Ishan Chattopadhyaya, Mark Miller, shalin, noble)

* SOLR-6168: Add a 'sort' local param to the collapse QParser to support using complex sort options
  to select the representitive doc for each collapsed group. (Umesh Prasad, hossman)

* SOLR-8329: SchemaSimilarityFactory now supports a 'defaultSimFromFieldType' init option for using
  a fieldType name to identify which Similarity to use as a default. (hossman)

* SOLR-7912: Add boost support, and also exclude the queried document in MoreLikeThis QParser
  (Jens Wille via Anshum Gupta)

Bug Fixes
----------------------

* SOLR-7859: Fix usage of currentTimeMillis instead of nanoTime in multiple places,
  whitelist valid uses of currentTimeMillis (Ramkumar Aiyengar)

* SOLR-7836: Possible deadlock when closing refcounted index writers.
  (Jessica Cheng Mallet, Erick Erickson, Mark Miller, yonik)

* SOLR-7869: Overseer does not handle BadVersionException correctly and, in some cases,
  can go into an infinite loop if cluster state in ZooKeeper is modified externally.
  (Scott Blum, shalin)

* SOLR-7920: Resolve XSS issue in Admin UI Schema Browser (David Chiu via Upayavira)

* SOLR-7935: Fix very rare race condition that can cause an update to fail
  via NullPointerException during a core reload. (yonik)

* SOLR-7941: multivalued params are concatenated when using config API (noble)

* SOLR-7956: There are interrupts on shutdown in places that can cause ChannelAlreadyClosed
  exceptions which prevents proper closing of transaction logs, interfere with the IndexWriter,
  the hdfs client and other things. (Mark Miller, Scott Blum)

* SOLR-7954: Fixed an integer overflow bug in the HyperLogLog code used by the 'cardinality' option
  of stats.field to prevent ArrayIndexOutOfBoundsException in a distributed search when a large precision
  is selected and a large number of values exist in each shard (hossman)

* SOLR-7844: Zookeeper session expiry during shard leader election can cause multiple leaders.
  (Mike Roberts, Mark Miller, Jessica Cheng)

* SOLR-7984: wrong and misleading error message 'no default request handler is registered' (noble, hossman)

* SOLR-8001: Fixed bugs in field(foo,min) and field(foo,max) when some docs have no values
  (David Smiley, hossman)

* SOLR-7819: ZK connection loss or session timeout do not stall indexing threads anymore. All activity
  related to leader initiated recovery is performed by a dedicated LIR thread in the background.
  (Ramkumar Aiyengar, shalin)

* SOLR-7746: Ping requests stopped working with distrib=true in Solr 5.2.1.
  (Alexey Serba, Michael Sun via Gregory Chanan)

* SOLR-6547: ClassCastException in SolrResponseBase.getQTime on update response from CloudSolrClient
  when parallelUpdates is enabled (default) and multiple docs are sent as a single update.
  (kevin, hossman, shalin)

* SOLR-8058: Fix the exclusion filter so that collections that start with js, css, img, tpl
  can be accessed. (Upayavira, Steve Rowe, Anshum Gupta)

* SOLR-8069: Ensure that only the valid ZooKeeper registered leader can put a replica into Leader
  Initiated Recovery. (Mark Miller, Jessica Cheng, Anshum Gupta)

* SOLR-8077: Replication can still cause index corruption. (Mark Miller)

* SOLR-8104: Config API does not work for spellchecker (noble)

* SOLR-8095: Allow disabling HDFS Locality Metrics and disable by default as it may have performance
  implications on rapidly changing indexes. (Mike Drob via Mark Miller)

* SOLR-8085: Fix a variety of issues that can result in replicas getting out of sync. (yonik, Mark Miller)

* SOLR-8094: HdfsUpdateLog should not replay buffered documents as a replacement to dropping them.
  (Mark Miller)

* SOLR-8075: Leader Initiated Recovery should not stop a leader that participated in an election with all
  of it's replicas from becoming a valid leader. (Mark Miller)

* SOLR-8072: Rebalance leaders feature does not set CloudDescriptor#isLeader to false when bumping leaders.
  (Mark Miller)

* SOLR-7666: Many small fixes to Angular UI (Upayavira, Alexandre Rafalovitch)

* SOLR-7967: AddSchemaFieldsUpdateProcessorFactory does not check if the ConfigSet is immutable (Gregory Chanan)

* SOLR-6188: Skip the automatic loading of resources in the "lib" subdirectory
  by SolrResourceLoader, but only if we are loading resources from the solr
  home directory.  Fixes the inability to use ICU analysis components with a
  "solr." prefix on the classname. (Shawn Heisey)

* SOLR-8130: Solr's hdfs safe mode detection does not catch all cases of being in safe mode.
  (Mark Miller, Mike Drob)

* SOLR-8128: Set v.locale specified locale for all LocaleConfig extending VelocityResponseWriter tools.
  (Erik Hatcher)

* SOLR-8152: Overseer Task Processor/Queue can miss responses, leading to timeouts.
  (Gregory Chanan)

* SOLR-8107: bin/solr -f should use exec to start the JVM (Martijn Koster via Timothy Potter)

* SOLR-8050: Partial update on document with multivalued date field fails to parse date and can
  also fail to remove dates in some cases. (Burkhard Buelte, Luc Vanlerberghe, shalin)

* SOLR-8167: Authorization framework does not work with POST params (noble)

* SOLR-8162: JmxMonitoredMap#clear triggers a query on all the MBeans thus generating lots of warnings.
  (Marius Dumitru Florea, shalin)

* SOLR-7843: DataImportHandler's delta imports leak memory because the delta keys are kept in memory
  and not cleared after the process is finished. (Pablo Lozano via shalin)

* SOLR-8189: eTag calculation during HTTP Cache Validation uses unsynchronized WeakHashMap causing
  threads to be stuck in runnable state. (shalin)

* SOLR-7993: Raw json output for fields stopped working in 5.3.0 when requested fields do not include
  the unique key field name. (Bill Bell, Ryan McKinley via shalin)

* SOLR-8192: JSON Facet API allBuckets:true did not work correctly when faceting
  on a multi-valued field with sub-facets / facet functions. (yonik)

* SOLR-8206: JSON Facet API limit:0 did not always work correctly.  (yonik)

* SOLR-8126: update-<component-name> does not work if the component is only
  present in solrconfig.xml (noble)

* SOLR-8203: Stop processing updates more quickly on node shutdown.  When a node
  is shut down, streaming updates would continue, but new update requests would
  be aborted.  This can cause big update reorders that can cause replicas to
  get out of sync. (Mark Miller, yonik)

* SOLR-6406: ConcurrentUpdateSolrClient hang in blockUntilFinished. If updates are still
  flowing and shutdown is called on the executor service used by ConcurrentUpdateSolrClient,
  a race condition can cause that client to hang in blockUntilFinished.
  (Mark Miller, yonik)


* SOLR-8215: Only active replicas should handle incoming requests against a collection (Varun Thacker)

* SOLR-8223: Avoid accidentally swallowing OutOfMemoryError (in LeaderInitiatedRecoveryThread.java
  or CoreContainer.java) (Mike Drob via Christine Poerschke)

* SOLR-8255: MiniSolrCloudCluster needs to use a thread-safe list to keep track
  of its child nodes (Alan Woodward)

* SOLR-8254: HttpSolrCore.getCoreByCollection() can throw NPE (Alan Woodward,
  Mark Miller)

* SOLR-8262: Comment out /stream handler from sample solrconfig.xml's for security reasons
  (Joel Bernstein)

* SOLR-7989: After a new leader is elected it should change it's state to ACTIVE even
  if the last published state is something else if it has already registered with ZK.
  (Ishan Chattopadhyaya, Mark Miller via noble)

* SOLR-8287: TrieDoubleField and TrieLongField now override toNativeType
  (Ishan Chattopadhyaya via Christine Poerschke)

* SOLR-8284: JSON Facet API - fix NPEs when short form "sort:index" or "sort:count"
  are used. (Michael Sun via yonik)

* SOLR-8295: Fix NPE in collapse QParser when collapse field is missing from all docs in a segment (hossman)

* SOLR-8280: Fixed bug in SimilarityFactory initialization that prevented SolrCoreAware factories -- such
  as SchemaSimilarityFactory -- from functioning properly with managed schema features. (hossman)

* SOLR-5971: Fix error 'Illegal character in query' when proxying request.
  (Uwe Schindler, Ishan Chattopadhyaya, Eric Bus)

* SOLR-8307: Fix XXE vulnerability in MBeansHandler "diff" feature (Erik Hatcher)

* SOLR-8073: Solr fails to start on Windows with obscure errors when using relative path.
  (Alexandre Rafalovitch, Ishan Chattopadhyaya via shalin)

* SOLR-7169: bin/solr status should return exit code 3, not 0 if Solr is not running
  (Dominik Siebel via Timothy Potter)

* SOLR-8341: Fix JSON Facet API excludeTags when specified in the
  form of domain:{excludeTags:mytag} (yonik)

* SOLR-8326: If BasicAuth enabled, inter node requests fail after node restart (noble, Anshum Gupta)

* SOLR-8340: Fixed NullPointerException in HighlightComponent.
  (zengjie via Christine Poerschke)

* SOLR-8355: update permissions were failing node recovery (noble , Anshum Gupta)

Optimizations
----------------------

* SOLR-7918: Filter (DocSet) production from term queries has been optimized and
  is anywhere from 20% to over 100% faster and produces less garbage on average.
  (yonik)

* SOLR-6760: New optimized DistributedQueue implementation for overseer increases
  message processing performance by ~470%.
  (Noble Paul, Scott Blum, shalin)

* SOLR-6629: Watch /collections zk node on all nodes so that cluster state updates
  are more efficient especially when cluster has a mix of collections in stateFormat=1
  and stateFormat=2. (Scott Blum, shalin)

* SOLR-7971: Reduce memory allocated by JavaBinCodec to encode small strings by an amount
  equal to the string.length(). JavaBinCodec now uses a double pass approach to write strings
  larger than 64KB to avoid allocating buffer memory equal to string's UTF8 size.
  (yonik, Steve Rowe, Mikhail Khludnev, Noble Paul, shalin)

* SOLR-7983: Utils.toUTF8 uses larger buffer than necessary for holding UTF8 data. (shalin)

* SOLR-8222: JSON Facet API optimization to faceting by count on docvalue fields (or indexed fields
  with method=dv) when there are multiple hits expected for enoug buckets. For example, this
  more than doubled the performance of faceting 5M documents over a field with 1M unique values.
  (yonik)

* SOLR-8288: DistributedUpdateProcessor#doFinish should explicitly check and ensure it
  does not try to put itself into LIR. (Mark Miller)

Other Changes
----------------------

* SOLR-8294: Cleanup solrconfig.xmls under solr/example/example-DIH/solr (removed
  obsolete clustering handler sections). (Dawid Weiss)

* SOLR-7969: Unavailable clustering engines should not fail the core. (Dawid Weiss)

* SOLR-7790, SOLR-7791: Update Carrot2 clustering component to
  version 3.10.4. Upgrade HPPC library to version 0.7.1. (Dawid Weiss)

* SOLR-7831: Start Scripts: Allow a configurable stack size [-Xss] (Steve Davids via Mark Miller)

* SOLR-7870: Write a test which asserts that requests to stateFormat=2 collection succeed on a node
  even after all local replicas of that collection have been removed.
  (Scott Blum via shalin)

* SOLR-7902: Split out use of child timers from RTimer to a sub-class
  (Ramkumar Aiyengar)

* SOLR-7943: Upgrade Jetty to 9.2.13.v20150730. (Bill Bell, shalin)

* SOLR-7007: DistributedUpdateProcessor now logs replay flag as boolean instead of int
  (Mike Drob via Christine Poerschke)

* SOLR-7960: Start scripts now gives generic help for bin/solr -h and bin/solr --help (janhoy)

* SOLR-7970: Factor out a SearchGroupsFieldCommandResult class.
  (Christine Poerschke)

* SOLR-7942: Previously removed unlockOnStartup option (LUCENE-6508) now logs warning if configured,
  will be an error in 6.0.  Also improved error msg if an index is locked on startup  (hossman)

* SOLR-7979: Fix two typos (in a CoreAdminHandler log message and a TestCloudPivotFacet comment).
  (Mike Drob via Christine Poerschke)

* SOLR-7966: Solr Admin UI Solr now sets the HTTP header X-Frame-Options to DENY
  to avoid clickjacking. (yonik)

* SOLR-7999: SolrRequestParser tests no longer depend on external URLs
  that may fail to work.  (Uwe Schindler)

* SOLR-8034: Leader no longer puts replicas in recovery in case of a failed update, when minRF
  isn't achieved. (Jessica Cheng, Timothy Potter, Anshum Gupta)

* SOLR-8066: SolrCore.checkStale method doesn't restore interrupt status. (shalin)

* SOLR-8068: Throw a SolrException if the core container has initialization errors or is
  shutting down (Ishan Chattopadhyaya, Noble Paul, Anshum Gupta)

* SOLR-8083: Convert the ZookeeperInfoServlet to a handler at /admin/zookeeper (noble)

* SOLR-8025: remove unnecessary ResponseBuilder.getQueryCommand() calls (Christine Poerschke)

* SOLR-8150: Fix build failure due to too much output from QueryResponseTest (janhoy)

* SOLR-8151: OverseerCollectionMessageHandler was logging info data as WARN
  (Alan Woodward)

* SOLR-8116: SearchGroupsResultTransformer tweaks (String literals, list/map initialCapacity)
  (Christine Poerschke)

* SOLR-8114: in Grouping.java rename groupSort and sort to withinGroupSort and groupSort
  (Christine Poerschke)

* SOLR-8074: LoadAdminUIServlet directly references admin.html (Mark Miller, Upayavira)

* SOLR-8195: IndexFetcher download trace now includes bytes-downloaded[-per-second]
  (Christine Poerschke)

* SOLR-4854: Add a test to assert that [elevated] DocTransfer works correctly with javabin
  response format. (Ray, shalin)

* SOLR-8196: TestMiniSolrCloudCluster.testStopAllStartAll case plus necessary
  MiniSolrCloudCluster tweak (Christine Poerschke)

* SOLR-8221: MiniSolrCloudCluster should create subdirectories for its nodes
  (Alan Woodward)

* SOLR-8218: DistributedUpdateProcessor (initialCapacity) tweaks
  (Christine Poerschke)

* SOLR-8147: contrib/analytics FieldFacetAccumulator now throws IOException instead of SolrException
  (Scott Stults via Christine Poerschke)

* SOLR-8239: Added ClassicSimilarityFactory, marked DefaultSimilarityFactory as deprecated. (hossman)

* SOLR-8253: AbstractDistribZkTestBase can sometimes fail to shut down its
  ZKServer (Alan Woodward)

* SOLR-8260: Use NIO2 APIs in core discovery (Alan Woodward)

* SOLR-8259: Deprecate JettySolrRunner.getDispatchFilter(), add
  .getSolrDispatchFilter() and .getCoreContainer() (Alan Woodward)

* SOLR-8278: Use NIO2 APIs in ConfigSetService (Alan Woodward)

* SOLR-8286: Remove instances of solr.hdfs.blockcache.write.enabled from tests
  and docs (Gregory Chanan)

* SOLR-8269: Upgrade commons-collections to 3.2.2. This fixes a known serialization vulnerability (janhoy)

* SOLR-8246: Fix SolrCLI to clean the config directory in case creating a core failed.
  (Jason Gerlowski via Shai Erera)

* SOLR-8290: remove SchemaField.checkFieldCacheSource's unused QParser argument (Christine Poerschke)

* SOLR-8300: Use constants for the /overseer_elect znode (Varun Thacker)

* SOLR-8283: factor out StrParser from QueryParsing.StrParser and SortSpecParsing[Test]
  from QueryParsing[Test] (Christine Poerschke)

* SOLR-8298: small preferLocalShards implementation refactor (Christine Poerschke)

* SOLR-8315: Removed default core checks in the dispatch filter since we don't have a default
  core anymore (Varun Thacker)

* SOLR-8302: SolrResourceLoader now takes a Path as its instance directory (Alan
  Woodward, Shawn Heisey)

* SOLR-8303: CustomBufferedIndexInput now includes resource description when
  throwing EOFException.  (Mike Drob via Uwe Schindler)

* SOLR-8194: Improve error reporting for null documents in UpdateRequest (Markus
  Jelsma, Alan Woodward)

* SOLR-8277: (Search|Top)GroupsFieldCommand tweaks (Christine Poerschke)

* SOLR-8299: ConfigSet DELETE operation no longer allows deletion of config sets that
  are currently in use by other collections (Anshum Gupta)

* SOLR-8101: Improve Linux service installation script (Sergey Urushkin via Timothy Potter)

* SOLR-8180: jcl-over-slf4j should have officially been a SolrJ dependency; it now is.
  (David Smiley, Kevin Risden)

* SOLR-8330: Standardize and fix logger creation and usage so that they aren't shared
  across source files.(Jason Gerlowski, Uwe Schindler, Anshum Gupta)

* SOLR-8363: Fix check-example-lucene-match-version Ant task and addVersion.py script to
  check and update luceneMatchVersion under solr/example/ configs as well logic. (Varun Thacker)

==================  5.3.2 ==================

Bug Fixes
----------------------

* SOLR-8460: /analysis/field could throw exceptions for custom attributes. (David Smiley, Uwe Schindler)

* SOLR-8373: KerberosPlugin: Using multiple nodes on same machine leads clients to
  fetch TGT for every request (Ishan Chattopadhyaya via noble)

* SOLR-8340: Fixed NullPointerException in HighlightComponent. (zengjie via Christine Poerschke)

* SOLR-8059: &debug=results for distributed search when distrib.singlePass (sometimes activated
  automatically) could result in an NPE. (David Smiley, Markus Jelsma)

* SOLR-8167: Authorization framework does not work with POST params (noble)

* SOLR-8355: update permissions were failing node recovery (noble , Anshum Gupta)

* SOLR-8326: If BasicAuth enabled, inter node requests fail after node restart (noble, Anshum Gupta)

* SOLR-8269: Upgrade commons-collections to 3.2.2. This fixes a known serialization vulnerability (janhoy)

* SOLR-8422: When authentication enabled, requests fail if sent to a node that doesn't host
  the collection (noble)

* SOLR-8496: SolrIndexSearcher.getDocSet(List<Query>) incorrectly included deleted documents
  when all of the queries were uncached (or there was no filter cache).  This caused
  multi-select faceting (including the JSON Facet API) to include deleted doc counts
  when the remaining non-excluded filters were all uncached.  This bug was first introduced in 5.3.0
  (Andreas Müller, Vasiliy Bout, Erick Erickson, Shawn Heisey, Hossman, yonik)


==================  5.3.1 ==================

Bug Fixes
----------------------

* SOLR-7949: Resolve XSS issue in Admin UI stats page (David Chiu via janhoy)

* SOLR-8000: security.json is not loaded on server start (noble)

* SOLR-8004: RuleBasedAuthorization plugin does not work for the collection-admin-edit permission (noble)

* SOLR-7972: Fix VelocityResponseWriter template encoding issue.
  Templates must be UTF-8 encoded. (Erik Hatcher)

* SOLR-7929: SimplePostTool (also bin/post) -filetypes "*" now works properly in 'web' mode (Erik Hatcher)

* SOLR-7978: Fixed example/files update-script.js to be Java 7 and 8 compatible. (Erik Hatcher)

* SOLR-7988: SolrJ could not make requests to handlers with '/admin/' prefix (noble , ludovic Boutros)

* SOLR-7990: Use of timeAllowed can cause incomplete filters to be cached and incorrect
  results to be returned on subsequent requests. (Erick Erickson, yonik)

* SOLR-8041: Fix VelocityResponseWriter's $resource.get(key,baseName,locale) to use specified locale.
  (Erik Hatcher)

==================  5.3.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.2.11.v20150529

Upgrading from Solr 5.2
-----------------------

* SolrJ's CollectionAdminRequest class is now marked as abstract. Use one of its concrete
  sub-classes instead.

* Solr no longer supports forcefully unlocking an index.
  This is no longer supported by the underlying Lucene locking
  framework. The setting in solrconfig.xml has no effect anymore.
  Background: If you use native lock factory, unlocking should
  not be needed, because the locks are cleared after process
  shutdown automatically by the operating system. If you are
  using simple lock factory (not recommended) or hdfs lock
  factory, you may need to manually unlock by deleting the lock
  file from filesystem / HDFS.

* The zkCredientialsProvider element in solrcloud section of solr.xml is now deprecated.
  Use the correct spelling (zkCredentialsProvider) instead.

* class TransformerWithContext is deprecated . Use DocTransformer directly

* The "name" parameter in ADDREPLICA Collections API call has be deprecated. One cannot specify
  the core name for a replica. See SOLR-7499 for more info.

* The ShardHandler interface has changed. The interface used to provide a
  `checkDistributed` function which doubled up in purpose to determine if the
  request is distributed, and to prepare for distributed requests. This unfortunately
  meant that the object had to be instantiated even when the request is not
  distributed. The task of initially determining if the request is distributed
  is now done by SearchHandler using the distrib/shards parameters, and a
  ShardHandler object is created only if the request is distributed. The interface
  now has a `prepDistributed` function instead of the `checkDistributed` function,
  which can then be used to prepare for the distributed request. Users with custom
  ShardHandler implementations would need to modify their code to this effect.

* The system property "solr.solrxml.location" is not supported any more. Now, solr.xml is first
  looked up in zookeeper, and if not found, fallback to SOLR_HOME. See SOLR-7735 for more info.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-7724: SolrJ now supports parsing the output of the clustering component.
  (Alessandro Benedetti via Dawid Weiss)

* SOLR-7389: Expose znodeVersion property for each of the collections returned for the clusterstatus
  operation in the collections API (Marius Grama via shalin)

* SOLR-7622: A DocTransformer can now request fields from the SolrIndexSearcher that are not
  necessarily returned in the file SolrDocument by returning a list of fields from
  DocTransformer#getExtraRequestFields  (ryan)

* SOLR-7458: Expose HDFS Block Locality Metrics via JMX (Mike Drob via Mark Miller)

* SOLR-7676: Faceting on nested objects / Block-join faceting with the new JSON Facet API.
  Example: Assuming books with nested pages and an input domain of pages, the following
  will switch the domain to books before faceting on the author field:
    authors:{ type:terms, field:author, domain:{toParent:"type:book"} }
  (yonik)

* SOLR-7668: Add 'port' tag support in replica placement rules (Adam McElwee, Noble Paul)

* SOLR-5886: Response for an async call is now stored in zk so that it can be returned by the REQUESTSTATUS API.
  Also, the number of stored (failed and successful) responses are now restricted to 10,000 each as a safety net.
  (Anshum Gupta)

* SOLR-7639: MoreLikeThis QParser now supports all options provided by the MLT Handler i.e. mintf, mindf,
  minwl, maxwl, maxqt, and maxntp.

* SOLR-7182: Make the Schema-API a first class citizen of SolrJ. The new SchemaRequest and its inner
  classes can be used to make requests to the Schema API. (Sven Windisch, Marius Grama via shalin)

* SOLR-7651: New response format added wt=smile (noble)

* SOLR-4212: SOLR-6353: Let facet queries and facet ranges hang off of pivots. Example:
  facet.range={!tag=r1}price&facet.query={!tag=q1}somequery&facet.pivot={!range=r1 query=q1}category,manufacturer
  (Steve Molloy, hossman, shalin)

* SOLR-7742: Support for Immutable ConfigSets (Gregory Chanan)

* SOLR-2522: new two argument option for the existing field() function; picks the min/max value of a
  docValues field to use as a ValueSource: "field(field_name,min)" and "field(field_name,max)"  (hossman)

* SOLR-6234: Scoring for query time join (Mikhail Khludnev)

* SOLR-5882: score local parameter for block join query parser {!parent} (Andrey Kudryavtsev, Mikhail Khludnev)

* SOLR-7799: Added includeIndexFieldFlags (backwards compatible default is true) to /admin/luke.
  When there are many fields in the index, setting this flag to false can dramatically speed up requests. (ehatcher)

* SOLR-7769: Add bin/post -p alias for -port parameter.  (ehatcher)

* SOLR-7766: support creation of a coreless collection via createNodeSet=EMPTY (Christine Poerschke)

* SOLR-7849: Solr-managed inter-node authentication when authentication enabled (Noble Paul)

* SOLR-7220: Nested C-style comments in queries. (yonik)

* SOLR-7757: Improved security framework where security components can be edited/reloaded, Solr
  now watches /security.json. Components can choose to make their config editable
  (Noble Paul, Anshum Gupta, Ishan Chattopadhyaya)

* SOLR-7838: An authorizationPlugin interface where the access control rules are stored/managed in
  ZooKeeper (Noble Paul, Anshum Gupta, Ishan Chattopadhyaya)

* SOLR-7837: An AuthenticationPlugin which implements the HTTP BasicAuth protocol and stores credentials
  securely in ZooKeeper (Noble Paul, Anshum Gupta,Ishan Chattopadhyaya)


Bug Fixes
----------------------

* SOLR-7361: Slow loading SolrCores should not hold up all other SolrCores that have finished loading from serving
  requests. (Mark Miller, Timothy Potter, Ramkumar Aiyengar)

* SOLR-4506: Clean-up old (unused) index directories in the background after initializing a new index;
  previously, Solr would leave old index.yyyyMMddHHmmssSSS directories left behind after failed recoveries
  in the data directory, which unnecessarily consumes disk space. (Mark Miller, Timothy Potter)

* SOLR-7108: Change default query used by /admin/ping to not rely on other parameters such as query parser or
  default field. (ehatcher)

* SOLR-6835: ReRankQueryParserPlugin checks now whether the reRankQuery parameter is present and not empty.
  (帅广应, Marius Grama via shalin)

* SOLR-7566: Search requests should return the shard name that is down. (Marius Grama, shalin)

* SOLR-7675: Add missing _root_ field to managed-schema template so that the default data driven
  config set can index nested documents by default.  (yonik)

* SOLR-7635: Limit lsof port check in bin/solr to just listening ports
  (Upayavira, Ramkumar Aiyengar)

* SOLR-7091: Nested documents with unknown fields don't work in schemaless mode.
  (Steve Rowe)

* SOLR-7682: Schema API: add-copy-field should accept the maxChars parameter. (Steve Rowe)

* SOLR-7693: Fix the bin/solr -e cloud example to work if lsof is not installed
  on the local machine by waiting for 10 seconds before starting the second node.
  (hossman, Timothy Potter)

* SOLR-7689: ReRankQuery rewrite method can change the QueryResultKey causing cache misses.
  (Emad Nashed, Yonik Seeley, Joel Bernstein)

* SOLR-7697: Schema API doesn't take class or luceneMatchVersion attributes into
  account for the analyzer when adding a new field type. (Marius Grama, Steve Rowe)

* SOLR-7679: Schema API doesn't take similarity attribute into account when adding
  field types. (Marius Grama, Steve Rowe)

* SOLR-7664: Throw correct exception (RemoteSolrException) on receiving a HTTP 413.
  (Ramkumar Aiyengar, Eirik Lygre)

* SOLR-6686: facet.threads can return wrong results when using facet.prefix multiple
  times on same field. (Michael Ryan, Tim Underwood via shalin)

* SOLR-7673: Race condition in shard splitting can cause operation to hang indefinitely
  or sub-shards to never become active. (shalin)

* SOLR-7741: Add missing fields to SolrIndexerConfig.toMap
  (Mike Drob, Christine Poerschke via Ramkumar Aiyengar)

* SOLR-7748: Fix bin/solr to start on IBM J9. (Shai Erera)

* SOLR-7143: MoreLikeThis Query parser should handle multiple field names
  (Jens Wille, Anshum Gupta)

* SOLR-7132: The Collections API ADDREPLICA command property.name is not reflected
  in the clusterstate until after Solr restarts (Erick Erickson)

* SOLR-7172: addreplica API fails with incorrect error msg "cannot create collection"
  (Erick Erickson)

* SOLR-7705: CoreAdminHandler Unload no longer handles null core name and throws NPE
  instead of a bad request error. (John Call, Edward Ribeiro via shalin)

* SOLR-7529: CoreAdminHandler Reload throws NPE on null core name instead of a bad
  request error. (Jellyfrog, Edward Ribeiro via shalin)

* SOLR-7781: JSON Facet API: Terms facet on string/text fields with sub-facets caused
  a bug that resulted in filter cache lookup misses as well as the filter cache
  exceeding it's configured size. (yonik)

* SOLR-7810: map-reduce contrib script to set classpath for convenience refers to example
  rather than server. (Mark Miller)

* SOLR-7765: Hardened the behavior of TokenizerChain when null arguments are used in constructor.
  This prevents NPEs in some code paths.  (Konstantin Gribov, hossman)

* SOLR-7829: Fixed a bug in distributed pivot faceting that could result in a facet.missing=true count
  which was lower then the correct count if facet.sort=index and facet.pivot.mincount > 1 (hossman)

* SOLR-7842: ZK connection loss or session expiry events should not fire config directory listeners.
  (noble, shalin)

* SOLR-6357: Allow delete documents by doing a score join query. (Mikhail Khludnev, Timothy Potter)

* SOLR-7756: Fixed ExactStatsCache and LRUStatsCache to not throw an NPE when a term is not present on a shard.
  (Varun Thacker, Anshum Gupta)

* SOLR-7818: Fixed distributed stats to be calculated for all the query terms. Earlier the stats were calculated with
  the terms that are present in the last shard of a distributed request. (Varun Thacker, Anshum Gupta)

* SOLR-7866: VersionInfo caused an unhandled NPE when trying to determine the max value for the
  version field. (Timothy Potter)

* SOLR-7666 (and linked tickets): Many fixes to AngularJS Admin UI bringing it close to feature
  parity with existing UI. (Upayavira)

* SOLR-7908: SegmentsInfoRequestHandler gets a ref counted IndexWriter and does not properly release it.
  (Mark Miller, shalin)

* SOLR-7921: The techproducts example fails when running in a directory that contains spaces.
  (Ishan Chattopadhyaya via Timothy Potter)

* SOLR-7934: SolrCLI masks underlying cause of create collection failure. (Timothy Potter)


Optimizations
----------------------

* SOLR-7660: Avoid redundant 'exists' calls made to ZK while fetching cluster state updates. (shalin)

* SOLR-7714: Reduce SearchHandler's use of ShardHandler objects across shards in a search,
  from one for each shard and the federator, to just one for the federator.
  (Christine Poerschke via Ramkumar Aiyengar)

* SOLR-7751: Minor optimizations to QueryComponent.process (reduce eager instantiations,
  cache method calls) (Christine Poerschke via Ramkumar Aiyengar)

* SOLR-7455: Terms facets with the JSON Facet API now defer calculating non-sorting stats
  until a second phase, after the top N facets are found. This improves performance
  proportional to the number of non-sorting statistics being calculated in addition to
  the number of buckets and domain documents.
  For Example: The facet request  {type:terms, field:field1, facet:{x:"unique(field2)"}}
  saw a 7x improvement when field1 and 1M unique terms and field2 had 1000 unique terms.
  (yonik)

* SOLR-7840: ZkStateReader.updateClusterState fetches watched collections twice from ZK. (shalin)

* SOLR-7875: Speedup SolrQueryTimeoutImpl. Avoid setting a timeout time when timeAllowed
  parameter is not set. (Tomás Fernández Löbbe)

Other Changes
----------------------

* SOLR-7787: Removed fastutil and java-hll dependency, integrated HyperLogLog from java-hll
  into Solr core. (Dawid Weiss)

* SOLR-7595: Allow method chaining for all CollectionAdminRequests in Solrj. (shalin)

* SOLR-7146: MiniSolrCloudCluster based tests can fail with ZooKeeperException NoNode for /live_nodes.
  (Vamsee Yarlagadda via shalin)

* SOLR-7590: Finish and improve MDC context logging support. (Mark Miller)

* SOLR-7599: Remove cruft from SolrCloud tests. (shalin)

* SOLR-7636: CLUSTERSTATUS API is executed at CollectionsHandler (noble)

* LUCENE-6508: Remove ability to forcefully unlock an index.
  This is no longer supported by the underlying Lucene locking
  framework.  (Uwe Schindler, Mike McCandless, Robert Muir)

* SOLR-3719: Add as-you-type "instant search" to example/files /browse.
  (Esther Quansah, ehatcher)

* SOLR-7645: Remove explicitly defined request handlers from example and test solrconfig's that are
  already defined implicitly, such as /admin/ping, /admin/system, and several others.  (ehatcher)

* SOLR-7603: Fix test only bug in UpdateRequestProcessorFactoryTest (hossman)

* SOLR-7634: Upgrade Jetty to 9.2.11.v20150529 (Bill Bell, shalin)

* SOLR-7659: Rename releaseCommitPointAndExtendReserve in DirectoryFileStream
  to extendReserveAndReleaseCommitPoint, and reverse the code to match.
  (shalin, Shawn Heisey)

* SOLR-7624: Add correct spelling (zkCredentialsProvider) as an alternative to
  zkCredientialsProvider element in solrcloud section of solr.xml.
  (Xu Zhang, Per Steffensen, Ramkumar Aiyengar, Mark Miller)

* SOLR-7619: Fix SegmentsInfoRequestHandlerTest when more than one segment is created.
  (Ramkumar Aiyengar, Steve Rowe)

* SOLR-7678: Switch RTimer to use nanoTime (improves accuracy of QTime, and other times
  returned by Solr handlers) (Ramkumar Aiyengar)

* SOLR-7680: Use POST instead of GET when finding versions for mismatches with
  CloudInspectUtil for tests (Ramkumar Aiyengar)

* SOLR-7665: deprecate the class TransformerWithContext (noble)

* SOLR-7629: Have RulesTest consider disk space limitations of where the test is
  being run (Christine Poerschke via Ramkumar Aiyengar)

* SOLR-7499: The "name" parameter in ADDREPLICA Collections API call has be deprecated. One cannot specify
  the core name for a replica (Varun Thacker, noble, Erick Erickson)

* SOLR-7711: Correct initial capacity for the list that holds the default components for the SearchHandler
  (Christine Poerschke via Varun Thacker)

* SOLR-7485: Replace shards.info occurrences with ShardParams.SHARDS_INFO
  (Christine Poerschke via Ramkumar Aiyengar)

* SOLR-7710: Replace async occurrences with CommonAdminParams.ASYNC
  (Christine Poerschke, Ramkumar Aiyengar)

* SOLR-7712: fixed test to account for aggregate floating point precision loss (hossman)

* SOLR-7740: Fix typo bug with TestConfigOverlay (Christine Poerschke via Ramkumar Aiyengar)

* SOLR-7750: Change TestConfig.testDefaults to cover all SolrIndexConfig fields
  (Christine Poerschke via Ramkumar Aiyengar)

* SOLR-7703: Authentication plugin is now loaded using the ResourceLoader.
  (Avi Digmi via Anshum Gupta)

* SOLR-7800: JSON Facet API: the avg() facet function now skips missing values
  rather than treating them as a 0 value.  The def() function can be used to
  treat missing values as 0 if that is desired.
  Example:  facet:{ mean:"avg(def(myfield,0))" }

* SOLR-7805: Update Kite Morphlines to 1.1.0 (Mark Miller)

* SOLR-7803: Prevent class loading deadlock in TrieDateField; refactor date
  formatting and parsing out of TrieDateField and move to static utility class
  DateFormatUtil.  (Markus Heiden, Uwe Schindler)

* SOLR-7825: Forbid all usages of log4j and java.util.logging classes in Solr except
  classes which are specific to logging implementations. Remove accidental usage of log4j
  logger from a few places. The default log level for org.apache.zookeeper is changed from
  ERROR to WARN for zkcli.{sh,cmd} only.
  (Oliver Schrenk, Tim Potter, Uwe Schindler, shalin)

* SOLR-7735: Look for solr.xml in Zookeeper by default in SolrCloud mode. If not found, it will be loaded
  from $SOLR_HOME/solr.xml as before. Sysprop solr.solrxml.location is now gone. (janhoy)

* SOLR-7227: Ship Solr with the Web application directory exploded into
  server/solr-webapp, solr.war is no longer included in the distribution
  bundles. (Timothy Potter, Uwe Schindler)

* SOLR-6625: Enable registering interceptors for the calls made using HttpClient and make the
  request object available at the interceptor context ( Ishan Chattopadhyay, Gregory Chanan, noble, Anshum Gupta)

* SOLR-5022: On Java 7 raise permgen for running tests.  (Uwe Schindler)

* SOLR-7823: TestMiniSolrCloudCluster.testCollectionCreateSearchDelete async collection-creation (sometimes)
  (Christine Poerschke)

* SOLR-7854: Remove unused ZkStateReader.updateClusterState(false) method. (Scott Blum via shalin)

* SOLR-7863: Lowercase the CLUSTERPROP command in ZkCLI for consistency, print error for unknown cmd (janhoy)

* SOLR-7832: bin/post now allows either -url or -c, rather than requiring both. (ehatcher)

* SOLR-7847: Implement run example logic in Java instead of OS-specific scripts in
  bin/solr and bin\solr.cmd (Timothy Potter)

* SOLR-7877: TestAuthenticationFramework.testBasics to preserve/restore the original request(Username|Password)
  (Christine Poerschke)

* SOLR-7900: example/files improvements - added language detection and faceting, added title field, relocated .js files.
  (Esther Quansah and Erik Hatcher)

==================  5.2.1 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.2.10.v20150310

Detailed Change List
----------------------

Bug Fixes
----------------------

* SOLR-7588: Fix javascript bug introduced by SOLR-7409 that breaks the
  dataimport screen in the admin UI. (Bill Bell via Shawn Heisey)

* SOLR-7616: Faceting on a numeric field with a unique() subfacet function on another numeric field
  can result in incorrect results or an exception. (yonik)

* SOLR-7518: New Facet Module should respect shards.tolerant and process all non-failing shards
  instead of throwing an exception. (yonik)

* SOLR-7574: A request with a json content type but no body caused a null pointer exception (yonik)

* SOLR-7512: SolrOutputFormat creates an invalid solr.xml in the solr home zip for MapReduceIndexerTool.
  (Mark Miller, Adam McElwee)

* SOLR-7652: Fix example/files update-script.js to work with Java 7 (ehatcher)

* SOLR-7638: Fix new (Angular-based) admin UI Cloud pane (Upayavira via ehatcher)

* SOLR-7655: The DefaultSolrHighlighter since 5.0 was determining if payloads were present in a way
  that was slow, especially when lots of fields were highlighted.  It's now fast.  (David Smiley)

* SOLR-7493: Requests aren't distributed evenly if the collection isn't present locally.
  (Jeff Wartes, shalin)

Other Changes
----------------------

* SOLR-7623: Fix regression from SOLR-7484 that made it impossible to override
  SolrDispatchFilter#execute() and SolrDispatchFilter#sendError().  You can now override these
  functions in HttpSolrCall.  (ryan)

* SOLR-7648: Expose remote IP and Host via the AuthorizationContext to be used by the authorization plugin.
  (Ishan Chattopadhyaya via Anshum Gupta)

==================  5.2.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 9.2.10.v20150310

Upgrading from Solr 5.1
-----------------------

* A bug was introduced in Solr 4.10 that caused index time document boosts to trigger excessive field
  boosts in multivalued fields -- the result being that some field norms might be excessively large.
  This bug has now been fixed, but users of document boosts are strongly encouraged to re-index.
  See SOLR-7335 for more details.

* The Slice and Replica classes have been changed to use State enums instead of string constants
  to track the respective stats.  Advanced users with client code manipulating these objects will
  need to update their code accordingly.  See SOLR-7325 and SOLR-7336 for more info.

* Solr has internally been upgraded to use Jetty 9. See SOLR-4839 for full details, but there are
  a few key details all Solr users should know when upgrading:

  - It is no longer possible to run "java -jar start.jar" from inside the server directory.
    The bin/solr script is the only supported way to run Solr. This is necessary to support
    HTTP and HTTPS modules in Jetty which can be selectively enabled by the bin/solr scripts.
    In case you have a pressing need to run solr the old way, you can run
    "java -jar start.jar --module=http" to get the same behavior as before.

  - The way SSL support is configured has been changed. Before this release,
    the SOLR_SSL_OPTS property configured in solr.in.sh (linux/mac) or solr.in.cmd (windows)
    was used to enable/disable SSL but starting in 5.2.0, new properties named as
    SOLR_SSL_KEY_STORE, SOLR_SSL_KEY_STORE_PASSWORD, SOLR_SSL_TRUST_STORE,
    SOLR_SSL_TRUST_STORE_PASSWORD, SOLR_SSL_NEED_CLIENT_AUTH and SOLR_SSL_WANT_CLIENT_AUTH
    have been introduced. The bin/solr scripts configure the SOLR_SSL_OPTS property
    automatically based on the above new properties.

    You should *not* configure the SOLR_SSL_OPTS property directly inside solr.in.{sh,cmd}.

  - Support for SOLR_SSL_PORT property has been removed. Instead use the regular SOLR_PORT
    property or specify the port while invoking the bin/solr script using the "-p" switch.

  - Furthermore, it is now possible to configure the HTTP client with
    different SSL properties than the ones used for Jetty using the same files.

  - Please refer to the "Enabling SSL" section in the Solr Reference Guide for complete details.

* Support for pathPrefix has been completely removed from Solr. Since 5.0, Solr no longer officially
  supports being run as a webapp but allowed users to play around with the web.xml to have a path prefix.
  That would no longer be true. See SOLR-7500 for more info.

* The package structure under org.apache.solr.client.solrj.io has been changed to support
  the Streaming Expression Language (SOLR-7377). Any code written with the 5.1 Streaming API will have to
  be updated to reflect these changes.

* Merge Policy's "noCFSRatio" is no longer set based on <useCompoundFile> element in the indexConfig section
  of solrconfig.xml. This means that Solr will start using Lucene's default for MP "noCFSRatio", with this
  new default Solr will decide if a segment should use cfs or not based on the size of the segment in relation
  the size of the complete index. For TieredMergePolicy for example (current default), segments will use cfs
  if they are less than 10% of the index, otherwise cfs is disabled. Old values for this setting
  (1.0 for useCompoundFile=true and 0.0 for useCompoundFile=false) as well as any other value can be set
  inside the <mergePolicy> element in solrconfig.xml. <useCompoundFile> will only apply to newly created
  segments. See SOLR-7463.


Detailed Change List
----------------------

New Features
----------------------

* SOLR-6637: Restore a Solr core from a backed up index.
  Restore API Example -
    http://localhost:8983/solr/techproducts/replication?command=restore&name=backup_name
  Restore Status API Example -
    http://localhost:8983/solr/techproducts/replication?command=restorestatus
  (Varun Thacker, noble, shalin)

* SOLR-7241, SOLR-7263, SOLR-7279, SOLR-7300, SOLR-7396, SOLR-7397, SOLR-7492:
  Admin UI - Refactoring using AngularJS. More functionality moving the Admin
  UI to Angular JS (Upayavira via Erick)

* SOLR-7372: Limit memory consumed by LRUCache with a new 'maxRamMB' config parameter.
  (yonik, shalin)

* SOLR-7376: Return raw XML or JSON (in the appropriate writer) using DocumentTransformers.
    ?fl=id,name,json_s:[json],xml_s:[xml]   (ryan)

* SOLR-7422: Optional flatter form for the JSON Facet API via a "type" parameter:
    top_authors : { type:terms, field:author, limit:5 } is equivalent to
    top_authors : { terms : { field:author, limit:5  } }
  (yonik)

* SOLR-7176: zkcli script can perfrom the CLUSTERPROP command without a running Solr cluster
  (Hrishikesh Gadre, Per Steffensen, Noble Paul)

* SOLR-7417: JSON Facet API - unique() is now implemented for numeric and date fields.
  (yonik)

* SOLR-7406: Add a new "facet.range.method" parameter to let users choose how to do range
  faceting between an implementation based on filters (previous algorithm, using
  "facet.range.method=filter") or DocValues ("facet.range.method=dv").
  Input parameters and output of both methods are the same. (Tomás Fernández Löbbe)

* SOLR-7473: Facet Module (Json Facet API) range faceting now supports the "mincount"
  parameter in range facets to supress buckets less than that count.  The default
  for "mincount" remains 0 for range faceting.
  Example: prices:{ type:range, field:price, mincount:1, start:0, end:100, gap:10 }
  (yonik)

* SOLR-7437: Make HDFS transaction log replication factor configurable. (Mark Miller)

* SOLR-7477: Multi-select faceting support for the Facet Module via the "excludeTags"
  parameter which disregards any matching tagged filters for that facet.  Example:
  & q=shoes
  & fq={!tag=COLOR}color:blue
  & json.facet={ colors:{type:terms, field:color, excludeTags=COLOR} }
  (yonik)

* SOLR-7231: DIH-TikaEntityprocessor, create lat-lon field from Metadata
  (Tim Allison via Noble Paul)

* SOLR-6220: Rule Based Replica Assignment during collection, shard creation
  and replica creation (Noble Paul)

* SOLR-6968: New 'cardinality' option for stats.field, uses HyperLogLog to efficiently
  estimate the cardinality of a field w/bounded RAM. (hossman)

* SOLR-4392: Make it possible to specify AES encrypted password in dataconfig.xml (Noble Paul)

* SOLR-7461: stats.field now supports individual local params for 'countDistinct' and 'distinctValues'.
  'calcdistinct' is still supported as an alias for both options (hossman)

* SOLR-7522: Facet Module - Implement field/terms faceting over single-valued
  numeric fields. (yonik)

* SOLR-7275: Authorization framework for Solr. It defines an interface and a mechanism to create,
  load, and use an Authorization plugin. (Noble Paul, Ishan Chattopadhyaya, Anshum Gupta)

* SOLR-7377: Solr Streaming Expressions (Dennis Gove, Joel Bernstein, Steven Bower)

* SOLR-7553: Facet Analytics Module: new "hll" function that uses HyperLogLog to calculate
  distributed cardinality.  The original "unique" function is still available.
  Example:  json.facet={ numProducts : "hll(product_id)" }
  (yonik)

* SOLR-7546: bin/post (and SimplePostTool in -Dauto=yes mode) now sends rather than skips files
  without a known content type, as "application/octet-stream", provided it still is in the
  allowed filetypes setting. (ehatcher)

* SOLR-7274: Pluggable authentication module in Solr. This defines an interface and a mechanism to create,
  load, and use an Authentication plugin. (Noble Paul, Ishan Chattopadhyaya, Gregory Chanan, Anshum Gupta)

* SOLR-7379: (experimental) New spatial RptWithGeometrySpatialField, based on CompositeSpatialStrategy,
  which blends RPT indexes for speed with serialized geometry for accuracy.  Includes a Lucene segment based
  in-memory shape cache. (David Smiley)

* SOLR-7465, SOLR-7610: New file indexing example, under example/files.  (Esther Quansah, Erik Hatcher)

* SOLR-7468: Kerberos authenticaion plugin for Solr. This would allow running a Kerberized Solr.
  (Noble Paul, Ishan Chattopadhyaya, Gregory Chanan, Anshum Gupta)

Bug Fixes
----------------------

* SOLR-6709: Fix QueryResponse to deal with the "expanded" section when using the XMLResponseParser
  (Varun Thacker, Joel Bernstein)

* SOLR-7066: autoAddReplicas feature has bug when selecting replacement nodes. (Mark Miller)

* SOLR-7370: FSHDFSUtils#recoverFileLease tries to recover the lease every one second after
  the first four second wait. (Mark Miller)

* SOLR-7369: AngularJS UI insufficient URLDecoding in cloud/tree view (janhoy)

* SOLR-7380: SearchHandler should not try to load runtime components in inform() (Noble Paul)

* SOLR-7385: The clusterstatus API now returns the config set used to create a collection
  inside a 'configName' key. (Shai Erera, shalin)

* SOLR-7401: Fixed a NullPointerException when concurrently creating and deleting collections,
  while accessing other collections. (Shai Erera)

* SOLR-7412: Fixed range.facet.other parameter for distributed requests.
  (Will Miller, Tomás Fernández Löbbe)

* SOLR-6087: SolrIndexSearcher makes no DelegatingCollector.finish() call when IndexSearcher
  throws an expected exception. (Christine Poerschke via shalin)

* SOLR-7420: Overseer stats are not reset on loss of ZK connection. (Jessica Cheng, shalin)

* SOLR-7392: Fix SOLR_JAVA_MEM and SOLR_OPTS customizations in solr.in.sh being ignored
  (Ramkumar Aiyengar, Ere Maijala)

* SOLR-7426: SolrConfig#getConfigOverlay does not clean up it's resources. (Mark Miller)

* SOLR-6665: ZkController.publishAndWaitForDownStates can return before all local cores are
  marked as 'down' if multiple replicas with the same core name exist in the cluster.
  (shalin)

* SOLR-7418: Check and raise a SolrException instead of an NPE when an invalid doc id is sent
   to the MLTQParser. (Anshum Gupta)

* SOLR-7443: Implemented range faceting over date fields in the new facet module
  (JSON Facet API).  (yonik)

* SOLR-7440: DebugComponent does not return the right requestPurpose for pivot facet refinements.
  (shalin)

* SOLR-7408: Listeners set by SolrCores on config directories in ZK could be removed if collections
  are created/deleted in paralle against the same config set. (Shai Erera, Anshum Gupta)

* SOLR-7450: Fix edge case which could cause `bin/solr stop` to hang forever
  (Ramkumar Aiyengar)

* SOLR-7157: initParams must support tags other than appends, defaults and, invariants (Noble Paul)

* SOLR-7387: Facet Module - distributed search didn't work when sorting terms
  facet by min, max, avg, or unique functions.  (yonik)

* SOLR-7469: Fix check-licenses to correctly detect if start.jar.sha1 is incorrect (hossman)

* SOLR-7449: solr/server/etc/jetty-https-ssl.xml hard codes the key store file and password rather
  than pulling them from the sysprops defined in solr/bin/solr.in.{sh,cmd}

* SOLR-7470: Fix sample data to eliminate file order dependency for successful indexing, also
  fixed SolrCloudExampleTest to help catch this in the future. (hossman)

* SOLR-7478: UpdateLog#close shuts down it's executor with interrupts before running it's close logic,
  possibly preventing a clean close. (Mark Miller)

* SOLR-7494: Facet Module - unique() facet function was wildly inaccurate for high cardinality
  fields. (Andy Crossen, yonik)

* SOLR-7502: start script should not try to create configset for .system collection (Noble Paul)

* SOLR-7514: SolrClient.getByIds fails with ClassCastException (Tom Farnworth, Ramkumar Aiyengar)

* SOLR-7531: config API shows a few keys merged together (Noble Paul)

* SOLR-7542: Schema API: Can't remove single dynamic copy field directive
  (Steve Rowe)

* SOLR-7472: SortingResponseWriter does not log fl parameters that don't exist. (Joel Bernstein)

* SOLR-7545: Honour SOLR_HOST parameter with bin/solr{,.cmd}
  (Ishan Chattopadhyaya via Ramkumar Aiyengar)

* SOLR-7503: Recovery after ZK session expiration should happen in parallel for all cores
  using the thread-pool managed by ZkContainer instead of a single thread.
  (Jessica Cheng Mallet, Timothy Potter, shalin, Mark Miller)

* SOLR-7335: Fix doc boosts to no longer be multiplied in each field value in multivalued fields that
  are not used in copyFields (Shingo Sasaki via hossman)

* SOLR-7585: Fix NoSuchElementException in LFUCache resulting from heavy writes
  making concurrent put() calls. (Maciej Zasada via Shawn Heisey)

* SOLR-7587: Seeding bucket versions from index when the firstSearcher event fires has a race condition
  that leads to an infinite wait on VersionInfo's ReentrantReadWriteLock because the read-lock acquired
  during a commit cannot be upgraded to a write-lock needed to block updates; solution is to move the
  call out of the firstSearcher event path and into the SolrCore constructor. (Timothy Potter)

* SOLR-7625: Ensure that the max value for seeding version buckets is updated after recovery even if
  the UpdateLog is not replayed. (Timothy Potter)

* SOLR-7610: Fix VelocityResponseWriter's $resource.locale to accurately report locale in use.
  (ehatcher)

* SOLR-7614: Distributed pivot facet refinement was broken due to a single correlation counter
  used across multiple requests as if it was private to each request. (yonik)


Optimizations
----------------------

* SOLR-7324: IndexFetcher does not need to call isIndexStale if full copy is already needed
  (Stephan Lagraulet via Varun Thacker)

* SOLR-7547: Short circuit SolrDisptachFilter for static content request. Right now it creates
  a new HttpSolrCall object and tries to process it. (Anshum Gupta)

* SOLR-7333: Make the poll queue time a leader uses when distributing updates to replicas
  configurable and use knowledge that a batch is being processed to poll efficiently.
  (Timothy Potter)

* SOLR-7332: Initialize the highest value for all version buckets with the max value from
  the index or recent updates to avoid unnecessary lookups to the index to check for reordered
  updates when processing new documents. (Timothy Potter, yonik)

* SOLR-5855: DefaultSolrHighlighter now re-uses the document's term vectors instance when highlighting
  more than one field. Applies to the standard and FVH highlighters. (David Smiley, Daniel Debray)

Other Changes
----------------------

* SOLR-6865: Upgrade HttpClient to 4.4.1 (Shawn Heisey)

* SOLR-7358: TestRestoreCore fails in Windows (Ishan Chattopadhyaya via Varun Thacker)

* SOLR-7371: Make DocSet implement Accountable to estimate memory usage. (yonik, shalin)

* SOLR-7381: Improve logging by adding node name in MDC in SolrCloud mode and adding MDC to
  all thread pools. A new MDCAwareThreadPoolExecutor is introduced and usages of
  Executors#newFixedThreadPool, #newSingleThreadExecutor, #newCachedThreadPool as well as
  ThreadPoolExecutor directly is now forbidden in Solr. MDC keys are now exposed in thread
  names automatically so that a thread dump can give hints on what the thread was doing.
  Uncaught exceptions thrown by tasks in the pool are logged along with submitter's stack trace.
  (shalin)

* SOLR-7384: Fix spurious failures in FullSolrCloudDistribCmdsTest. (shalin)

* SOLR-6692: Default highlighter changes:
  - hl.maxAnalyzedChars now applies cumulatively on a multi-valied field.
  - fragment ranking on a multi-valued field should be more relevant.
  - hl.usePhraseHighlighter is now toggleable on a per-field basis.
  - Much more extensible (get values from another source; return snippet scores and offsets).
  - When using hl.maxMultiValuedToMatch with hl.preserveMulti, only count matched snippets.
  (David Smiley)

* SOLR-6886: Removed redundant size check and added missing calls to
  DelegatingCollection.finish inside Grouping code.  (Christine Poerschke via shalin)

* SOLR-7421: RecoveryAfterSoftCommitTest fails frequently on Jenkins due to full index
  replication taking longer than 30 seconds. (Timothy Potter, shalin)

* SOLR-7081: Add new test case to test if create/delete/re-create collections work.
  (Christine Poerschke via Ramkumar Aiyengar)

* SOLR-7467: Upgrade t-digest to 3.1 (hossman)

* SOLR-7471: Stop requiring docValues for interval faceting (Tomás Fernández Löbbe)

* SOLR-7391: Use a time based expiration cache for one off HDFS FileSystem instances.
  (Mark Miller)

* SOLR-5213: Log when shard splitting unexpectedly leads to documents going to
  no or multiple shards (Christine Poerschke, Ramkumar Aiyengar)

* SOLR-7425: Improve MDC based logging format. (Mark Miller)

* SOLR-4839: Upgrade Jetty to 9.2.10.v20150310 and restlet-jee to 2.3.0
  (Bill Bell, Timothy Potter, Uwe Schindler, Mark Miller, Steve Rowe, Steve Davids, shalin)

* SOLR-7457: Make DirectoryFactory publishing MBeanInfo extensible.
  (Mike Drob via Mark Miller)

* SOLR-7325: Slice.getState() now returns a State enum instead of a String. This helps
  clarify the states a Slice can be in, as well comparing the state of a Slice.
  (Shai Erera)

* SOLR-7336: Added Replica.getState() and removed ZkStateReader state-related constants.
  You should use Replica.State to compare a replica's state. (Shai Erera)

* SOLR-7487: Fix check-example-lucene-match-version Ant task to check luceneMatchVersion
  in solr/server/solr/configsets instead of example and harden error checking / validation
  logic. (hossman, Timothy Potter)

* SOLR-7409: When there are multiple dataimport handlers defined, the admin UI
  was listing them in a random order.  Now they are sorted in a natural order
  that handles numbers properly. (Jellyfrog via Shawn Heisey)

* SOLR-7484: Refactor SolrDispatchFilter to extract all Solr specific implementation detail
  to HttpSolrCall and also extract methods from within the current SDF.doFilter(..) logic
  making things easier to manage. HttpSolrCall converts the processing to a 3-step process
  i.e. Construct, Init, and Call so the context of the request would be available after Init
   and before the actual call operation. (Anshum Gupta, Noble Paul)

* SOLR-6878: Allow symmetric lists of synonyms to be added using the managed synonym REST
  API to support legacy expand=true type mappings; previously the API only allowed adding
  explicit mappings, with this feature you can now add a list and have the mappings
  expanded when the update is applied (Timothy Potter, Vitaliy Zhovtyuk, hossman)

* SOLR-7102: bin/solr should activate cloud mode if ZK_HOST is set (Timothy Potter)

* SOLR-7500: Remove pathPrefix from SolrDispatchFilter as Solr no longer runs as a part
  of a bigger webapp. (Anshum Gupta)

* SOLR-7243: CloudSolrClient was always returning SERVER_ERROR for exceptions,
  even when a more relevant ErrorCode was available, via SolrException.  Now
  the actual ErrorCode is used when available.
  (Hrishikesh Gadre via Shawn Heisey)

* SOLR-7544: CollectionsHandler refactored to be more modular (Noble Paul)

* SOLR-7532: Removed occurrences of the unused 'commitIntervalLowerBound' property for
  updateHandler elements from Solr configuration. (Marius Grama via shalin)

* SOLR-7541: Removed CollectionsHandler#createNodeIfNotExists. All calls made to this method now call
  ZkCmdExecutor#ensureExists as they were doing the same thing. Also ZkCmdExecutor#ensureExists now respects the
  CreateMode passed to it. (Varun Thacker)

* SOLR-6820: Make the number of version buckets used by the UpdateLog configurable as
  increasing beyond the default 256 has been shown to help with high volume indexing
  performance in SolrCloud; helps overcome a limitation where Lucene uses the request
  thread to perform expensive index housekeeping work. (Mark Miller, yonik, Timothy Potter)

* SOLR-7463: Stop forcing MergePolicy's "NoCFSRatio" based on the IWC "useCompoundFile" configuration
  (Tomás Fernández Löbbe)

* SOLR-7582: Allow auto-commit to be set with system properties in data_driven_schema_configs and
  enable auto soft-commits for the bin/solr -e cloud example using the Config API.
  (Timothy Potter)

* SOLR-7183: Fix Locale blacklisting for Minikdc based tests. (Ishan Chattopadhyaya, hossman
  via Anshum Gupta)

* SOLR-7662: Refactored response writing to consolidate the logic in  one place (Noble Paul)

* SOLR-7110: Added option to optimize JavaBinCodec to minimize string Object creation (Noble Paul)

==================  5.1.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 8.1.10.v20130312

Upgrading from Solr 5.0
-----------------------

* SolrClient query functions now declare themselves as throwing IOException in
  addition to SolrServerException, to bring them in line with the update
  functions.

* SolrRequest.process() is now final.  Subclasses should instead be parameterized
  by their corresponding SolrResponse type, and implement createResponse()

* The signature of SolrDispatchFilter.createCoreContainer() has changed to take
  (String,Properties) arguments

* Deprecated the 'lib' option added to create-requesthandler as part of SOLR-6801 in 5.0 release.
  Please use the add-runtimelib command

* Tika's runtime dependency of 'jhighlight' was removed as the latter was found to
  contain some LGPL-only code. Until that's resolved by Tika, you can download the
  .jar yourself and place it under contrib/extraction/lib.

* The _text catch-all field in data_driven_schema_configs has been renamed to _text_.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-6909: Extract atomic update handling logic into AtomicUpdateDocumentMerger class
  and enable subclassing. (Steve Davids, yonik)

* SOLR-6845: Add a “buildOnStartup” option for suggesters. (Tomás Fernández Löbbe)

* SOLR-6449: Add first class support for Real Time Get in Solrj.
  (Anurag Sharma, Steve Davids via shalin)

* SOLR-6954: SolrClient now implements Closeable, and shutdown() has been
  deprecated in favour of close(). (Mark Miller, Tomás Fernández Löbbe, Alan
  Woodward)

* SOLR-4905: Allow fromIndex parameter to JoinQParserPlugin to refer to a single-sharded
  collection that has a replica on all nodes where there is a replica in the to index
  (Jack Lo, Timothy Potter)

* SOLR-6648: Add support in AnalyzingInfixLookupFactory and BlendedInfixLookupFactory
  for setting 'highlight' and 'allTermsRequired' in the suggester configuration.
  (Boon Low, Varun Thacker via Tomás Fernández Löbbe)

* SOLR-7083: Support managing all named components in solrconfig such as
  requestHandler, queryParser, queryResponseWriter, valueSourceParser,
  transformer, queryConverter (Noble Paul)

* SOLR-7005: Spatial 2D heatmap faceting on RPT fields via new facet.heatmap with PNG and
  2D int array formats. (David Smiley)

* SOLR-7019: Support changing field key when using interval faceting.
  (Tomás Fernández Löbbe)

* SOLR-6832: Queries be served locally rather than being forwarded to another replica.
  (Sachin Goyal, Timothy Potter)

* SOLR-1945: Add support for child docs in DocumentObjectBinder (Noble Paul, Mark Miller)

* SOLR-7125, SOLR-7158: You can upload and download configurations via CloudSolrClient
  (Alan Woodward, Ishan Chattopadhyaya)

* SOLR-5507: Admin UI - Refactoring using AngularJS, first part (Upayavira via
  Erick Erickson)

* SOLR-7164: BBoxField defaults sub fields to not-stored (ryan)

* SOLR-7155,SOLR-7201: All SolrClient methods now take an optional 'collection' argument
  (Alan Woodward, Shawn Heisey)

* SOLR-6359: Allow number of logs and records kept by UpdateLog to be configured
    (Ramkumar Aiyengar)

* SOLR-7189: Allow DIH to extract content from embedded documents via Tika.
    (Tim Allison via shalin)

* SOLR-6841: Visualize lucene segment information in Admin UI.
    (Alexey Kozhemiakin, Michal Bienkowski, hossman, Shawn Heisey, Varun Thacker via shalin)

* SOLR-5846: EnumField supports DocValues functionality. (Elran Dvir, shalin)

* SOLR-4044: CloudSolrClient.connect() throws a more useful exception if the
    cluster is not ready, and can now take an optional timeout argument to wait
    for the cluster. (Alan Woodward, shalin, yonik, Mark Miller, Vitaliy Zhovtyuk)

* SOLR-7073: Support adding a jar to a collections classpath (Noble Paul)

* SOLR-7126: Secure loading of runtime external jars (Noble Paul)

* SOLR-6349: Added support for stats.field localparams to enable/disable individual stats to
  limit the amount of computation done and the amount of data returned.
  eg: stats.field={!min=true max=true}field_name
  (Tomas Fernandez-Lobbe, Xu Zhang, hossman)

* SOLR-7218: lucene/solr query syntax to give any query clause a constant score.
  General Form: <clause>^=<constant_score>
  Example: (color:blue color:green)^=2.0 text:shoes
  (yonik)

* SOLR-7214: New Facet module with a JSON API, facet functions, aggregations, and analytics.
  Any facet type can have sub facets, and facets can be sorted by arbitrary aggregation functions.
  Examples:
    json.facet={x:'avg(price)', y:'unique(color)'}
    json.facet={count1:{query:"price:[10 TO 20]"}, count2:{query:"color:blue AND popularity:[0 TO 50]"} }
    json.facet={categories:{terms:{field:cat, sort:"x desc", facet:{x:"avg(price)", y:"sum(price)"}}}}
  (yonik)

* SOLR-6141: Schema API: Remove fields, dynamic fields, field types and copy
  fields; and replace fields, dynamic fields and field types. (Steve Rowe)

* SOLR-7217: HTTP POST body is auto-detected when the client is curl and the content
  type is form data (curl's default), allowing users to use curl to send
  JSON or XML without having to specify the content type. (yonik)

* SOLR-6892: Update processors can now be top-level components and they can be
  specified in request to create a new custom update chain (Noble Paul)

* SOLR-7216: Solr JSON Request API:
  - HTTP search requests can have a JSON body.
  - JSON request can also be passed via the "json" parameter.
  - Smart merging of multiple JSON parameters: ruery parameters starting with "json."
    will be merged into the JSON request.
  - Legacy query parameters can also be passed in the "params" block of
    the JSON request.
  (yonik)

* SOLR-7245: Temporary ZK election or connection loss should not stall indexing
  due to leader initiated recovery (Ramkumar Aiyengar)

* SOLR-6350: StatsComponent now supports Percentiles (Xu Zhang, hossman)

* SOLR-7306: Percentiles support for the new facet module.  Percentiles
  can be calculated for all facet buckets and field faceting can sort
  by percentile values.
  Examples:
    json.facet={ median_age : "percentile(age,50)" }
    json.facet={ salary_percentiles : "percentile(salary,25,50,75)" }
  (yonik)

* SOLR-7307: EmbeddedSolrServer can now be started up by passing a path to a
  solr home directory, or a NodeConfig object (Alan Woodward, Mike Drob)

* SOLR-1387: Add facet.contains and facet.contains.ignoreCase options (Tom Winch
  via Alan Woodward)

* SOLR-7082: Streaming Aggregation for SolrCloud (Joel bernstein, Yonik Seeley)

* SOLR-7212: Parameter substitution / macro expansion across entire request.
  Substitution can contain further expansions and default values are supported.
  Example: q=price:[ ${low:0} TO ${high} ]&low=100&high=200
  (yonik)

* SOLR-7226: Make /query/* jmx/* , requestDispatcher/*, <listener> <initParams>
  properties in solrconfig.xml editable (Noble Paul)

* SOLR-7240: '/' redirects to '/solr/' for convenience (Martijn Koster, hossman)

* SOLR-5911: Added payload support for term vectors. New "termPayloads" option for fields
  / types in the schema, and "tv.payloads" param for the term vector component.
  (Mike McCandless, David Smiley)

* SOLR-5132: Added a new collection action MODIFYCOLLECTION (Noble Paul)

Bug Fixes
----------------------

* SOLR-7046: NullPointerException when group.function uses query() function.
  (Jim Musil via Erick Erickson)

* SOLR-7072: Multiple mlt.fl does not work. (Constantin Mitocaru, shalin)

* SOLR-6775: Creating backup snapshot results in null pointer exception.
  (Ryan Hesson, Varun Thacker via shalin)

* SOLR-5890: Delete silently fails if not sent to shard where document was
  added (Ishan Chattopadhyaya, Noble Paul)

* SOLR-7101: JmxMonitoredMap can throw an exception in clear when queryNames fails.
  (Mark Miller, Wolfgang Hoschek)

* SOLR-6214: Snapshots numberToKeep param only keeps n-1 backups.
  (Mathias H., Ramana, Varun Thacker via shalin)

* SOLR-7084: FreeTextSuggester: Better error message when doing a lookup
  during dictionary build. Used to be nullpointer (janhoy)

* SOLR-6956: OverseerCollectionProcessor and replicas on the overseer node can sometimes
  operate on stale cluster state due to overseer holding the state update lock for a
  long time. (Mark Miller, shalin)

* SOLR-7104: Propagate property prefix parameters for ADDREPLICA Collections API call.
  (Varun Thacker via Anshum Gupta)

* SOLR-7113: Multiple calls to UpdateLog#init is not thread safe with respect to the
  HDFS FileSystem client object usage. (Mark Miller, Vamsee Yarlagadda)

* SOLR-7128: Two phase distributed search is fetching extra fields in GET_TOP_IDS phase.
  (Pablo Queixalos, shalin)

* SOLR-7139: Fix SolrContentHandler for TIKA to ignore multiple startDocument events.
  (Chris A. Mattmann, Uwe Schindler)

* SOLR-7178: OverseerAutoReplicaFailoverThread compares Integer objects using ==
  (shalin)

* SOLR-7171: BaseDistributedSearchTestCase now clones getSolrHome() for each subclass,
  and consistently uses getSolrXml().  (hossman)

* SOLR-6657:  DocumentDictionaryFactory requires weightField to be mandatory, but it shouldn't
  (Erick Erickson)

* SOLR-7206: MiniSolrCloudCluster wasn't dealing with SSL mode correctly (Alan
  Woodward)

* SOLR-4464: DIH Processed documents counter resets to zero after first entity is processed.
  (Dave Cook, Shawn Heisey, Aaron Greenspan, Thomas Champagne via shalin)

* SOLR-7209: /update/json/docs carry forward fields from previous records (Noble Paul)

* SOLR-7195: Fixed a bug where the bin/solr shell script would incorrectly
  detect another Solr process listening on the same port number.  If the
  requested listen port was 8983, it would match on another Solr using port
  18983 for any purpose.  Also escapes the dot character in all grep commands
  looking for start.jar.
  (Xu Zhang via Shawn Heisey)

* SOLR-6682: Fix response when using EnumField with StatsComponent
  (Xu Zhang via hossman)

* SOLR-7109: Indexing threads stuck during network partition can put leader into down state.
  (Mark Miller, Anshum Gupta, Ramkumar Aiyengar, yonik, shalin)

* SOLR-7092: Stop the HDFS lease recovery retries in HdfsTransactionLog on close and try
  to avoid lease recovery on closed files. (Mark Miller)

* SOLR-7285: ActionThrottle will not pause if getNanoTime first returns 0.
  (Mark Miller, Gregory Chanan)

* SOLR-7141: RecoveryStrategy: Raise time that we wait for any updates from the leader before
  they saw the recovery state to have finished. (Mark Miller)

* SOLR-7248: In legacyCloud=false mode we should check if the core was hosted on the same node before registering it
  (Varun Thacker, Noble Paul, Mark Miller)

* SOLR-7294: Migrate API fails with 'Invalid status request: notfoundretried 6times' message.
  (Jessica Cheng Mallet, shalin)

* SOLR-7254: Make an invalid negative start/rows throw a HTTP 400 error (Bad Request) instead
  of causing a 500 error.  (Ramkumar Aiyengar, Hrishikesh Gadre, yonik)

* SOLR-7305: BlendedInfixLookupFactory swallows root IOException when it occurs.
  (Stephan Lagraulet via shalin)

* SOLR-7293: Fix bug that Solr server does not listen on IPv6 interfaces by default.
  (Uwe Schindler, Sebastian Pesman)

* SOLR-7298: Fix Collections API calls (SolrJ) to not add name parameter when not needed.
  (Shai Erera, Anshum Gupta)

* SOLR-7134: Replication can still cause index corruption. (Mark Miller, shalin, Mike Drob)

* SOLR-7309: Make bin/solr, bin/post work when Solr installation directory contains spaces
  (Ramkumar Aiyengar, Martijn Koster)

* SOLR-6924: The config API forcefully refreshes all replicas in the collection to ensure all are
  updated (Noble Paul)

* SOLR-7266: The IgnoreCommitOptimizeUpdateProcessor blocks commit requests from
  replicas needing to recover. (Jessica Cheng Mallet, Timothy Potter)

* SOLR-7299: bin\solr.cmd doesn't use jetty SSL configuration. (Steve Rowe)

* SOLR-7334: Admin UI does not show "Num Docs" and "Deleted Docs". (Erick Erickson, Timothy Potter)

* SOLR-7338, SOLR-6583: A reloaded core will never register itself as active after a ZK session expiration
  (Mark Miller, Timothy Potter)

* SOLR-7366: Can't index example XML docs into the cloud example using bin/post due to regression in
  ManagedIndexSchema's handling of ResourceLoaderAware objects used by field types (Steve Rowe, Timothy Potter)

* SOLR-7284: HdfsUpdateLog is using hdfs FileSystem.get without turning off the cache.
  (Mark Miller)

* SOLR-7286: Using HDFS's FileSystem.newInstance does not guarantee a new instance.
  (Mark Miller)

* SOLR-7508: SolrParams.toMultiMap() does not handle arrays (Thomas Scheffler , Noble Paul)

Optimizations
----------------------

 * SOLR-7049: Move work done by the LIST Collections API call to the Collections
   Handler (Varun Thacker via Anshum Gupta).

 * SOLR-7116: Distributed facet refinement requests would needlessly compute other types
   of faceting that have already been computed. (David Smiley, Hossman)

 * SOLR-7239: improved performance of min & max in StatsComponent, as well as situations
   where local params disable all stats (hossman)

 * SOLR-7050: realtime get should internally load only fields specified in fl.
   (yonik, Noble Paul)

Other Changes
----------------------

* SOLR-7014: Collapse identical catch branches in try-catch statements. (shalin)

* SOLR-6500: Refactor FileFetcher in SnapPuller, add debug logging.
  (Ramkumar Aiyengar via Mark Miller)

* SOLR-7076: In DIH, TikaEntityProcessor should have support for onError=skip
  (Noble Paul)

* SOLR-7094: Better error reporting of JSON parse issues when indexing docs
  (Ishan Chattopadhyaya via Timothy Potter)

* SOLR-7103: Remove unused method params in faceting code. (shalin)

* SOLR-6311: When performing distributed queries, SearchHandler should use path
  when no qt or shard.qt parameter is specified; fix also resolves SOLR-4479.
  (Steve Molloy, Timothy Potter)

* SOLR-7112: Fix DeleteInactiveReplicaTest.deleteLiveReplicaTest test failures.
  (shalin)

* SOLR-6902: Use JUnit rules instead of inheritance with distributed Solr
  tests to allow for multiple tests without the same class.
  (Ramkumar Aiyengar, Erick Erickson, Mike McCandless)

* SOLR-7032: Clean up test remnants of old-style solr.xml (Erick Erickson)

* SOLR-7145: SolrRequest is now parametrized by its response type (Alan
  Woodward)

* SOLR-7142: Fix TestFaceting.testFacets. (Michal Kroliczek via shalin)

* SOLR-7156: Fix test failures due to resource leaks on windows.
  (Ishan Chattopadhyaya via shalin)

* SOLR-7147: Introduce new TrackingShardHandlerFactory for monitoring what requests
  are sent to shards during tests. (hossman, shalin)

* SOLR-7160: Rename ConfigSolr to NodeConfig, and decouple it from xml
  representation (Alan Woodward)

* SOLR-7166: Encapsulate JettySolrRunner configuration (Alan Woodward)

* SOLR-7130: Make stale state notification work without failing the requests
  (Noble Paul, shalin)

* SOLR-7151: SolrClient query methods throw IOException (Alan Woodward)

* SOLR-7179: JettySolrRunner no longer passes configuration to
  SolrDispatchFilter via system properties, but instead uses a Properties
  object in the servlet context (Alan Woodward)

* SOLR-6275: Improve accuracy of QTime reporting (Ramkumar Aiyengar)

* SOLR-7174: DIH should reset TikaEntityProcessor so that it is capable
  of re-use (Alexandre Rafalovitch , Gary Taylor via Noble Paul)

* SOLR-6804: Untangle SnapPuller and ReplicationHandler (Ramkumar Aiyengar)

* SOLR-7180: MiniSolrCloudCluster will startup and shutdown its jetties in
  parallel (Alan Woodward, Tomás Fernández Löbbe, Vamsee Yarlagadda)

* SOLR-7173: Fix ReplicationFactorTest on Windows by adding better retry
  support after seeing no response exceptions. (Ishan Chattopadhyaya via Timothy Potter)

* SOLR-7246: Speed up BasicZkTest, TestManagedResourceStorage (Ramkumar Aiyengar)

* SOLR-7258: Forbid MessageFormat.format and MessageFormat single-arg constructor.
  (shalin)

* SOLR-7162: Remove unused SolrSortField interface. (yonik, Connor Warrington via shalin)

* SOLR-6414: Update to Hadoop 2.6.0. (Mark Miller)

* SOLR-6673: MDC based logging of collection, shard, replica, core
  (Ishan Chattopadhyaya , Noble Paul)

* SOLR-7291: Test indexing on ZK disconnect with ChaosMonkey tests (Ramkumar Aiyengar)

* SOLR-7203: Remove buggy no-op retry code in HttpSolrClient (Alan Woodward,
  Mark Miller, Greg Solovyev)

* SOLR-7202: Remove deprecated string action types in Overseer and OverseerCollectionProcessor -
  "deletecollection", "createcollection", "reloadcollection", "removecollection", "removeshard".
  (Varun Thacker, shalin)

* SOLR-7290: Rename catchall _text field in data_driven_schema_configs
  to _text_ (Steve Rowe)

* SOLR-7346: Stored XSS in Admin UI Schema-Browser page and Analysis page (Mei Wang via Timothy Potter)

==================  5.0.0 ==================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

NOTE: Solr 5.0 only supports creating and removing SolrCloud collections through
      the collections API, unlike previous versions. While not using the
      collections API may still work in 5.0, it is unsupported, not recommended,
      and the behavior will change in a 5.x release.

Versions of Major Components
---------------------
Apache Tika 1.7
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Jetty 8.1.10.v20130312

Upgrading from Solr 4.x
----------------------

* Apache Solr has no support for Lucene/Solr 3.x and earlier indexes anymore.
  Be sure to run Lucene's IndexUpgrader on the previous 4.10 version if you might
  still have old segments in your index. Alternatively fully optimize your index
  with Solr 4.10 to make sure it consists only of one up-to-date index segment.

* The "file" attribute of infoStream in solrconfig.xml is removed. Control this
  via your logging configuration (org.apache.solr.update.LoggingInfoStream) instead.

* UniqFieldsUpdateProcessorFactory no longer supports the <lst named="fields"> init
  param style that was deprecated in Solr 4.5.  If you are still using this syntax,
  update your configs to use <arr name="fieldName"> instead. See SOLR-4249 for more
  details.

* The following legacy numeric and date field types, deprecated in Solr 4.8, are no
  longer supported: BCDIntField, BCDLongField, BCDStrField, IntField, LongField,
  FloatField, DoubleField, SortableIntField, SortableLongField, SortableFloatField,
  SortableDoubleField, and DateField.  Convert these types in your schema to the
  corresponding Trie-based field type and then re-index.  See SOLR-5936 for more
  information.

* getAnalyzer() in IndexSchema and FieldType that was deprecated in Solr 4.9 has
  been removed.  Use getIndexAnalyzer() instead. See SOLR-6022 for more information.

* The spellcheck response format has changed, affecting xml and json clients.  In
  particular, the "correctlySpelled" and "collations" subsections have been moved outside
  the "suggestions" subsection, and now are directly under "spellcheck".
  See SOLR-3029 for more information.

* The CollectionsAPI SolrJ calls createCollection(), reloadCollection(),
  deleteCollection(), requestStatus(), createShard(), splitShard(), deleteShard(),
  createAlias() and deleteAlias() which were deprecated in 4.11 have been removed.
  The new usage involves a builder style construction of the call.

* The OVERSEERSTATUS API returns new key names for operations such as "create"
  for "createcollection", "delete" for "removecollection" and "deleteshard" for
  "removeshard".

* If you have been using the /update/json/docs to index documents, SOLR-6617 introduces
  backward incompatible change. the key names created are fully qualified paths of keys .
  If you need the old functionality back , please add an extra parameter f=/**
  example: /update/json/docs?f=/**

* Bugs fixed in several ValueSource functions may result in different behavior in
  situations where some documents do not have values for fields wrapped in other value
  sources.  Users who want to preserve the previous behavior may need to wrap fields
  in the "def()" function. Example: changing "fl=sum(fieldA,fieldB)" to
  "fl=sum(def(fieldA,0.0),def(fieldB,0.0))".  See LUCENE-5961 for more details.

* AdminHandlers is deprecated, /admin/* are implicitly defined, /get, /replication and
  handlers are also implicitly registered (refer to SOLR-6792)

* SolrCore.reload(ConfigSet coreConfig, SolrCore prev) was deprecated in 4.10.3 and
  removed in 5.0. use SolrCore.reload(ConfigSet coreConfig). See SOLR-5864.

* The "termIndexInterval" option in solrconfig.xml has been a No-Op in the default codec
  since Solr 4.0, and has been removed completely in 5.0.  If you get an "Illegal parameter
  'termIndexInterval'" error when upgrading, you can safely remove this option from your
  configs.  If you have a strong need to configure this, you must explicitly configure your
  schema with a custom codec.  See SOLR-6560 and for more details.

* The "checkIntegrityAtMerge" option in solrconfig.xml is now a No-Op and should be removed
  from any solrconfig.xml files -- these integrity checks are now done automatically at a very
  low level during the segment merging process.  See SOLR-6834 for more details.

* SimplePostTool (post.jar) no longer defaults to collection1, making either of core/collection
  name or update URL mandatory. An existing call without an explicit update URL needs to now
  have the core/collection name passed as "-Dc=<collection/core name>" e.g.:
    java -jar -Dc=<collection_name> post.jar *.xml (new call with collection name)
  See SOLR-6852 for more details.

* Relative paths specified in the solr.xml coreRootDirectory parameter for core
  discovery are now resolved relative to SOLR_HOME, rather than cwd.  See
  SOLR-6718.

* SolrServer and associated classes have been deprecated.  Applications using
  SolrJ should use the equivalent SolrClient classes instead.

* Spatial fields originating from Solr 4 (e.g. SpatialRecursivePrefixTreeFieldType, BBoxField)
  have the 'units' attribute deprecated, now replaced with 'distanceUnits'.  If you change it to
  a unit other than 'degrees' (or if you don't specify it, which will default to kilometers if
  geo=true), then be sure to update maxDistErr as it's in those units.  If you keep units=degrees
  then it should be backwards compatible but you'll get a deprecation warning on startup.  See
  SOLR-6797.

* The <nrtMode> configuration in solrconfig.xml has been discontinued and should be removed from
  solrconfig.xml. Solr defaults to using NRT searchers regardless of the value in configuration
  and a warning is logged on startup if the solrconfig.xml has <nrtMode> specified.

* There was an old spatial syntax to specify a circle using Circle(x,y d=...) which should be
  replaced with simply using {!geofilt} (if you can) or BUFFER(POINT(x y),d). Likewise a rect syntax
  comprised of minX minY maxX maxY that should now be replaced with
  ENVELOPE(minX, maxX, maxY, minY).

* Due to changes in the underlying commons-codec package, users of the BeiderMorseFilterFactory
  will need to rebuild their indexes after upgrading.  See LUCENE-6058 for more details.

* CachedSqlEntityProcessor has been removed, use SqlEntityProcessor with the
  cacheImpl parameter.

* HttpDataSource has been removed, use URLDataSource instead.

* LegacyHTMLStripCharFilter has been removed

* CoreAdminRequest.persist() call has been removed.  All changes made via
  CoreAdmin are persistent.

* SpellCheckResponse.getSuggestions() and getSuggestionFrequencies() have been
  removed, use getAlternatives() and getAlternativeFrequencies() instead.

* SolrQuery deprecated methods have been removed:
    - setMissing() is now setFacetMissing()
    - getFacetSort() is now getFacetSortString()
    - setFacetSort(boolean) should instead use setFacetSort(String) with
      FacetParams.FACET_SORT_COUNT or FacetParams.FACET_SORT_INDEX
    - setSortField(String, ORDER) should use setSort(SortClause)
    - addSortField(String, ORDER) should use addSort(SortClause)
    - removeSortField(String, ORDER) should use removeSort(SortClause)
    - getSortFields() should use getSorts()
    - set/getQueryType() should use set/getRequestHandler()

* ClientUtil deprecated date methods have been removed, use DateUtil instead

* FacetParams.FacetDateOther has been removed, use FacetRangeOther

* ShardParams.SHARD_KEYS has been removed, use ShardParams._ROUTE_

* The 'old-style' solr.xml format is no longer supported, and cores must be
  defined using core.properties files.  See
  https://cwiki.apache.org/confluence/display/solr/Format+of+solr.xml

Detailed Change List
----------------------

New Features
----------------------

* SOLR-6103: Added DateRangeField for indexing date ranges, especially multi-valued ones.
  Supports facet.range, DateMath, and is mostly interoperable with TrieDateField.
  Based on LUCENE-5648. (David Smiley)

* SOLR-6403: TransactionLog replay status logging. (Mark Miller)

* SOLR-4580: Support for protecting content in ZooKeeper. (Per Steffensen, Mark Miller)

* SOLR-6365: specify appends, defaults, invariants outside of the request handler.
  (Noble Paul, Erik Hatcher, shalin)

* SOLR-5097: Schema API: Add REST support for adding dynamic fields to the schema.
  (Steve Rowe)

* SOLR-5098: Schema API: Add REST support for adding field types to the schema.
  (Timothy Potter)

* SOLR-5473 : Split clusterstate.json per collection and watch states selectively
  (Noble Paul, Mark Miller, shalin, Jessica Cheng Mallet, Timothy Potter, Anshum Gupta)

* SOLR-5474 : Support for SOLR-5473 in SolrJ (Timothy Potter, Noble Paul, Mark Miller)

* SOLR-5810 : Support for SOLR-5473 in solr admin UI (Timothy Potter, Noble Paul)

* SOLR-6482:  Add an onlyIfDown flag for DELETEREPLICA collections API command
  (Erick Erickson)

* SOLR-6354: stats.field can now be used to generate stats over the numeric results
  of arbitrary functions, ie: stats.field={!func}product(price,popularity)
  (hossman)

* SOLR-6485: ReplicationHandler should have an option to throttle the speed of
  replication (Varun Thacker, Noble Paul)

* SOLR-6543: Give HttpSolrClient the ability to send PUT requests (Gregory Chanan)

* SOLR-5986: Don't allow runaway queries from harming Solr cluster health or search
  performance (Anshum Gupta, Steve Rowe, Robert Muir)

* SOLR-6565: SolrRequest support for query params (Gregory Chanan)

* SOLR-6476: Create a bulk mode for schema API (Noble Paul, Steve Rowe)

* SOLR-6512: Add a collections API call to add/delete arbitrary properties
  to a specific replica. Optionally adding sliceUnique=true will remove
  this property from all other replicas within a particular slice.
  (Erick Erickson)

* SOLR-6513: Add a collectionsAPI call BALANCESLICEUNIQUE. Allows the even
  distribution of custom replica properties across nodes making up a
  collection, at most one node per slice will have the property.

* SOLR-6605: Make ShardHandlerFactory maxConnections configurable.
  (Christine Poerschke via shalin)

* SOLR-6585: RequestHandlers can optionally handle sub paths as well (Noble Paul)

* SOLR-6617: /update/json/docs path will use fully qualified node names by default
             (Noble Paul)

* SOLR-4715: Add CloudSolrClient constructors which accept a HttpClient instance.
  (Hardik Upadhyay, Shawn Heisey, shalin)

* SOLR-5992: add "removeregex" as an atomic update operation
  (Vitaliy Zhovtyuk via Erick Erickson)

* SOLR-6633: /update/json/docs path can now save the underlying json doc asa string field
  and better support added to the default example (Noble Paul)

* SOLR-6650: Add optional slow request logging at WARN level
  (Jessica Cheng Mallet via Timothy Potter)

* SOLR-6655: SimplePostTool now features -Dhost, -Dport, and -Dc (for core/collection)
  properties to allow easier overriding of just the right piece of the Solr URL.
  (ehatcher)

* SOLR-6248: MoreLikeThis QParser that accepts a document id and returns documents that
  have similar content. It works in standalone/cloud mode and shares logic with the
  Lucene MoreLikeThis class (Anshum Gupta).

* SOLR-6670: change BALANCESLICEUNIQUE to BALANCESHARDUNIQUE. Also, the parameter
  for ADDREPLICAPROP that used to be sliceUnique is now shardUnique. (Erick Erickson)

* SOLR-6351: Stats can now be nested under pivot values by adding a 'stats' local param to
  facet.pivot which refers to a 'tag' local param in one or more stats.field params.
  (hossman, Vitaliy Zhovtyuk, Steve Molloy)

* SOLR-6533: Support editing common solrconfig.xml values (Noble Paul)

* SOLR-6607: Managing requesthandlers through API (Noble Paul)

* SOLR-4799: faster join using join="zipper" aka merge join for nested DIH EntityProcessors
  (Mikhail Khludnev via Noble Paul)

* SOLR-6787: API to manage blobs in Solr (Noble Paul)

* SOLR-6801: Load RequestHandler from blob store (Noble Paul)

* SOLR-1632: Support Distributed IDF (Andrzej Bialecki, Mark Miller, Yonik Seeley,
  Robert Muir, Markus Jelsma, Vitaliy Zhovtyuk, Anshum Gupta)

* SOLR-6729: createNodeSet.shuffle=(true|false) support for /admin/collections?action=CREATE.
  (Christine Poerschke, Ramkumar Aiyengar via Mark Miller)

* SOLR-6851: Scripts to support installing and running Solr as a service on Linux
  (Timothy Potter, Hossman, Steve Rowe)

* SOLR-6770: Add/edit param sets and use them in Requests (Noble Paul)

* SOLR-6879: Have an option to disable autoAddReplicas temporarily for all collections.
  (Varun Thacker via Steve Rowe)

* SOLR-6435: Add bin/post script to simplify posting content to Solr (Erik Hatcher)

* SOLR-6761: Ability to ignore commit and/or optimize requests from clients when running in
  SolrCloud mode using the IgnoreCommitOptimizeUpdateProcessorFactory. (Timothy Potter)

* SOLR-6797: Spatial fields that used to require units=degrees like
  SpatialRecursivePrefixTreeFieldType (RPT) now take distanceUnits=degrees|kilometers|miles
  instead.  It is applied to nearly all distance measurements involving the field: maxDistErr,
  distErr, d, geodist, score=distance|area|area2d. score now accepts these units as well. It does
  NOT affect distances embedded in WKT strings like BUFFER(POINT(200 10),0.2)).
  (Ishan Chattopadhyaya, David Smiley)

* SOLR-6766: Expose HdfsDirectoryFactory Block Cache statistics via JMX.
  (Mike Drob, Mark Miller)

* SOLR-2035: Add a VelocityResponseWriter $resource tool for locale-specific string lookups.
  (Erik Hatcher)

* SOLR-6916: Toggle payload support for the default highlighter via hl.payloads.  It's auto
  enabled when the index has payloads. (David Smiley)

* SOLR-6581: Efficient DocValues support and numeric collapse field implementations
  for Collapse and Expand (Joel Bernstein)

* SOLR-6937: In schemaless mode ,replace spaces and special characters with underscore (Noble Paul)

* SOLR-5147: Support child documents in DIH
  (Vadim Kirilchuk, Shawn Heisey, Thomas Champagne, Mikhail Khludnev via Noble Paul)

Bug Fixes
----------------------

* SOLR-4895: An error should be returned when a rollback is attempted in SolrCloud mode.
  (Vamsee Yarlagadda via Mark Miller)

* SOLR-6424: The hdfs block cache BLOCKCACHE_WRITE_ENABLED is not defaulting to false like it
  should. (Mark Miller)

* SOLR-6426: SolrZkClient clean can fail due to a race with children nodes. (Mark Miller)

* SOLR-5966: Admin UI Menu is fixed and doesn't respect smaller viewports.
  (Aman Tandon, steffkes via shalin)

* SOLR-4406: Fix RawResponseWriter to respect 'base' writer
  (Steve Davids, hossman)

* SOLR-6297: Fix WordBreakSolrSpellChecker to not lose suggestions in shard/cloud
  environments (James Dyer)

* SOLR-6467: bin/solr script should direct stdout/stderr when starting in the background
  to the solr-PORT-console.log in the logs directory instead of bin. (Timothy Potter)

* SOLR-6187: SOLR-6154: facet.mincount ignored in range faceting using distributed search
  NOTE: This does NOT fixed for the (deprecated) facet.date idiom, use facet.range
  instead. (Erick Erickson, Zaccheo Bagnati, Ronald Matamoros, Vamsee Yalargadda)

* SOLR-6457: LBHttpSolrClient: ArrayIndexOutOfBoundsException risk if counter overflows
  (longkey via Noble Paul)

* SOLR-6499: Log warning about multiple update request handlers
  (Noble Paul, Andreas Hubold, hossman)

* SOLR-6507: Fixed several bugs involving stats.field used with local params (hossman)

* SOLR-6481: CLUSTERSTATUS should check if the node hosting a replica is live when
  reporting replica status (Timothy Potter)

* SOLR-6484: SolrCLI's healthcheck action needs to check live nodes as part of reporting
  the status of a replica (Timothy Potter)

* SOLR-6540 Fix NPE from strdist() func when doc value source does not exist in a doc (hossman)

* SOLR-6624 Spelling mistakes in the Java source (Hrishikesh Gadre)

* SOLR-6307: Atomic update remove does not work for int array or date array
  (Anurag Sharma , noble)

* SOLR-6224: Post soft-commit callbacks are called before soft commit actually happens.
  (shalin)

* SOLR-6591: Overseer can use stale cluster state and lose updates for collections
  with stateFormat > 1. (shalin)

* SOLR-6631: DistributedQueue spinning on calling zookeeper getChildren()
  (Jessica Cheng Mallet, Mark Miller, Timothy Potter)

* SOLR-6579: SnapPuller Replication blocks clean shutdown of tomcat
  (Philip Black-Knight via Noble Paul)

* SOLR-6721: ZkController.ensureReplicaInLeaderInitiatedRecovery puts replica
  in local map before writing to ZK. (shalin)

* SOLR-6679: Disabled suggester component from techproduct solrconfig.xml since
  it caused long startup times on large indexes even when it wasn't used.
  (yonik, hossman)

* SOLR-6738: Admin UI - Escape Data on Plugins-View (steffkes)

* SOLR-3774: Solr adds RequestHandler SolrInfoMBeans twice to the JMX server.
  (Tomás Fernández Löbbe, hossman, Mark Miller)

* SOLR-6763: Shard leader elections should not persist across session expiry
  (Alan Woodward, Mark Miller)

* SOLR-3881: Avoid OOMs in LanguageIdentifierUpdateProcessor:
  - Added langid.maxFieldValueChars and langid.maxTotalChars params to limit
    input, by default 10k and 20k chars, respectively.
  - Moved input concatenation to Tika implementation; the langdetect
    implementation instead appends each input piece via the langdetect API.
  (Vitaliy Zhovtyuk, Tomás Fernández Löbbe, Rob Tulloh, Steve Rowe)

* SOLR-6626: NPE in FieldMutatingUpdateProcessor when indexing a doc with
  null field value (Noble Paul)

* SOLR-6604: SOLR-6812: Fix NPE with distrib.singlePass=true and expand
  component. Increased test coverage of expand component with docValues.
  (Christine Poerschke, Per Steffensen, shalin)

* SOLR-6718: Core discovery was walking paths relative to the Jetty working
  directory, rather than SOLR_HOME. (Andreas Hubold, Alan Woodward)

* SOLR-6864: Support registering searcher listeners in SolrCoreAware.inform(SolrCore)
  method. Existing components rely on this. (Tomás Fernández Löbbe)

* SOLR-6850: AutoAddReplicas makes a call to wait to see live replicas that times
  out after 30 milliseconds instead of 30 seconds. (Varun Thacker via Mark Miller)

* SOLR-6397: zkcli script put/putfile should allow overwriting an existing znode's data
  (Timothy Potter)

* SOLR-6873: Lib relative path is incorrect for techproduct configset
  (Alexandre Rafalovitch via Erick Erickson)

* SOLR-6899: Change public setter for CollectionAdminRequest.action to protected.
  (Anshum Gupta)

* SOLR-6779: fix /browse for schemaless example (ehatcher)

* SOLR-6874: There is a race around SocketProxy binding to it's port the way we setup
  JettySolrRunner and SocketProxy. (Mark Miller, Timothy Potter)

* SOLR-6735: Make CloneFieldUpdateProcessorFactory null safe (Steve Davids via ehatcher)

* SOLR-6907: URLEncode documents directory in MorphlineMapperTest to handle spaces etc.
  in file name. (Ramkumar Aiyengar via Erick Erickson)

* SOLR-6880: Harden ZkStateReader to expect that getCollectionLive may return null
  as it's contract states. (Mark Miller, shalin)

* SOLR-6643: Fix error reporting & logging of low level JVM Errors that occur when
  loading/reloading a SolrCore (hossman)

* SOLR-6839: Direct routing with CloudSolrServer will ignore the Overwrite document option.
  (Mark Miller)

* SOLR-6793: ReplicationHandler does not destroy all of it's created SnapPullers.
  (Mark Miller)

* SOLR-6946: Document -p port option for the create_core and create_collection actions in
  bin/solr (Timothy Potter)

* SOLR-6923: AutoAddReplicas also consults live_nodes to see if a state change has happened.
  (Varun Thacker via Anshum Gupta)

* SOLR-6941: DistributedQueue#containsTaskWithRequestId can fail with NPE. (Mark Miller)

* SOLR-6764: Field types need to be re-informed after reloading a managed schema from ZK
  (Timothy Potter)

* SOLR-6931: We should do a limited retry when using HttpClient.
 (Mark Miller, Hrishikesh Gadre, Gregory Chanan)

* SOLR-7004: Add a missing constructor for CollectionAdminRequest.BalanceShardUnique that
  sets the collection action. (Anshum Gupta)

* SOLR-6993: install_solr_service.sh won't install on RHEL / CentOS
  (David Anderson via Timothy Potter)

* SOLR-6928: solr.cmd stop works only in english (john.work, Jan Høydahl, Timothy Potter)

* SOLR-7011: Delete collection returns before collection is actually removed.
  (Christine Poerschke via shalin)

* SOLR-6640: Close searchers before rollback and recovery to avoid index corruption.
  (Robert Muir, Varun Thacker, shalin)

* SOLR-6847: LeaderInitiatedRecoveryThread compares wrong replica's state with lirState.
  (shalin)

* SOLR-6856: Restore ExtractingRequestHandler's ability to capture all HTML tags when
  parsing (X)HTML. (hossman, Uwe Schindler, ehatcher, Steve Rowe)

* SOLR-7024: Improved error messages when java is not found by the bin/solr
  shell script, particularly when JAVA_HOME has an invalid location.
  (Shawn Heisey)

* SOLR-7038: Validate the presence of configset before trying to create a collection.
  (Anshum Gupta, Mark Miller)

* SOLR-7037: bin/solr start -e techproducts -c fails to start Solr in cloud mode
  (Timothy Potter)

* SOLR-7016: Fix bin\solr.cmd to work in a directory with spaces in the name.
  (Timothy Potter, Uwe Schindler)

* SOLR-6969: When opening an HDFSTransactionLog for append we must first attempt to recover
  it's lease to prevent data loss. (Mark Miller, Praneeth Varma, Colin McCabe)

* SOLR-7067: bin/solr won't run under bash 4.2+. (Steve Rowe)

* SOLR-7068: Collapse on numeric field breaks when min/max values are negative.
  (Joel Bernstein)

* SOLR-6780: Fixed a bug in how default/appends/invariants params were affecting the set
  of all "keys" found in the request parameters, resulting in some key=value param pairs
  being duplicated.  This was noticeably affecting some areas of the code where iteration
  was done over the set of all params:
    - literal.* in ExtractingRequestHandler
    - facet.* in FacetComponent
    - spellcheck.[dictionary name].* and spellcheck.collateParam.* in SpellCheckComponent
    - olap.* in AnalyticsComponent
  (Alexandre Rafalovitch & hossman)

* SOLR-6920: A replicated index can end up corrupted when small files end up with the same
  file name and size. (Varun Thacker, Mark Miller)

* SOLR-7033, SOLR-5961: RecoveryStrategy should not publish any state when
  closed / cancelled and there should always be a pause between recoveries
  even when recoveries are rapidly stopped and started as well as when a
  node attempts to become the leader for a shard.
  (Mark Miller, Maxim Novikov)

* SOLR-6693: bin\solr.cmd doesn't support 32-bit JRE/JDK running on Windows due to
  parenthesis in JAVA_HOME. (Timothy Potter, Christopher Hewitt, Jan Høydahl)

* SOLR-12662: Reproducing TestPolicy failures: NPE and NoClassDefFoundError.
  (Steve Rowe)

Optimizations
----------------------

* SOLR-6603: LBHttpSolrClient - lazily allocate skipped-zombie-servers list.
  (Christine Poerschke via shalin)

* SOLR-6554: Speed up overseer operations avoiding cluster state reads from
  zookeeper at the start of each loop and instead relying on local state and
  compare-and-set writes. This change also adds batching for consecutive messages
  belonging to the same collection with stateFormat=2. (shalin)

* SOLR-6680: DefaultSolrHighlighter can sometimes avoid CachingTokenFilter with
  hl.usePhraseHighlighter, and can be more efficient handling data from term vectors.
  (David Smiley)

* SOLR-6666: Dynamic copy fields are considering all dynamic fields, causing
  a significant performance impact on indexing documents. (Liram Vardi via Erick
  Erickson, Steve Rowe)

Other Changes
----------------------

* SOLR-4622: Hardcoded SolrCloud defaults for hostContext and hostPort that
  were deprecated in 4.3 have been removed completely. (hossman)

* SOLR-5936: Removed deprecated non-Trie-based numeric & date field types.
  (Steve Rowe)

* SOLR-6169: Finish removal of CoreAdminHandler handleAlias action begun in 4.9
  (Alan Woodward)

* SOLR-6215: TrieDateField should directly extend TrieField instead of
  forwarding to a wrapped TrieField. (Steve Rowe)

* SOLR-3029: Changes to spellcheck response format (Nalini Kartha via James Dyer)

* SOLR-3957: Removed RequestHandlerUtils#addExperimentalFormatWarning(), which
  removes "experimental" warning from two places: replication handler details
  command and DataImportHandler responses. (ehatcher)

* SOLR-6073: Remove helper methods from CollectionsRequest (SolrJ) for CollectionsAPI
  calls and move to a builder design for the same. (Varun Thacker, Anshum Gupta)

* SOLR-6519: Make DirectoryFactory#create() take LockFactory.
  (Uwe Schindler)

* SOLR-6400: SolrCloud tests are not properly testing session expiration. (Mark Miller)

* LUCENE-5650: Tests can no longer write to CWD. Update log dir is now made relative
  to the instance dir if it is not an absolute path. (Ryan Ernst, Dawid Weiss)

* SOLR-6390: Remove unnecessary checked exception for CloudSolrClient
  constructors, improve javadocs for CloudSolrClient constructors.
  (Steve Davids via Shawn Heisey)

* LUCENE-5901: Replaced all occurrences of LUCENE_CURRENT with LATEST for luceneMatchVersion.
  (Ryan Ernst)

* SOLR-6445: Upgrade Noggit to version 0.6 to support more flexible JSON input (Noble Paul, Yonik Seeley)

* SOLR-6073: Remove helper methods from CollectionsRequest (SolrJ) for CollectionsAPI
  calls and move to a builder design for the same. (Varun Thacker, Anshum Gupta)

* SOLR-5322: core discovery can fail w/NPE and no explanation if a non-readable directory exists
  (Said Chavkin, Erick Erickson)

* SOLR-6488, SOLR-6991: Update to Apache Tika 1.7. This adds support for parsing Outlook PST and
  Matlab MAT files. Parsing for NetCDF files was removed because of license issues; if you need
  support for this format, download the parser JAR yourself and add it to contrib/extraction/lib
  folder: http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/
  (Uwe Schindler)

* SOLR-6115: Cleanup enum/string action types in Overseer, OverseerCollectionProcessor and
  CollectionHandler. (Erick Erickson, shalin)

* SOLR-6453: Stop throwing an error message from Overseer when node exits (Ramkumar Aiyengar, Noble Paul)

* SOLR-6550: Provide simple mechanism for passing additional metadata / context about a server-side
   SolrException back to the client-side (Timothy Potter)

* SOLR-6249: Schema API changes return success before all cores are updated; client application
  can provide the optional updateTimeoutSecs parameter to cause the server handling the
  managed schema update to block until all replicas of the same collection have processed the
  update or until the specified timeout is reached (Timothy Potter)

* SOLR-6597: SolrIndexConfig parameter in one of the SolrIndexSearcher constructor has been removed.
  It was just passed and never used via that constructor. (Anshum Gupta)

* SOLR-5852: Add CloudSolrClient helper method to connect to a ZK ensemble. (Varun Thacker, Furkan KAMACI,
  Shawn Heisey, Mark Miller, Erick Erickson via shalin)

* SOLR-6592: Avoid waiting for the leader to see the down state if that leader is not live.
  (Timothy Potter)

* SOLR-6641: SystemInfoHandler should include the zkHost the node is using (when running in solrcloud mode)
  (Timothy Potter)

* SOLR-6295: Fix child filter query creation to never match parent docs in SolrExampleTests.
  (Varun Thacker, Mikhail Khludnev via shalin)

* SOLR-6578: Update commons-io dependency to the latest 2.4 version
  (Steve Rowe, Shawn Heisey)

* SOLR-6651: Fix wrong timeout logged in waitForReplicasToComeUp. (shalin)

* SOLR-6698: Solr is not consistent wrt ZkCredentialsProvider / ZkCredentialProvider.
  References to zkCredentialProvider in System properties or configurations should be
  changed to zkCredentialsProvider.  (Gregory Chanan)

* SOLR-6715: ZkSolrResourceLoader constructors accept a parameter called 'collection'
  but it should be 'configName'. (shalin)

* SOLR-6697: bin/solr start scripts allow setting SOLR_OPTS in solr.in.* (janhoy)

* SOLR-6739: Admin UI - Sort list of command line args (steffkes)

* SOLR-6740: Admin UI - improve Files View (steffkes)

* SOLR-6570: Run SolrZkClient session watch asynchronously.
 (Ramkumar Aiyengar via Mark Miller)

* SOLR-6747: Add an optional caching option as a workaround for SOLR-6586.
  (Mark Miller, Gregory Chanan)

* SOLR-6459: Normalize logging of operations in Overseer and log current queue size.
  (Ramkumar Aiyengar, shalin via Mark Miller)

* SOLR-6754: ZkController.publish doesn't use the updateLastState parameter.
  (shalin)

* SOLR-6751: Exceptions thrown in the analysis chain in DirectUpdateHandler2
  should return a BAD_REQUEST status (Alan Woodward)

* SOLR-6792: deprecate AdminHandlers, Clean up solrconfig.xml of
  unnecessary plugin definitions, implicit registration of /replication,
  /get and /admin/* handlers (Noble Paul)

* SOLR-5864: Remove previous SolrCore as parameter on reload.
  (Tomás Fernández Löbbe)

* SOLR-4792: Stop shipping a .war. (Robert Muir, Ramkumar Aiyengar, Mark Miller)

* SOLR-6799: Update Saxon-HE to 9.6.0-2. (Mark Miller)

* SOLR-6454: Suppress EOFExceptions in SolrDispatchFilter.
  (Ramkumar Aiyengar via Mark Miller)

* SOLR-6370: Allow tests to report/fail on many ZK watches being parallelly
  requested on the same data (Ramkumar Aiyengar via Timothy Potter)

* SOLR-6752: Buffer Cache allocate/lost metrics should be exposed.
  (Mike Drob via Mark Miller)

* SOLR-6560: Purge termIndexInterval from example/test configs
  (Tom Burton-West, hossman)

* SOLR-6773: Remove the multicore example as the DIH and cloud examples
  illustrate multicore behavior (hossman, Timothy Potter)

* SOLR-6834: Warn if checkIntegrityAtMerge is configured.  This option is no longer meaningful
  since the checks are done automatically at a very low level in the segment merging.
  This warning will become an error in Solr 6.0.  (hossman)

* SOLR-6833: Examples started with bin/solr -e should use a solr.solr.home directory under
  the example directory instead of server/solr. (Alexandre Rafalovitch, Anshum Gupta, hossman,
  Timothy Potter)

* SOLR-6826: fieldType capitalization is not consistent with the rest of case-sensitive field names.
  (Alexandre Rafalovitch via Erick Erickson)

* SOLR-6849: HttpSolrClient.RemoteSolrException reports the URL of the remote
  host where the exception occurred. (Alan Woodward)

* SOLR-6852: SimplePostTool no longer defaults to collection1 making core/collection/update URL
  mandatory. (Anshum Gupta)

* SOLR-6861: post.sh from exampledocs directory has been removed as there no longer is a default update
  URL. (Anshum Gupta)

* SOLR-5922: Add support for adding core properties to SolrJ Collection Admin Request calls.
  (Varun Thacker via Anshum Gupta).

* SOLR-6523: Provide SolrJ support for specifying stateFormat while creating Collections.
  (Anshum Gupta)

* SOLR-6881: Add split.key support for SPLITSHARD via SolrJ (Anshum Gupta)

* SOLR-6883: CLUSTERPROP API switch case does not call break. (Varun Thacker via shalin)

* SOLR-6882: Misspelled collection API actions in ReplicaMutator exception messages.
  (Steve Rowe via shalin)

* SOLR-6867: SolrCLI should check for existence before creating a new core/collection,
  more user-friendly error reporting (no stack trace), and the ability to pass a
  directory when using bin/solr to create a core or collection (Timothy Potter)

* SOLR-6885: Add core name to RecoveryThread name. (Christine Poerschke via shalin)

* SOLR-6855: bin/solr -e dih launches, but has some path cruft issues preventing some of the
  imports don't work (Hossman, Timothy Potter)

* SOLR-3711: Truncate long strings in /browse field facets (ehatcher)

* SOLR-6876: Remove unused legacy scripts.conf (Alexandre Rafalovitch via Erick Erickson)

* SOLR-6896: Speed up tests by dropping SolrJettyRunner thread max idle time
  (Alan Woodward)

* SOLR-6448: Add SolrJ support for all current Collection API calls. (Anshum Gupta)

* Fixed a typo in various solrconfig.xml files.  (sdumitriu - pull request #120)

* SOLR-6895: SolrServer classes are renamed to *SolrClient.  The existing
  classes still exist, but are deprecated. (Alan Woodward, Erik Hatcher)

* SOLR-6483: Refactor some methods in MiniSolrCloudCluster tests (Steve Davids via
  Erick Erickson)

* SOLR-6906: Fix typo bug in DistributedDebugComponentTest.testCompareWithNonDistributedRequest
  (Ramkumar Aiyengar via Erick Erickson)

* SOLR-6905: Test pseudo-field retrieval in distributed search.
  (Ramkumar Aiyengar via shalin)

* SOLR-6897: Nuke non-NRT mode from code and configuration. (Hossman, shalin)

* SOLR-6830: Update Woodstox to 4.4.1 and StAX to 3.1.4. (ab)

* SOLR-6918: No need to log exceptions (as warn) generated when creating MBean stats if
  the core is shutting down (Timothy Potter)

* SOLR-6932: All HttpClient ConnectionManagers and SolrJ clients should always be shutdown
  in tests and regular code. (Mark Miller)

* SOLR-1723: VelocityResponseWriter improvements (Erik Hatcher)

* SOLR-6324: Set finite default timeouts for select and update. (Ramkumar Aiyengar via Mark Miller)

* SOLR-6952: bin/solr create action should copy configset directory instead of reusing
  an existing configset in ZooKeeper by default (Timothy Potter)

* SOLR-6933: bin/solr should provide a single "create" action that creates a core
  or collection depending on whether Solr is running in standalone or cloud mode
  (Timothy Potter)

* SOLR-6496: LBHttpSolrClient stops server retries after the timeAllowed threshold is met.
  (Steve Davids, Anshum Gupta)

* SOLR-6904: Removed deprecated Circle & rect syntax. See upgrading notes.  (David Smiley)

* SOLR-6943: HdfsDirectoryFactory should fall back to system props for most of it's config
  if it is not found in solrconfig.xml. (Mark Miller, Mike Drob)

* SOLR-6926: "ant example" makes no sense anymore - should be "ant server"
  (Ramkumar Aiyengar, Timothy Potter)

* SOLR-6982: bin/solr and SolrCLI should support SSL-related Java System Properties
  (Timothy Potter)

* SOLR-6981: Add a delete action to the bin/solr script to allow deleting of cores /
  collections (with delete collection config directory from ZK) (Timothy Potter)

* SOLR-6840: Remove support for old-style solr.xml (Erick Erickson, Alan Woodward)

* SOLR-6976: Remove classes and methods deprecated in 4.x (Alan Woodward, Noble
  Paul, Chris Hostetter)

* SOLR-6521: CloudSolrClient should synchronize cache cluster state loading
    ( Noble Paul, Jessica Cheng Mallet)

* SOLR-7018: bin/solr stop should stop if there is only one node running or generate
  an error message prompting the user to be explicit about which of multiple nodes
  to stop using the -p or -all options (Timothy Potter)

* SOLR-5918: ant clean does not remove ZooKeeper data (Varun Thacker, Steve Rowe)

* SOLR-7020: 'bin/solr start' should automatically use an SSL-enabled alternate jetty
  configuration file when in SSL mode, eliminating the need for manual jetty.xml edits.
  (Steve Rowe)

* SOLR-6227: Avoid spurious failures of ChaosMonkeySafeLeaderTest by ensuring there's
  at least one jetty to kill. (shalin)

==================  4.10.4 ==================

Bug Fixes
----------------------

* SOLR-6931: We should do a limited retry when using HttpClient.
  (Mark Miller, Hrishikesh Gadre, Gregory Chanan)

* SOLR-6780: Fixed a bug in how default/appends/invariants params were affecting the set
  of all "keys" found in the request parameters, resulting in some key=value param pairs
  being duplicated.  This was noticeably affecting some areas of the code where iteration
  was done over the set of all params:
    - literal.* in ExtractingRequestHandler
    - facet.* in FacetComponent
    - spellcheck.[dictionary name].* and spellcheck.collateParam.* in SpellCheckComponent
    - olap.* in AnalyticsComponent
  (Alexandre Rafalovitch & hossman)

* SOLR-6426: SolrZkClient clean can fail due to a race with children nodes. (Mark Miller)

* SOLR-6457: LBHttpSolrClient: ArrayIndexOutOfBoundsException risk if counter overflows
  (longkey via Noble Paul)

* SOLR-6481: CLUSTERSTATUS should check if the node hosting a replica is live when
  reporting replica status (Timothy Potter)

* SOLR-6631: DistributedQueue spinning on calling zookeeper getChildren()
  (Jessica Cheng Mallet, Mark Miller, Timothy Potter)

* SOLR-6579: SnapPuller Replication blocks clean shutdown of tomcat
  (Philip Black-Knight via Noble Paul)

* SOLR-6763: Shard leader elections should not persist across session expiry
  (Alan Woodward, Mark Miller)

* SOLR-3881: Avoid OOMs in LanguageIdentifierUpdateProcessor:
  - Added langid.maxFieldValueChars and langid.maxTotalChars params to limit
    input, by default 10k and 20k chars, respectively.
  - Moved input concatenation to Tika implementation; the langdetect
    implementation instead appends each input piece via the langdetect API.
  (Vitaliy Zhovtyuk, Tomás Fernández Löbbe, Rob Tulloh, Steve Rowe)

* SOLR-6850: AutoAddReplicas makes a call to wait to see live replicas that times
  out after 30 milliseconds instead of 30 seconds. (Varun Thacker via Mark Miller)

* SOLR-6839: Direct routing with CloudSolrServer will ignore the Overwrite document option.
  (Mark Miller)

* SOLR-7139: Fix SolrContentHandler for TIKA to ignore multiple startDocument events.
  (Chris A. Mattmann, Uwe Schindler)

* SOLR-6941: DistributedQueue#containsTaskWithRequestId can fail with NPE. (Mark Miller)

* SOLR-7011: Delete collection returns before collection is actually removed.
  (Christine Poerschke via shalin)

* SOLR-6856: Restore ExtractingRequestHandler's ability to capture all HTML tags when
  parsing (X)HTML. (hossman, Uwe Schindler, ehatcher, Steve Rowe)

* SOLR-6928: solr.cmd stop works only in english (john.work, Jan Høydahl, Timothy Potter)

* SOLR-7038: Validate the presence of configset before trying to create a collection.
  (Anshum Gupta, Mark Miller)

* SOLR-7016: Fix bin\solr.cmd to work in a directory with spaces in the name.
  (Timothy Potter, Uwe Schindler)

* SOLR-6693: bin\solr.cmd doesn't support 32-bit JRE/JDK running on Windows due to
  parenthesis in JAVA_HOME. (Timothy Potter, Christopher Hewitt, Jan Høydahl)

* SOLR-7067: bin/solr won't run under bash 4.2+. (Steve Rowe)

* SOLR-7033, SOLR-5961: RecoveryStrategy should not publish any state when
  closed / cancelled and there should always be a pause between recoveries
  even when recoveries are rapidly stopped and started as well as when a
  node attempts to become the leader for a shard.
  (Mark Miller, Maxim Novikov)

* SOLR-6847: LeaderInitiatedRecoveryThread compares wrong replica's state with lirState.
  (shalin)

* SOLR-7128: Two phase distributed search is fetching extra fields in GET_TOP_IDS phase.
  (Pablo Queixalos, shalin)

Other Changes
----------------------

* SOLR-7147: Introduce new TrackingShardHandlerFactory for monitoring what requests
  are sent to shards during tests. (hossman, shalin)

==================  4.10.3 ==================

Bug Fixes
----------------------

* SOLR-6696: bin/solr start script should not enable autoSoftCommit by default (janhoy)

* SOLR-6704: TrieDateField type drops schema properties in branch 4.10 (Tomás Fernández Löbbe)

* SOLR-6085: Suggester crashes when prefixToken is longer than surface form (janhoy)

* SOLR-6323: ReRankingQParserPlugin cleaner paging and fix bug with fuzzy, range and other queries
  that need to be re-written. (Adair Kovac, Joel Bernstein)

* SOLR-6684: Fix-up /export JSON. (Joel Bernstein)

* SOLR-6781: BBoxField didn't support dynamic fields. (David Smiley)

* SOLR-6784: BBoxField's 'score' mode should have been optional. (David Smiley)

* SOLR-6510: The collapse QParser would throw a NPE when used on a DocValues field on
  an empty segment/index. (Christine Poerschke, David Smiley)

* SOLR-2927: Solr does not unregister all mbeans upon exception in constructor
  causing memory leaks. (tom liu, Sharath Babu, Cyrille Roy, shalin)

* SOLR-6685: ConcurrentModificationException in Overseer Status API. (shalin)

* SOLR-6706: /update/json/docs throws RuntimeException if a nested structure
  contains a non-leaf float field (Noble Paul, shalin)

* SOLR-6610: Slow startup of new clusters because ZkController.publishAndWaitForDownStates
  always times out. (Jessica Cheng Mallet, shalin, Noble Paul)

* SOLR-6662: better validation when parsing command-line options that expect a value
  (Timothy Potter)

* SOLR-6732: Fix handling of leader-initiated recovery state was String in older versions
  and is now a JSON map, caused backwards compatibility issues when doing rolling upgrades of
  a live cluster while indexing (Timothy Potter)

* SOLR-6705: Better strategy for dealing with JVM specific options in the start
  scripts; remove -XX:+AggressiveOpts and only set -XX:-UseSuperWord for Java 1.7u40
  to u51. (Uwe Schindler, janhoy, hossman, Timothy Potter)

* SOLR-6726: better strategy for selecting the JMX RMI port based on SOLR_PORT in bin/solr
  script (Timothy Potter)

* SOLR-6795: distrib.singlePass returns score even though not asked for.
  (Per Steffensen via shalin)

* SOLR-6796: distrib.singlePass does not return correct set of fields for multi-fl-parameter
  requests. (Per Steffensen via shalin)

* SOLR-6776: Transaction log was not flushed at the end of update requests with softCommit
  specified, which could lead to data loss if the server were killed immediately after the
  update finished.  (Jeffery Yuan via yonik)

Other Changes
----------------------

* SOLR-6661: Adjust all example configurations to allow overriding error-prone
  relative paths for solrconfig.xml <lib> references with solr.install.dir
  system property; bin/solr scripts will set it appropriately. (ehatcher)

* SOLR-6694: Auto-detect JAVA_HOME using the Windows registry if it is not set
  (janhoy, Timothy Potter)

* SOLR-6653: bin/solr script should return error code >0 when something fails
  (janhoy, Timothy Potter)

* SOLR-6829: Added getter/setter for lastException in DIH's ContextImpl (ehatcher)

==================  4.10.2 ==================

Bug Fixes
----------------------

* SOLR-6509: Solr start scripts interactive mode doesn't honor -z argument (Timothy Potter)

* SOLR-6511: Fencepost error in LeaderInitiatedRecoveryThread (Timothy Potter)

* SOLR-6530: Commits under network partitions can put any node in down state.
  (Ramkumar Aiyengar, Alan Woodward, Mark Miller, shalin)

* SOLR-6573: QueryElevationComponent now works with localParams in the query (janhoy)

* SOLR-6524: Collections left in recovery state after node restart because recovery sleep time
  increases exponentially between retries. (Mark Miller, shalin)

* SOLR-6587: Misleading exception when creating collections in SolrCloud with bad configuration.
  (Tomás Fernández Löbbe)

* SOLR-6452: StatsComponent's stat 'missing' will work on fields with docValues=true and
  indexed=false (Xu Zhang via Tomás Fernández Löbbe)

* SOLR-6646: bin/solr start script fails to detect solr on non-default port and then after
  30s tails wrong log file (janhoy)

* SOLR-6647: Bad error message when missing resource from ZK when parsing Schema (janhoy)

* SOLR-6545: Query field list with wild card on dynamic field fails.
  (Burke Webster, Xu Zhang, shalin)

Other Changes
----------------------

* SOLR-6550: Provide simple mechanism for passing additional metadata / context about a server-side
   SolrException back to the client-side (Timothy Potter)

* SOLR-6486: solr start script can have a debug flag option; use -a to set arbitrary options
  (Noble Paul, Timothy Potter)

* SOLR-6549: bin/solr script should support a -s option to set the -Dsolr.solr.home property.
  (Timothy Potter)

* SOLR-6529: Stop command in the start scripts should only stop the instance that it had started.
  (Varun Thacker, Timothy Potter)

==================  4.10.1 ==================

Bug Fixes
----------------------

* SOLR-6425: If using the new global hdfs block cache option, you can end up
  reading corrupt files on file name reuse. (Mark Miller, Gregory Chanan)

* SOLR-5814: CoreContainer reports incorrect & misleading path for solrconfig.xml
  when there are loading problems (Pradeep via hossman)

* SOLR-6024: Fix StatsComponent when using docValues="true" multiValued="true"
  (Vitaliy Zhovtyuk & Tomas Fernandez-Lobbe via hossman)

* SOLR-6493: Fix fq exclusion via "ex" local param in multivalued stats.field (hossman)

* SOLR-6447: bin/solr script needs to pass -DnumShards=1 for boostrapping collection1
  when starting Solr in cloud mode. (Timothy Potter)

* SOLR-6501: Binary Response Writer does not return wildcard fields.
  (Mike Hugo, Constantin Mitocaru, sarowe, shalin)

Other Changes
---------------------

* SOLR-6503: Removed support for parsing netcdf files in Solr Cell because
  of license issues. If you need support for this format, download the parser
  JAR yourself (version 4.2) and add it to contrib/extraction/lib folder:
  http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/
  (Uwe Schindler)

==================  4.10.0 =================

Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Versions of Major Components
---------------------
Apache Tika 1.5 (with upgraded Apache POI 3.10.1)
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6

Upgrading from Solr 4.9
----------------------

* In Solr 3.6, all primitive field types were changed to omit norms by default when the
  schema version is 1.5 or greater (SOLR-3140), but TrieDateField's default was mistakenly
  not changed.  As of Solr 4.10, TrieDateField omits norms by default (see SOLR-6211).

* Creating a SolrCore via CoreContainer.create() no longer requires an
  additional call to CoreContainer.register() to make it available to clients
  (see SOLR-6170).

* CoreContainer.remove() has been removed.  You should now use CoreContainer.unload() to
  delete a SolrCore (see SOLR-6232).

* solr.xml parsing has been improved to better account for the expected data types of
  various options.  As part of this fix, additional error checking has also been added to
  provide errors in the event of duplicated options, or unknown option names that may
  indicate a typo.  Users who have modified their solr.xml in the past and now upgrade may
  get errors on startup if they have typos or unexpected options specified in their solr.xml
  file.  (See SOLR-5746 for more information.)

Detailed Change List
----------------------

New Features
----------------------

* SOLR-6196: The overseerstatus collection API instruments amILeader and ZK state update calls.
  (shalin)

* SOLR-6069: The 'clusterstatus' API should return 'roles' information. (shalin)

* SOLR-6044: The 'clusterstatus' API should return live_nodes as well. (shalin)

* SOLR-5768: Add a distrib.singlePass parameter to make EXECUTE_QUERY phase fetch all fields
  and skip GET_FIELDS. (Gregg Donovan, shalin)

* SOLR-6183: New spatial BBoxField for indexing rectangles with search support for most predicates.
  It includes extra score relevancy modes in addition to distance: score=overlapRatio|area|area2D.
  (David Smiley, Ryan McKinley)

* SOLR-6232: You can now unload/delete cores that have failed to initialize (Alan Woodward)

* SOLR-2245: Improvements to the MailEntityProcessor:
  - Support for server-side date filtering if using GMail; requires new
    dependency on the Sun Gmail Java mail extensions
  - Support for using the last_index_time from the previous run as the
    value for the fetchMailsSince filter.
  (Peter Sturge, Timothy Potter)

* SOLR-6258: Added onRollback event handler hook to Data Import Handler (DIH).
  (ehatcher)

* SOLR-6263: Add DIH handler name to variable resolver as ${dih.handlerName}. (ehatcher)

* SOLR-6216: Better faceting for multiple intervals on DV fields (Tomas Fernandez-Lobbe
  via Erick Erickson)

* SOLR-6267: Let user override Interval Faceting key with LocalParams (Tomas Fernandez_Lobbe
  via Erick Erickson)

* SOLR-6020: Auto-generate a unique key in schema-less example if data does not have an id field.
  The UUIDUpdateProcessor was improved to not require a field name in configuration and generate
  a UUID into the unique Key field.
  (Vitaliy Zhovtyuk, hossman, Steve Rowe, Erik Hatcher, shalin)

* SOLR-6294: SOLR-6437: Remove the restriction of adding json by only wrapping it in an array in a
  new path /update/json/docs (Noble Paul , hossman, Yonik Seeley, Steve Rowe)

* SOLR-6302: UpdateRequestHandlers are registered implicitly /update ,
  /update/json, /update/csv , /update/json/docs (Noble Paul)

* SOLR-6318: New "terms" QParser for efficiently filtering documents by a list of values. For
  many values, it's more appropriate than a boolean query. (David Smiley)

* SOLR-6283: Add support for Interval Faceting in SolrJ. (Tomás Fernández Löbbe)

* SOLR-6304 : JsonLoader should be able to flatten an input JSON to multiple docs (Noble Paul)

* SOLR-2894: Distributed query support for facet.pivot (Dan Cooper, Erik Hatcher, Chris Russell,
  Andrew Muldowney, Brett Lucey, Mark Miller, hossman)

* SOLR-5656: Add autoAddReplicas feature for shared file systems. (Mark Miller, Gregory Chanan)

* SOLR-5244: Exporting Full Sorted Result Sets (Erik Hatcher, Joel Bernstein)

* SOLR-3617: bin/solr and bin/solr.cmd scripts for starting, stopping, and running Solr examples
  (Timothy Potter)

* SOLR-6233: Provide basic command line tools for checking Solr status and health.
  (Timothy Potter)


Bug Fixes
----------------------

* SOLR-6095 : SolrCloud cluster can end up without an overseer with overseer roles (Noble Paul, Shalin Mangar)

* SOLR-6165: DataImportHandler should write BigInteger and BigDecimal values as strings.
  (Anand Sengamalai via shalin)

* SOLR-6189: Avoid publishing the state as down if the node is not live when determining
  if a replica should be in leader-initiated recovery. (Timothy Potter)

* SOLR-6197: The MIGRATE collection API doesn't work when legacyCloud=false is set
  in cluster properties. (shalin)

* SOLR-6206: The migrate collection API fails on retry if temp collection already exists.
  (shalin)

* SOLR-6072: The 'deletereplica' API should remove the data and instance directory by default.
  (shalin)

* SOLR-6211: TrieDateField doesn't default to omitNorms=true. (Michael Ryan, Steve Rowe)

* SOLR-6159: A ZooKeeper session expiry during setup can keep LeaderElector from joining elections.
  (Steven Bower, shalin)

* SOLR-6223: SearchComponents may throw NPE when using shards.tolerant and there is a failure
  in the 'GET_FIELDS/GET_HIGHLIGHTS/GET_DEBUG' phase. (Tomás Fernández Löbbe via shalin)

* SOLR-6180: Callers of ManagedIndexSchema mutators should hold the schemaUpdateLock.
  (Gregory Chanan via Steve Rowe)

* SOLR-6229: Make SuggestComponent return 400 instead of 500 for bad dictionary selected in request.
  (Tomás Fernández Löbbe via shalin)

* SOLR-6235: Leader initiated recovery should use coreNodeName instead of coreName to avoid marking
  all replicas having common core name as down. (shalin)

* SOLR-6208: JettySolrRunner QueuedThreadPool's configuration code is never executed. (dweiss via shalin)

* SOLR-6245: Socket and Connection configuration are ignored in HttpSolrServer when passing in HttpClient.
  (Patanachai Tangchaisin, shalin)

* SOLR-6137: Schemaless concurrency improvements:
  - Fixed an NPE when reloading a managed schema with no dynamic copy fields
  - Moved parsing and schema fields addition to after the distributed phase
  - AddSchemaFieldsUpdateProcessor now uses a fixed schema rather than always
    retrieving the latest, and holds the schema update lock through the entire
    schema swap-out process
  (Gregory Chanan via Steve Rowe)

* SOLR-6136: ConcurrentUpdateSolrServer includes a Spin Lock (Brandon Chapman, Timothy Potter)

* SOLR-6257: More than two "!"-s in a doc ID throws an
  ArrayIndexOutOfBoundsException when using the composite id router.
  (Steve Rowe)

* SOLR-5746: Bugs in solr.xml parsing have been fixed to more correctly deal with the various
  datatypes of options people can specify, additional error handling of duplicated/unidentified
  options has also been added. (Maciej Zasada, hossman)

* SOLR-5847: Fixed data import abort button in admin UI. (ehatcher)

* SOLR-6264: Distributed commit and optimize are executed serially across all
  replicas. (Mark Miller, Timothy Potter)

* SOLR-6163: Correctly decode special characters in managed stopwords and synonym endpoints.
  (Vitaliy Zhovtyuk, Timo Schmidt via Timothy Potter)

* SOLR-6336: DistributedQueue can easily create too many ZooKeeper Watches.
  (Ramkumar Aiyengar via Mark Miller)

* SOLR-6347: DELETEREPLICA throws a NPE while removing the last Replica in a Custom
  sharded collection. (Anshum Gupta)

* SOLR-6062: Fix undesirable edismax query parser effect (introduced in SOLR-2058) in how phrase queries
  generated from pf, pf2, and pf3 are merged into the main query.  (Michael Dodsworth via ehatcher)

* SOLR-6372: HdfsDirectoryFactory should use supplied Configuration for communicating with secure kerberos.
  (Gregory Chanan via Mark Miller)

* SOLR-6284: Fix NPE in OCP when non-existent sliceId is used for a
  deleteShard request (Ramkumar Aiyengar via Anshum Gupta)

* SOLR-6380: Added missing context info to log message if IOException occurs in processing tlog
  (Steven Bower via hossman)

* SOLR-6383: RegexTransformer returns no results after replaceAll if regex does not match a value.
  (Alexander Kingson, shalin)

* SOLR-6387: Add better error messages throughout Solr and supply a work around for
  Java bug #8047340 to SystemInfoHandler: On Turkish default locale, some JVMs fail
  to fork on MacOSX, BSD, AIX, and Solaris platforms.  (hossman, Uwe Schindler)

* SOLR-6338: coreRootDirectory requires trailing slash, or SolrCloud cores are created in wrong location.
    (Primož Skale via Erick Erickson)

* SOLR-6314: Facet counts duplicated in the response if specified more than once on the request.
  (Vamsee Yarlagadda, Erick Erickson)

* SOLR-6378: Fixed example/example-DIH/ issues with "tika" and "solr" configurations, and tidied up README.txt
  (Daniel Shchyokin via ehatcher)

* SOLR-6393: TransactionLog replay performance on HDFS is very poor. (Mark Miller)

* SOLR-6268: HdfsUpdateLog has a race condition that can expose a closed HDFS FileSystem instance and should
  close its FileSystem instance if either inherited close method is called. (Mark Miller)

* SOLR-6089: When using the HDFS block cache, when a file is deleted, its underlying data entries in the
  block cache are not removed, which is a problem with the global block cache option.
  (Mark Miller, Patrick Hunt)

* SOLR-6402: OverseerCollectionProcessor should not exit for ZooKeeper ConnectionLoss.
  (Jessica Cheng via Mark Miller)

* SOLR-6405: ZooKeeper calls can easily not be retried enough on ConnectionLoss.
  (Jessica Cheng, Mark Miller)

* SOLR-6410: Ensure all Lookup instances are closed via CloseHook
  (hossman, Areek Zillur, Ryan Ernst, Dawid Weiss)

Optimizations
---------------------

* LUCENE-5803: Solr's schema now uses DelegatingAnalyzerWrapper. This uses less heap
  for cached TokenStreamComponents because it caches per FieldType not per Field, so
  indexes with many fields of same type just use one TokenStream per thread.
  (Shay Banon, Uwe Schindler, Robert Muir)

* SOLR-6259: Reduce CPU usage by avoiding repeated costly calls to Document.getField inside
  DocumentBuilder.toDocument for use-cases with large number of fields and copyFields.
  (Steven Bower via shalin)

* SOLR-5968: BinaryResponseWriter fetches unnecessary stored fields when only pseudo-fields
  are requested. (Gregg Donovan via shalin)

* SOLR-6261: Run ZooKeeper watch event callbacks in parallel to the ZooKeeper
  event thread. (Ramkumar Aiyengar via Mark Miller)

Other Changes
---------------------

* SOLR-6173: Fixed wrong failure message in TestDistributedSearch. (shalin)

* SOLR-5902: Corecontainer level mbeans are not exposed (noble)

* SOLR-6194: Allow access to DataImporter and DIHConfiguration from DataImportHandler.
  (Aaron LaBella via shalin)

* SOLR-6170: CoreContainer.preRegisterInZk() and CoreContainer.register() commands
  are merged into CoreContainer.create(). (Alan Woodward)

* SOLR-6171: Remove unused SolrCores coreNameToOrig map (Alan Woodward)

* SOLR-5596: Set system property zookeeper.forceSync=no for Solr test cases. (shalin)

* SOLR-2853: Add a unit test for the case when "spellcheck.maxCollationTries=0" (James Dyer)

* SOLR-6240: Removed unused coreName parameter in ZkStateReader.getReplicaProps. (shalin)

* SOLR-6241: Harden the HttpPartitionTest. (shalin)

* SOLR-6228: Fixed bug in TestReplicationHandler.doTestIndexAndConfigReplication. (shalin)

* SOLR-6120: On Windows, when the war is not extracted, the zkcli.bat script
  will print a helpful message indicating that the war must be unzipped instead
  of a java error about a missing class. (shalin, Shawn Heisey)

* SOLR-6179: Better strategy for handling empty managed data to avoid spurious
  warning messages in the logs. (Timothy Potter)

* SOLR-6232: CoreContainer.remove() replaced with CoreContainer.unload().  A call to
  unload will also close the core.

* SOLR-3893: DIH should not depend on mail.jar,activation.jar (Timothy Potter, Steve Rowe)

* SOLR-6252: A couple of small improvements to UnInvertedField class.
  (Vamsee Yarlagadda, Gregory Chanan, Mark Miller)

* SOLR-3345: BaseDistributedSearchTestCase should always ignore QTime.
  (Vamsee Yarlagadda, Benson Margulies via Mark Miller)

* SOLR-6270: Increased timeouts for MultiThreadedOCPTest. (shalin)

* SOLR-6274: UpdateShardHandler should log the params used to configure its
  HttpClient. (Ramkumar Aiyengar via Mark Miller)

* SOLR-6194: Opened up "public" access to DataSource, DocBuilder, and EntityProcessorWrapper
  in DIH. (Aaron LaBella via ehatcher)

* SOLR-6269: Renamed "rollback" to "error" in DIH internals, including renaming onRollback
  to onError introduced in SOLR-6258. (ehatcher)

* SOLR-3622: When using DIH in SolrCloud-mode, rollback will no longer be called when
  an error occurs. (ehatcher)

* SOLR-6231: Increased timeouts and hardened the RollingRestartTest. (Noble Paul, shalin)

* SOLR-6290: Harden and speed up CollectionsAPIAsyncDistributedZkTest. (Mark Miller, shalin)

* SOLR-6281: Made PostingsSolrHighlighter more configurable via subclass extension. (David Smiley)

* SOLR-6309: Increase timeouts for AsyncMigrateRouteKeyTest. (shalin)

* SOLR-2168: Added support for facet.missing in /browse field and pivot faceting. (ehatcher)

* SOLR-4702: Added support for multiple spellcheck collations to /browse UI. (ehatcher)

* SOLR-5664: Added support for multi-valued field highlighting in /browse UI. (ehatcher)

* SOLR-6313: Improve SolrCloud cloud-dev scripts. (Mark Miller, Vamsee Yarlagadda)

* SOLR-6360: Remove bogus "Content-Charset" header in HttpSolrServer. (Michael Ryan,
  Uwe Schindler)

* SOLR-6362: Fix bug in TestSqlEntityProcessorDelta. (James Dyer)

* SOLR-6388: Force upgrade of Apache POI dependency in Solr Cell to version
  3.10.1 to fix CVE-2014-3529 and CVE-2014-3574.  (Uwe Schindler)

* SOLR-6391: Improve message for CREATECOLLECTION failure due to missing
  numShards (Anshum Gupta)

==================  4.9.1 ==================

Versions of Major Components
---------------------
Apache Tika 1.5 (with upgraded Apache POI 3.10.1)
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6

Detailed Change List
----------------------

Other Changes
---------------------

* SOLR-6503: Removed support for parsing netcdf files in Solr Cell because
  of license issues. If you need support for this format, download the parser
  JAR yourself (version 4.2) and add it to contrib/extraction/lib folder:
  http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/
  (Uwe Schindler)

* SOLR-6388: Force upgrade of Apache POI dependency in Solr Cell to version
  3.10.1 to fix CVE-2014-3529 and CVE-2014-3574.  (Uwe Schindler)

==================  4.9.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.5
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6

Upgrading from Solr 4.8
----------------------

* Support for DiskDocValuesFormat (ie: fieldTypes configured with docValuesFormat="Disk")
  has been removed due to poor performance.  If you have an existing fieldTypes using
  DiskDocValuesFormat please modify your schema.xml to remove the 'docValuesFormat'
  attribute, and optimize your index to rewrite it into the default codec, prior to
  upgrading to 4.9.  See LUCENE-5761 for more details.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-5999: Add checkIntegrityAtMerge support to solrconfig.xml.
  (Varun Thacker via Ryan Ernst)

* SOLR-6043: Add ability to set http headers in solr response
  (Tomás Fernández Löbbe via Ryan Ernst)

* SOLR-5973: Pluggable Ranking Collectors and Merge Strategies
  (Joel Bernstein)

* SOLR-6108: Add support for 'addreplica' Collection API in SolrJ. (shalin)

* SOLR-5468: Allow a client application to request the minium achieved
  replication factor for an update request (single or batch) by sending
  an optional parameter "min_rf". (Timothy Potter)

* SOLR-6088: Add query re-ranking with the ReRankingQParserPlugin
  (Joel Bernstein)

* SOLR-5285: Added a new [child ...] DocTransformer for optionally including
  Block-Join descendant documents inline in the results of a search.  This works
  independent of whether the search itself is a block-join related query and is
  supported by he xml, json, and javabin response formats.
  (Varun Thacker via hossman)

* SOLR-6150: Add new AnalyticsQuery to support pluggable analytics
  (Joel Bernstein)

* SOLR-6125: Allow SolrIndexWriter to close without waiting for merges
  (Christine Poerschke via Alan Woodward)

* SOLR-6064: DebugComponent track output should be returned as a JSON
  object rather than a list (Christine Poerschke, Alan Woodward)


Bug Fixes
----------------------

* SOLR-5956: Use coreDescriptor.getInstanceDir() instead of getRawInstanceDir()
  in the SnapShooter to avoid problems when solr.solr.home is a symbolic link.
  (Timothy Potter)

* SOLR-6002: Fix a couple of ugly issues around SolrIndexWriter close and
  rollback as well as how SolrIndexWriter manages its ref counted directory
  instance. (Mark Miller, Gregory Chanan)

* SOLR-6015: Better way to handle managed synonyms when ignoreCase=true
  (Timothy Potter)

* SOLR-6104: The 'addreplica' Collection API does not support 'async' parameter.
  (shalin)

* SOLR-6101: Shard splitting doesn't work when legacyCloud=false is set in
  cluster properties. (shalin)

* SOLR-6111: The 'deleteshard' collection API should be able to delete a shard
  in 'construction' state. (shalin)

* SOLR-6118: 'expand.sort' didn't support function queries. (David Smiley)

* SOLR-6120: zkcli.sh should expand solr.war automatically instead of throwing
  ClassNotFoundException. (sebastian badea, shalin)

* SOLR-6149: Specifying the query value without any index value does not work in
  Analysis browser. (Aman Tandon, shalin)

* SOLR-6145: Fix Schema API optimistic concurrency by moving it out of
  ManagedIndexSchema.add(Copy)Fields() into the consumers of those methods:
  CopyFieldCollectionResource, FieldCollectionResource, FieldResource,
  and AddSchemaFieldsUpdateProcessorFactory.
  (Gregory Chanan, Alexey Serba, Steve Rowe)

* SOLR-6146: Incorrect configuration such as wrong chroot in zk server address can
  cause CloudSolrServer to leak resources. (Jessica Cheng, Varun Thacker, shalin)

* SOLR-6158: Relative configSetBase directories were resolved relative to the
  container CWD, rather than solr.home. (Simon Endele, Alan Woodward)

* SOLR-5426: Fixed a bug in ReverseWildCardFilter that could cause
  InvalidTokenOffsetsException when highlighting. (Uwe Schindler, Arun Kumar, via hossman)

* SOLR-6175: DebugComponent throws NPE on shard exceptions when using shards.tolerant.
  (Tomás Fernández Löbbe via shalin)

* SOLR-6129: DateFormatTransformer doesn't resolve dateTimeFormat. (Aaron LaBella via shalin)

* SOLR-6164: Copy Fields Schema additions are not distributed to other nodes.
  (Gregory Chanan via Steve Rowe)

* SOLR-6160: An error was sometimes possible if a distributed search included grouping
  with group.facet, faceting on facet.field and either facet.range or facet.query.
  (David Smiley)

* SOLR-6182: Data stored by the RestManager could not be reloaded after core restart, causing
  the core to fail to load; cast the data loaded from storage to the correct data type.
  (Timothy Potter)

Other Changes
---------------------

* SOLR-5980: AbstractFullDistribZkTestBase#compareResults always returns false
  for shouldFail. (Mark Miller, Gregory Chanan)

* SOLR-5987: Add "collection" to UpdateParams. (Mark Miller, Greg Solovyev)

* SOLR-3862: Add remove" as update option for atomically removing a value
  from a multivalued field (Jim Musli, Steven Bower, Alaknantha via Erick Erickson)

* SOLR-5974: Remove ShardDoc.score and use parent's ScoreDoc.score.
  (Tomás Fernández Löbbe via Ryan Ernst)

* SOLR-6025: Replace mentions of CommonsHttpSolrServer with HttpSolrServer and
  StreamingUpdateSolrServer with ConcurrentUpdateSolrServer. (Ahmet Arslan via shalin)

* SOLR-6013: Fix method visibility of Evaluator, refactor DateFormatEvaluator for
  extensibility. (Aaron LaBella via shalin)

* SOLR-6022: Deprecate getAnalyzer() in IndexField and FieldType, and add getIndexAnalyzer().
  (Ryan Ernst)

* SOLR-3671: Fix DIHWriter interface usage so users may implement writers that output
  documents to a location external to Solr (ex. a NoSql db). (Roman Chyla via James Dyer)

* SOLR-5340: Add support for named snapshots (Varun Thacker via Noble Paul)

* SOLR-5495: Recovery strategy for leader partitioned from replica case. Hardening
  recovery scenarios after the leader receives an error trying to forward an
  update request to a replica. (Timothy Potter)

* SOLR-6116: Refactor DocRouter.getDocRouter to accept routerName as a String. (shalin)

* SOLR-6026: REQUESTSTATUS Collection API now also checks for submitted tasks which are
  yet to begin execution.

* SOLR-6067: Refactor duplicate Collector code in SolrIndexSearcher
  (Christine Poerschke via hossman)

* SOLR-5940: post.jar reports back detailed error in case of error responses.
  (Sameer Maggon, shalin, Uwe Schindler)

* SOLR-6161: SolrDispatchFilter should throw java.lang.Error back even if wrapped in
  another exception. (Miklos Christine via shalin)

* SOLR-6153: ReplicationHandler backup response format should contain backup name.
  (Varun Thacker via shalin)

* SOLR-6169: Remove broken handleAlias action in CoreAdminHandler (Alan
  Woodward)

* SOLR-6128: Removed deprecated analysis factories and fieldTypes from the example
  schema.xml (hossman)

* SOLR-5868: HttpClient should be configured to use ALLOW_ALL_HOSTNAME hostname
  verifier to simplify SSL setup. (Steve Davids via Mark Miller)


Optimizations
----------------------

* SOLR-5681: Make the processing of Collection API calls multi-threaded.
  (Anshum Gupta, shalin, Noble Paul)

Build
---------------------

* SOLR-6006: Separate test and compile scope dependencies in the Solrj and
  Solr contrib ivy.xml files, so that the derived Maven dependencies get
  filled out properly in the corresponding POMs. (Steven Scott, Steve Rowe)

* SOLR-6130: Added com.uwyn:jhighlight dependency to, and removed asm:asm
  dependency from the extraction contrib - dependencies weren't fully
  upgraded with the Tika 1.4->1.5 upgrade (SOLR-5763). (Steve Rowe)

==================  4.8.1 ==================

Bug Fixes
----------------------

* SOLR-5904: ElectionContext can cancel an election when it should not if there
  was an exception while trying to register as the leader.
  (Mark Miller, Alan Woodward)

* SOLR-5993: ZkController can warn about shard leader conflict even after the conflict
  is resolved. (Gregory Chanan via shalin)

* SOLR-6017: Fix SimpleQParser to use query analyzer
  (Ryan Ernst)

* SOLR-6029: CollapsingQParserPlugin throws ArrayIndexOutOfBoundsException
  if elevated doc has been deleted from a segment. (Greg Harris, Joel Bernstein)

* SOLR-6030: Use System.nanoTime() instead of currentTimeInMills() in LRUCache.warm.
  (Tomás Fernández Löbbe via shalin)

* SOLR-6037: Fixed incorrect max/sum/stddev for Date fields in StatsComponent
  (Brett Lucey, hossman)

* SOLR-6023: FieldAnalysisRequestHandler throws NPE if no parameters are supplied.
  (shalin)

* SOLR-5090: SpellCheckComponent sometimes throws NPE if
  "spellcheck.alternativeTermCount" is set to zero (James Dyer).

* SOLR-6039: fixed debug output when no results in response
  (Tomás Fernández Löbbe, hossman)

* SOLR-6035: CloudSolrServer directUpdate routing should use getCoreUrl.
  (Marvin Justice, Joel Bernstein)

==================  4.8.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.5
Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6

Upgrading from Solr 4.7
----------------------

* In previous versions of Solr, Terms that exceeded Lucene's MAX_TERM_LENGTH were
  silently ignored when indexing documents.  Beginning with Solr 4.8, a document
  an error will be generated when attempting to index a document with a term
  that is too large.  If you wish to continue to have large terms ignored,
  use "solr.LengthFilterFactory" in all of your Analyzers.  See LUCENE-5472 for
  more details.

* Solr 4.8 requires Java 7 or greater, Java 8 is verified to be
  compatible and may bring some performance improvements. When using
  Oracle Java 7 or OpenJDK 7, be sure to not use the GA build 147 or
  update versions u40, u45 and u51! We recommend using u55 or later.
  An overview of known JVM bugs can be found on
  https://cwiki.apache.org/confluence/display/lucene/JavaBugs

* ZooKeeper is upgraded from 3.4.5 to 3.4.6.

* <fields> and <types> tags have been deprecated. There is no longer any reason to
  keep them in the schema file, they may be safely removed. This allows intermixing of
  <fieldType>, <field> and <copyField> definitions if desired. Currently, these tags
  are supported so either style may be implemented. TBD is whether they'll be
  deprecated formally for 5.0


Detailed Change List
----------------------

System Requirements
----------------------

* LUCENE-4747, LUCENE-5514: Move to Java 7 as minimum Java version.
  (Robert Muir, Uwe Schindler)

New Features
----------------------

* SOLR-5130: Implement addReplica Collections API (Noble Paul)

* SOLR-5183: JSON updates now support nested child documents using a
  "_childDocument_" object key.  (Varun Thacker, hossman)

* SOLR-5714: You can now use one pool of memory for for the HDFS block cache
  that all collections share. (Mark Miller, Gregory Chanan)

* SOLR-5720: Add ExpandComponent to expand results collapsed by the
  CollapsingQParserPlugin. (Joel Bernstein)

* SOLR-3177: Enable tagging and excluding filters in StatsComponent via the
  localParams syntax. (Mathias H., Nikolai Luthman, Vitaliy Zhovtyuk, shalin)

* SOLR-1604: Wildcards, ORs etc inside Phrase Queries. (Ahmet Arslan via Erick Erickson)

* SOLR-5477: Async execution of OverseerCollectionProcessor(CollectionsAPI)
  tasks. (Anshum Gupta)

* SOLR-5865: Provide a MiniSolrCloudCluster to enable easier testing.
 (Greg Chanan via Mark Miller)

* SOLR-5860: Use leaderConflictResolveWait in WaitForState during recovery/startup,
  improve logging and force refresh cluster state every 15 seconds.
  (Timothy Potter via shalin)

* SOLR-5749: A new Overseer status collection API exposes overseer queue sizes, timing
  statistics, success and error counts and last N failures per operation. (shalin)

* SOLR-5858: Add a hl.qparser parameter to allow you to define a queryparser
  for hl.q highlight queries. If no queryparser is defined, Solr will use
  the overall query's defType. (Alan Woodward)

* SOLR-4478: Allow cores to use configuration from a configsets directory
  outside their instance directory. (Alan Woodward, Erick Erickson)

* SOLR-5466: A new List collections and cluster status API which clients can use
  to read collection and shard information instead of reading data directly from ZooKeeper.
  (Dave Seltzer, Varun Thacker, Vitaliy Zhovtyuk, Erick Erickson, shalin)

* SOLR-5795: New DocExpirationUpdateProcessorFactory supports computing an expiration
  date for documents from the "TTL" expression, as well as automatically deleting expired
  documents on a periodic basis. (hossman)

* SOLR-5829: Allow ExpandComponent to accept query and filter query parameters
  (Joel Bernstein)

* SOLR-5653: Create a RestManager to provide REST API endpoints for
  reconfigurable plugins. (Tim Potter, Steve Rowe)

* SOLR-5655: Create a stopword filter factory that is (re)configurable,
  and capable of reporting its configuration, via REST API.
  (Tim Potter via Steve Rowe)

* SOLR-5654: Create a synonym filter factory that is (re)configurable, and
  capable of reporting its configuration, via REST API.
  (Tim Potter via Steve Rowe)

* SOLR-5960: Add support for basic authentication in post.jar tool, e.g.:
  java -Durl="http://username:password@hostname:8983/solr/update" -jar post.jar sample.xml
  (Sameer Maggon via Uwe Schindler)

* SOLR-4864: RegexReplaceProcessorFactory should support pattern capture group
  substitution in replacement string.
  (Sunil Srinivasan, Jack Krupansky via Steve Rowe)

Bug Fixes
----------------------

* SOLR-5858, SOLR-4812: edismax and dismax query parsers can be used for parsing
  highlight queries. (Alan Woodward, Tien Nguyen Manh)

* SOLR-5893: On restarting overseer designate , move itself to front of the queue (Noble Paul)

* SOLR-5915: Attempts to specify the parserImpl for
  solr.PreAnalyzedField fieldtype failed.  (Mike McCandless)

* SOLR-5943: SolrCmdDistributor does not distribute the openSearcher parameter.
  (ludovic Boutros via shalin)

* SOLR-5954: Slower DataImportHandler process caused by not reusing jdbc
  connections. (Mark Miller, Paco Garcia, Raja Nagendra Kumar)

* SOLR-5897: Upgraded to jQuery 1.7.2, Solr was previously using 1.4.3, the file was
  mistakenly named 1.7.2 (steffkes)

Optimizations
----------------------
* SOLR-1880: Distributed Search skips GET_FIELDS stage if EXECUTE_QUERY
  stage gets all fields. Requests with fl=id or fl=id,score are now single-pass.
  (Shawn Smith, Vitaliy Zhovtyuk, shalin)

* SOLR-5783: Requests to open a new searcher will now reuse the current registered
  searcher (w/o additional warming) if possible in situations where the underlying
  index has not changed.  This reduces overhead in situations such as deletes that
  do not modify the index, and/or redundant commits. (hossman)

* SOLR-5884: When recovery is cancelled, any call to the leader to wait to see
  the replica in the right state for recovery should be aborted. (Mark Miller)

Other Changes
---------------------

* SOLR-5909: Upgrade Carrot2 clustering dependency to 3.9.0. (Dawid Weiss)

* SOLR-5764: Fix recently added tests to not use absolute paths to load test-files,
  use SolrTestCaseJ4.getFile() and getResource() instead; fix morphlines/map-reduce
  to not duplicate test resources and fix dependencies among them.
  (Uwe Schindler)

* SOLR-5765: Update to SLF4J 1.7.6. (Mark Miller)

* SOLR-5609: If legacy mode is disabled don't let cores create slices/replicas/collections .
  All operations should be performed through collection API (Noble Paul)

* SOLR-5613: Upgrade to commons-codec 1.9 for better BeiderMorseFilter performance.
  (Thomas Champagne, Shawn Heisey via shalin)

* SOLR-5771: Add SolrTestCaseJ4.SuppressSSL annotation to disable SSL (instead of static boolean).
  (Robert Muir)

* SOLR-5799: When registering as the leader, if an existing ephemeral
  registration exists, wait a short time to see if it goes away.
  (Mark Miller)

* LUCENE-5472: IndexWriter.addDocument will now throw an IllegalArgumentException
  if a Term to be indexed exceeds IndexWriter.MAX_TERM_LENGTH.  To recreate previous
  behavior of silently ignoring these terms, use LengthFilter in your Analyzer.
  (hossman, Mike McCandless, Varun Thacker)

* SOLR-5825: Separate http request creating and execution in SolrJ
  (Steven Bower via Erick Erickson)

* SOLR-5837: Add hashCode/equals to SolrDocument, SolrInputDocument
  and SolrInputField for testing purposes. (Varun Thacker, Noble Paul,
  Mark Miller)

* SOLR-5853: The createCollection methods in the test framework now reports
  result of operation in the returned CollectionAdminResponse (janhoy)

* SOLR-5838: Relative SolrHome Path Bug At AbstractFullDistribZkTestBase.
  (Furkan KAMACI via shalin)

* SOLR-5763: Upgrade to Tika 1.5 (Vitaliy Zhovtyuk via Steve Rowe)

* SOLR-5881: Upgrade ZooKeeper to 3.4.6 (Shawn Heisey)

* SOLR-5883: Many tests do not shutdown SolrServer.
  (Tomás Fernández Löbbe via Mark Miller)

* SOLR-5898: Update to latest Kite Morphlines release: Version 0.12.1.
  (Mark Miller)

* SOLR-5228: Don't require <field> or <dynamicField> be inside of <fields> -- or
  that <fieldType> be inside of <types>. (Erick Erickson)

* SOLR-5903: SolrCore implements Closeable, cut over to using try-with-resources
  where possible. (Alan Woodward)

* SOLR-5914: Cleanup and fix Solr's test cleanup code.
 (Mark Miller, Uwe Schindler)

* SOLR-5936: Deprecate non-Trie-based numeric & date field types. (Steve Rowe)

* SOLR-5934: LBHttpSolrServer exception handling improvement and small test
  improvements. (Gregory Chanan via Mark Miller)

* SOLR-5773: CollapsingQParserPlugin should make elevated documents the
  group head. (David Boychuck, Joel Bernstein)

* SOLR-5937: Modernize the DIH example config sets. (Steve Rowe)

==================  4.7.2  ==================

Versions of Major Components
---------------------
Apache Tika 1.4
Carrot2 3.8.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Detailed Change List
----------------------

Bug Fixes
----------------------

* SOLR-5951: Fixed SolrDispatchFilter to throw useful exception on startup if
  SLF4j logging jars are missing.  (Uwe Schindler, Hossman, Shawn Heisey)

* SOLR-5950: Maven config: make the org.slf4j:slf4j-api dependency transitive
  (i.e., not optional) in all modules in which it's a dependency, including
  solrj, except for the WAR, where it will remain optional.
  (Uwe Schindler, Steve Rowe)

==================  4.7.1  ==================

Versions of Major Components
---------------------
Apache Tika 1.4
Carrot2 3.8.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Detailed Change List
----------------------

Bug Fixes
----------------------

* SOLR-5647: The lib paths in example-schemaless will now load correctly.
  (Paul Westin via Shawn Heisey)

* SOLR-5770: All attempts to match a SolrCore with its state in clusterstate.json
  should be done with the CoreNodeName. (Steve Davids via Mark Miller)

* SOLR-5875: QueryComponent.mergeIds() unmarshals all docs' sort field values once
  per doc instead of once per shard.
  (Alexey Serba, hoss, Martin de Vries via Steve Rowe)

* SOLR-5800: Admin UI - Analysis form doesn't render results correctly when a
  CharFilter is used. (steffkes)

* SOLR-5870: Admin UI - Reload on Core Admin doesn't show errors (steffkes)

* SOLR-5867: OverseerCollectionProcessor isn't properly generating https urls in some
  cases. (Steve Davids via shalin)

* SOLR-5866: UpdateShardHandler needs to use the system default scheme registry to
  properly handle https via javax.net.ssl.* properties. (Steve Davids via shalin)

* SOLR-5782: The full MapReduceIndexer help text does not display when using --help.
  (Mark Miller, Wolfgang Hoschek)

* SOLR-5824: Merge up Solr MapReduce contrib code to latest external changes.
  Includes a few minor bug fixes.
  (Mark Miller)

* SOLR-5818: distrib search with custom comparator does not quite work correctly
  (Ryan Ernst)

* SOLR-5895: JavaBinLoader hides IOExceptions. (Mike Sokolov via shalin)

* SOLR-5861: Recovery should not set onlyIfLeaderActive=true for slice in 'recovery'
  state. (shalin)

* SOLR-5423: CSV output doesn't include function field
  (Arun Kumar, hossman, Steve Rowe)

* SOLR-5550: shards.info is not returned by a short circuited distributed query.
  (Timothy Potter, shalin)

* SOLR-5777: Fix ordering of field values in JSON updates where
  field name key is repeated (hossman)

* SOLR-5734: We should use System.nanoTime rather than System.currentTimeMillis
  when calculating elapsed time. (Mark Miller, Ramkumar Aiyengar)

* SOLR-5760: ConcurrentUpdateSolrServer has a blockUntilFinished call when
  streamDeletes is true that should be tucked into the if statement below it.
  (Mark Miller, Gregory Chanan)

* SOLR-5761: HttpSolrServer has a few fields that can be set via setters but
  are not volatile. (Mark Miller, Gregory Chanan)

* SOLR-5907: The hdfs write cache can cause a reader to see a corrupted state.
  It now defaults to off, and if you were using solr.hdfs.blockcache.write.enabled
  explicitly, you should set it to false.
  (Mark Miller)

* SOLR-5811: The Overseer will retry work items until success, which is a serious
  problem if you hit a bad work item. (Mark Miller)

* SOLR-5796: Increase how long we are willing to wait for a core to see the ZK
  advertised leader in its local state. (Timothy Potter, Mark Miller)

* SOLR-5834: Overseer threads are only being interrupted and not closed.
  (hossman, Mark Miller)

* SOLR-5839: ZookeeperInfoServlet does not trim path properly.
  (Furkan KAMACI via Mark Miller)

* SOLR-5874: Unsafe cast in CloudSolrServer's RouteException. Change
  RouteException to handle Throwable rather than Exception.
  (Mark Miller, David Arthur)

* SOLR-5899: CloudSolrServer's RouteResponse and RouteException should be
  publicly accessible. (Mark Miller, shalin)

* SOLR-5905: CollapsingQParserPlugin throws a NPE if required 'field' param is missing.
  (Spyros Kapnissis via shalin)

* SOLR-5906: Collection create API ignores property.instanceDir parameter.
  (Varun Thacker, shalin)

* SOLR-5920: Distributed sort on DateField, BoolField and BCD{Int,Long,Str}Field
  returns string cast exception (Eric Bus, AJ Lemke, hossman, Steve Rowe)

Other Changes
---------------------

* SOLR-5796: Make how long we are willing to wait for a core to see the ZK
  advertised leader in its local state configurable.
  (Timothy Potter via Mark Miller)

==================  4.7.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.4
Carrot2 3.8.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Upgrading from Solr 4.6.0
----------------------

* CloudSolrServer and LBHttpSolrServer no longer declare MalformedURLException
  as thrown from their constructors.

* Due to a bug in previous versions the default value of the 'discountOverlap' property
  of DefaultSimilarity was not being set appropriately if you were using the implicit
  DefaultSimilarityFactory instead of explicitly configuring it.  To preserve
  consistent behavior for people who upgrade, the implicit behavior is now contingent
  on the <luceneMatchVersion/> -- discountOverlap=false for 4.6 and below,
  discountOverlap=true for 4.7 and above.  See SOLR-5561 for more information.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-5308: SOLR-5601: SOLR-5710: A new 'migrate' collection API to split all
  documents with a route key into another collection (shalin)

* SOLR-5441: Expose number of transaction log files and their size via JMX.
  (Rafał Kuć via shalin)

* SOLR-5320: Added support for tri-level compositeId routing.
  (Anshum Gupta via shalin)

* SOLR-5458: Admin UI - Added a new "Files" conf directory browser/file viewer.
  (steffkes)

* SOLR-5447, SOLR-5490: Add a QParserPlugin for Lucene's SimpleQueryParser.
  (Jack Conradson via shalin)

* SOLR-5208: Support for the setting of core.properties key/values at create-time on
  Collections API (Erick Erickson)

* SOLR-5428: SOLR-5690: New 'stats.calcdistinct' parameter in StatsComponent returns
  set of distinct values and their count. This can also be specified per field
  e.g. 'f.field.stats.calcdistinct'. (Elran Dvir via shalin)

* SOLR-5378, SOLR-5528: A new SuggestComponent that fully utilizes the Lucene suggester
  module and adds pluggable dictionaries, payloads and better distributed support.
  This is intended to eventually replace the Suggester support through the
  SpellCheckComponent. (Areek Zillur, Varun Thacker via shalin)

* SOLR-5492: Return the replica that actually served the query in shards.info
  response. (shalin)

* SOLR-5506: Support docValues in CollationField and ICUCollationField.
  (Robert Muir)

* SOLR-5023: Add support for deleteInstanceDir to be passed from SolrJ for Core
  Unload action. (Lyubov Romanchuk, shalin)

* SOLR-1871: The 'map' function query accepts a ValueSource as target and
  default value. (Chris Harris, shalin)

* SOLR-5556: Allow class of CollectionsHandler and InfoHandler to be specified
  in solr.xml. (Gregory Chanan, Alan Woodward)

* SOLR-5581: Give ZkCLI the ability to get files. (Gregory Chanan via Mark Miller)

* SOLR-5536: Add ValueSource collapse criteria to CollapsingQParsingPlugin (Joel Bernstein)

* SOLR-5541: Allow QueryElevationComponent to accept elevateIds and excludeIds
  as http parameters (Joel Bernstein)

* SOLR-5463: new 'cursorMark' request param for deep paging of sorted result sets
  (sarowe, hossman)

* SOLR-5529: Add support for queries to use multiple suggesters.
  (Areek Zillur, Erick Erickson, via Robert Muir)

* SOLR-1301: Add a Solr contrib that allows for building Solr indexes via
  Hadoop's MapReduce. (Matt Revelle, Alexander Kanarsky, Steve Rowe,
  Mark Miller, Greg Bowyer, Jason Rutherglen, Kris Jirapinyo, Jason Venner ,
  Andrzej Bialecki, Patrick Hunt, Wolfgang Hoschek, Roman Shaposhnik,
  Eric Wong)

* SOLR-5631: Add support for Lucene's FreeTextSuggester.
  (Areek Zillur via Robert Muir)

* SOLR-5695: Add support for Lucene's BlendedInfixSuggester.
  (Areek Zillur)

* SOLR-5476: Overseer Role for nodes (Noble Paul)

* SOLR-5594: Allow FieldTypes to specify custom PrefixQuery behavior
  (Anshum Gupta via hossman)

* LUCENE-5395: Upgrade to Spatial4j 0.4. Various new options are now exposed
  automatically for an RPT field type.  See Spatial4j CHANGES & javadocs.
  https://github.com/spatial4j/spatial4j/blob/master/CHANGES.md  (David Smiley)

* SOLR-5670: allow _version_ to use DocValues.  (Per Steffensen via yonik)

* SOLR-5535: Set "partialResults" header for shards that error out if
  shards.tolerant is specified. (Steve Davids via shalin)

* SOLR-5610: Support cluster-wide properties with an API called CLUSTERPROP (Noble Paul)

* SOLR-5623: Better diagnosis of RuntimeExceptions in analysis
  (Benson Margulies)

* SOLR-5530: Added a NoOpResponseParser for SolrJ which puts the entire raw
  response into an entry in the NamedList.
  (Upayavira, Vitaliy Zhovtyuk via shalin)

* SOLR-5682: Make the admin InfoHandler more pluggable / derivable.
  (Greg Chanan via Mark Miller)

* SOLR-5672: Add logParamsList parameter to support reduced logging.
  (Christine Poerschke via Mark Miller)

* SOLR-3854: SSL support for SolrCloud. (Sami Siren, hossman, Steve Davids,
  Alexey Serba, Mark Miller)

Bug Fixes
----------------------

* SOLR-5438: DebugComponent throws NPE when used with grouping.
  (Tomás Fernández Löbbe via shalin)

* SOLR-4612: Admin UI - Analysis Screen contains empty table-columns (steffkes)

* SOLR-5451: SyncStrategy closes its http connection manager before the
  executor that uses it in its close method. (Mark Miller)

* SOLR-5460: SolrDispatchFilter#sendError can get a SolrCore that it does not
  close. (Mark Miller)

* SOLR-5461: Request proxying should only set con.setDoOutput(true) if the
  request is a post. (Mark Miller)

* SOLR-5481: SolrCmdDistributor should not let the http client do its own
  retries. (Mark Miller)

* LUCENE-5347: Fixed Solr's Zookeeper Client to copy files to Zookeeper using
  binary transfer. Previously data was read with default encoding and stored
  in zookeeper as UTF-8. This bug was found after upgrading to forbidden-apis
  1.4.  (Uwe Schindler)

* SOLR-4376: DataImportHandler uses wrong date format for last_index_time if
  a delta-import is run first before any full-imports.
  (Sebastien Lorber, Arcadius Ahouansou via shalin)

* SOLR-5494: CoreContainer#remove throws NPE rather than returning null when
  a SolrCore does not exist in core discovery mode. (Mark Miller)

* SOLR-5354: Distributed sort is broken with CUSTOM FieldType.
  (Steve Rowe, hossman, Robert Muir, Jessica Cheng)

* SOLR-5515: NPE when getting stats on date field with empty result on
  SolrCloud. (Alexander Sagen, shalin)

* SOLR-5204: StatsComponent and SpellCheckComponent do not support the
  shards.tolerant=true parameter. (Anca Kopetz, shalin)

* SOLR-5527: DIH logs spurious warning for special commands. (shalin)

* SOLR-5524: Exception when using Query Function inside Scale Function.
  (Trey Grainger, yonik)

* SOLR-5562: ConcurrentUpdateSolrServer constructor ignores supplied httpclient.
  (Kyle Halliday via Mark Miller)

* SOLR-5567: ZkController getHostAddress duplicates url prefix.
  (Kyle Halliday, Alexey Serba, shalin)

* SOLR-4992: Solr eats OutOfMemoryError exceptions in many cases.
  (Mark Miller, Daniel Collins)

* LUCENE-5399, SOLR-5354 sort wouldn't work correctly with
  distributed searching for some field types such as legacy numeric
  types (Rob Muir, Mike McCandless)

* SOLR-5643: ConcurrentUpdateSolrServer will sometimes not spawn a new Runner
  thread even though there are updates in the queue. (Mark Miller)

* SOLR-5650: When a replica becomes a leader, only peer sync with other replicas
  that last published an ACTIVE state. (Mark Miller)

* SOLR-5657: When a SolrCore starts on HDFS, it should gracefully handle HDFS
  being in safe mode. (Mark Miller)

* SOLR-5663: example-DIH uses non-existing column for mapping (case-sensitive)
  (steffkes)

* SOLR-5666: Using the hdfs write cache can result in appearance of corrupted
  index. (Mark Miller)

* SOLR-5230: Call DelegatingCollector.finish() during grouping.
  (Joel Bernstein, ehatcher)

* SOLR-5679: Shard splitting fails with ClassCastException on collections
  upgraded from 4.5 and earlier versions. (Brett Hoerner, shalin)

* SOLR-5673: HTTPSolrServer doesn't set own property correctly in
  setFollowRedirects. (Frank Wesemann via shalin)

* SOLR-5676: SolrCloud updates rejected if talking to secure ZooKeeper.
  (Greg Chanan via Mark Miller)

* SOLR-5634: SolrJ GroupCommand.getNGroups returns null if group.format=simple
  and group.ngroups=true. (Artem Lukanin via shalin)

* SOLR-5667: Performance problem when not using hdfs block cache. (Mark Miller)

* SOLR-5526: Fixed NPE that could arise when explicitly configuring some built
  in QParserPlugins (Nikolay Khitrin, Vitaliy Zhovtyuk, hossman)

* SOLR-5598: LanguageIdentifierUpdateProcessor ignores all but the first value
  of multiValued string fields. (Andreas Hubold, Vitaliy Zhovtyuk via shalin)

* SOLR-5593: Replicas should accept the last updates from a leader that has just
  lost its connection to ZooKeeper. (Christine Poerschke via Mark Miller)

* SOLR-5678: SolrZkClient should throw a SolrException when connect times out
  rather than a RuntimeException. (Karl Wright, Anshum Gupta, Mark Miller)

* SOLR-4072: Error message is incorrect for linkconfig in ZkCLI.
  (Vamsee Yarlagadda, Adam Hahn, via Mark Miller)

* SOLR-5691: Sharing non thread safe WeakHashMap across thread can cause
  problems. (Bojan Smid, Mark Miller)

* SOLR-5693: Running on HDFS does work correctly with NRT search. (Mark Miller)

* SOLR-5644: SplitShard does not handle not finding a shard leader well.
  (Mark Miller, Anshum Gupta via shalin)

* SOLR-5704: coreRootDirectory was not respected when creating new cores
  via CoreAdminHandler (Jesse Sipprell, Alan Woodward)

* SOLR-5709: Highlighting grouped duplicate docs from different shards with
  group.limit > 1 throws ArrayIndexOutOfBoundsException. (Steve Rowe)

* SOLR-5561: Fix implicit DefaultSimilarityFactory initialization in IndexSchema
  to properly specify discountOverlap option.
  (Isaac Hebsh, Ahmet Arslan, Vitaliy Zhovtyuk, hossman)

* SOLR-5689: On reconnect, ZkController cancels election on first context rather
  than latest. (Gregory Chanan, Mark Miller via shalin)

* SOLR-5649: Clean up some minor ConnectionManager issues.
  (Mark Miller, Gregory Chanan)

* SOLR-5365: Fix bug with compressed files in ExtractingRequestHandler by
  upgrading commons-compress to 1.7 (Jan Høydahl, hossman)

* SOLR-5675: cloud-scripts/zkcli.bat: quote option log4j
  (Günther Ruck via steffkes

* SOLR-5721: ConnectionManager can become stuck in likeExpired.
  (Gregory Chanan via Mark Miller)

* SOLR-5731: In ConnectionManager, we should catch and only log exceptions
  from BeforeReconnect. (Mark Miller)

* SOLR-5718: Make LBHttpSolrServer zombie checks non-distrib and non-scoring.
  (Christine Poerschke via Mark Miller)

* SOLR-5727: LBHttpSolrServer should only retry on Connection exceptions when
  sending updates. Affects CloudSolrServer. (Mark Miller)

* SOLR-5739: Sub-shards created by shard splitting have their update log set
  to buffering mode on restarts. (Günther Ruck, shalin)

* SOLR-5741: UpdateShardHandler was not correctly setting max total connections
  on the HttpClient. (Shawn Heisey)

* SOLR-5620: ZKStateReader.aliases should be volatile to ensure all threads see
  the latest aliases. (Ramkumar Aiyengar via Mark Miller)

* SOLR-5448: ShowFileRequestHandler treats everything as Directory, when in
  Cloud-Mode. (Erick Erickson, steffkes)

Optimizations
----------------------

* SOLR-5436: Eliminate the 1500ms wait in overseer loop as well as
  polling the ZK distributed queue. (Noble Paul, Mark Miller)

* SOLR-5189: Solr 4.x Web UI Log Viewer does not display 'date' column from
  logs (steffkes)

* SOLR-5512: Optimize DocValuesFacets. (Robert Muir)

* SOLR-2960: fix DIH XPathEntityProcessor to add the correct number of "null"
  placeholders for multi-valued fields (Michael Watts via James Dyer)

* SOLR-5214: Reduce memory usage for shard splitting by merging segments one
  at a time. (Christine Poerschke via shalin)

* SOLR-4227: Wrap XML RequestWriter's OutputStreamWriter in a BufferedWriter
  to avoid frequent converter invocations. (Conrad Herrmann, shalin)

* SOLR-5624: Enable QueryResultCache for CollapsingQParserPlugin.
  (David Boychuck, Joel Bernstein)

* LUCENE-5440: DocSet decoupled from OpenBitSet. DocSetBase moved to use
  FixedBitSet instead of OpenBitSet. As a result BitDocSet now only works
  with FixedBitSet. (Shai Erera)

Other Changes
---------------------

* SOLR-5399: Add distributed request tracking information to DebugComponent
  (Tomás Fernández Löbbe via Ryan Ernst)

* SOLR-5421: Remove double set of distrib.from param in processAdd method of
  DistributedUpdateProcessor. (Anshum Gupta via shalin)

* SOLR-5404: The example config references deprecated classes.
  (Uwe Schindler, Rafał Kuć  via Mark Miller)

* SOLR-5487: Replication factor error message doesn't match constraint.
  (Patrick Hunt via shalin)

* SOLR-5499: Log a warning if /get is not registered when using SolrCloud.
  (Daniel Collins via shalin)

* SOLR-5517: Return HTTP error on POST requests with no Content-Type.
  (Ryan Ernst, Uwe Schindler)

* SOLR-5502: Added a test for tri-level compositeId routing with documents
  having a "/" in a document id. (Anshum Gupta via Mark Miller)

* SOLR-5533: Improve out of the box support for running Solr on hdfs with
  SolrCloud. (Mark Miller)

* SOLR-5548: Give DistributedSearchTestCase / JettySolrRunner the ability to
  specify extra filters. (Greg Chanan via Mark Miller)

* SOLR-5555: LBHttpSolrServer and CloudSolrServer constructors don't need to
  declare MalformedURLExceptions (Sushil Bajracharya, Alan Woodward)

* SOLR-5565: Raise default ZooKeeper session timeout to 30 seconds from 15
  seconds. (Mark Miller)

* SOLR-5574: CoreContainer shutdown publishes all nodes as down and waits to
  see that and then again publishes all nodes as down. (Mark Miller)

* SOLR-5590: Upgrade HttpClient/HttpComponents to 4.3.x.
  (Karl Wright via Shawn Heisey)

* SOLR-2794: change the default of hl.phraseLimit to 5000.
  (Michael Della Bitta via Robert Muir, Koji, zarni - pull request #11)

* SOLR-5632: Improve response message for reloading a non-existent core.
  (Anshum Gupta via Mark Miller)

* SOLR-5633: HttpShardHandlerFactory should make its http client available to subclasses.
  (Ryan Ernst)

* SOLR-5684: Shutdown SolrServer clients created in BasicDistributedZk2Test and
  BasicDistributedZkTest. (Tomás Fernández Löbbe via shalin)

* SOLR-5629: SolrIndexSearcher.name should include core name.
  (Shikhar Bhushan via shalin)

* SOLR-5702: Log config name found for collection at info level.
  (Christine Poerschke via Mark Miller)

* SOLR-5659: Add test for compositeId ending with an '!'.
  (Markus Jelsma, Anshum Gupta via shalin)

* SOLR-5700: Improve error handling of remote queries (proxied requests).
  (Greg Chanan, Steve Davids via Mark Miller)

* SOLR-5585: Raise Collections API timeout to 3 minutes from one minute.
  (Mark Miller)

* SOLR-5257: Improved error/warn messages when Update XML contains unexpected XML nodes
  (Vitaliy Zhovtyuk, hossman)


==================  4.6.1  ==================

Versions of Major Components
---------------------
Apache Tika 1.4
Carrot2 3.8.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Detailed Change List
----------------------

Bug Fixes
----------------------

* SOLR-5408: CollapsingQParserPlugin scores incorrectly when multiple sort criteria are used
  (Brandon Chapman, Joel Bernstein)

* SOLR-5416: CollapsingQParserPlugin breaks Tag/Exclude Faceting (David Boychuck, Joel Bernstein)

* SOLR-5442: Python client cannot parse proxied response when served by Tomcat.
  (Patrick Hunt, Gregory Chanan, Vamsee Yarlagadda, Romain Rigaux, Mark Miller)

* SOLR-5445: Proxied responses should propagate all headers rather than the
  first one for each key. (Patrick Hunt, Mark Miller)

* SOLR-5479: SolrCmdDistributor retry logic stops if a leader for the request
  cannot be found in 1 second. (Mark Miller)

* SOLR-5532: SolrJ Content-Type validation is too strict for some
  webcontainers / proxies. (Jakob Furrer, hossman, Shawn Heisey, Uwe Schindler,
  Mark Miller)

* SOLR-5547: Creating a collection alias using SolrJ's CollectionAdminRequest
  sets the alias name and the collections to alias to the same value.
  (Aaron Schram, Mark Miller)

* SOLR-5577: Likely ZooKeeper expiration should not slow down updates a given
  amount, but instead cut off updates after a given time.
  (Mark Miller, Christine Poerschke, Ramkumar Aiyengar)

* SOLR-5580: NPE when creating a core with both explicit shard and coreNodeName.
  (YouPeng Yang, Mark Miller)

* SOLR-5552: Leader recovery process can select the wrong leader if all replicas
  for a shard are down and trying to recover as well as lose updates that should
  have been recovered. (Timothy Potter, Mark Miller)

* SOLR-5569 A replica should not try and recover from a leader until it has
  published that it is ACTIVE. (Mark Miller)

* SOLR-5568 A SolrCore cannot decide to be the leader just because the cluster
  state says no other SolrCore's are active. (Mark Miller)

* SOLR-5496: We should share an http connection manager across non search
  HttpClients and ensure all http connection managers get shutdown.
  (Mark Miller)

* SOLR-5583: ConcurrentUpdateSolrServer#blockUntilFinished may wait forever if
  the executor service is shutdown. (Mark Miller)

* SOLR-5586: All ZkCmdExecutor's should be initialized with the zk client
  timeout. (Mark Miller)

* SOLR-5587: ElectionContext implementations should use
  ZkCmdExecutor#ensureExists to ensure their election paths are properly
  created. (Mark Miller)

* SOLR-5540: HdfsLockFactory should explicitly create the lock parent directory if
  necessary. (Mark Miller)

* SOLR-4709: The core reload after replication if config files have changed
  can fail due to a race condition. (Mark Miller, Hossman)

* SOLR-5503: Retry 'forward to leader' requests less aggressively - rather
  than on IOException and status 500, ConnectException. (Mark Miller)

* SOLR-5588: PeerSync doesn't count all connect failures as success.
  (Mark Miller)

* SOLR-5564: hl.maxAlternateFieldLength should apply to original field when
  fallback is attempted (janhoy)

* SOLR-5608: Don't allow a closed SolrCore to publish state to ZooKeeper.
  (Mark Miller, Shawn Heisey)

* SOLR-5615: Deadlock while trying to recover after a ZK session expiration.
  (Ramkumar Aiyengar, Mark Miller)

* SOLR-5543: Core swaps resulted in duplicate core entries in solr.xml when
  using solr.xml persistence. (Bill Bell, Alan Woodward)

* SOLR-5618: Fix false cache hits in queryResultCache when hashCodes are equal
  and duplicate filter queries exist in one of the requests (hossman)

* SOLR-4260: ConcurrentUpdateSolrServer#blockUntilFinished can return before
  all previously added updates have finished. This could cause distributed
  updates meant for replicas to be lost. (Markus Jelsma, Timothy Potter,
  Joel Bernstein, Mark Miller)

* SOLR-5645: A SolrCore reload via the CoreContainer will try and register in
  zk again with the new SolrCore. (Mark Miller)

* SOLR-5636: SolrRequestParsers does some xpath lookups on every request, which
  can cause concurrency issues. (Mark Miller)

* SOLR-5658: commitWithin and overwrite are not being distributed to replicas
  now that SolrCloud uses javabin to distribute updates.
  (Mark Miller, Varun Thacker, Elodie Sannier, shalin)

Optimizations
----------------------

* SOLR-5576: Improve concurrency when registering and waiting for all
  SolrCore's to register a DOWN state. (Christine Poerschke via Mark Miller)

==================  4.6.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.4
Carrot2 3.8.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Upgrading from Solr 4.5.0
----------------------

* If you are using methods from FieldMutatingUpdateProcessorFactory for getting
  configuration information (oneOrMany or getBooleanArg), those methods have
  been moved to NamedList and renamed to removeConfigArgs and removeBooleanArg,
  respectively.  The original methods are deprecated, to be removed in 5.0.
  See SOLR-5264.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-5167: Add support for AnalyzingInfixSuggester (AnalyzingInfixLookupFactory).
  (Areek Zillur, Varun Thacker via Robert Muir)

* SOLR-5246: Shard splitting now supports collections configured with router.field.
  (shalin)

* SOLR-5274: Allow JettySolrRunner SSL config to be specified via a constructor.
  (Mark Miller)

* SOLR-5300: Shards can be split by specifying arbitrary number of hash ranges
  within the shard's hash range. (shalin)

* SOLR-5226: Add Lucene index heap usage to the Solr admin UI.
  (Areek Zillur via Robert Muir)

* SOLR-5324: Make sub shard replica recovery and shard state switch asynchronous.
  (Yago Riveiro, shalin)

* SOLR-5338: Split shards by a route key using split.key parameter. (shalin)

* SOLR-5353: Enhance CoreAdmin api to split a route key's documents from an index
  and leave behind all other documents. (shalin)

* SOLR-5027: CollapsingQParserPlugin for high performance field collapsing on high cardinality fields.
  (Joel Bernstein)

* SOLR-5395: Added a RunAlways marker interface for UpdateRequestProcessorFactory
  implementations indicating that they should not be removed in later stages
  of distributed updates (usually signalled by the update.distrib parameter)
  (yonik)

 * SOLR-5310: Add a collection admin command to remove a replica (noble)

 * SOLR-5311: Avoid registering replicas which are removed (noble)

 * SOLR-5406: CloudSolrServer failed to propagate request parameters
   along with delete updates. (yonik)

 * SOLR-5374: Support user configured doc-centric versioning rules
   via the optional DocBasedVersionConstraintsProcessorFactory
   update processor (Hossman, yonik)

*  SOLR-5392: Extend solrj apis to cover collection management.
   (Roman Shaposhnik via Mark Miller)

* SOLR-5084: new field type EnumField. (Elran Dvir via Erick Erickson)

* SOLR-5464: Add option to ConcurrentSolrServer to stream pure delete
   requests. (Mark Miller)

Bug Fixes
----------------------

* SOLR-5216: Document updates to SolrCloud can cause a distributed deadlock.
  (Mark Miller)

* SOLR-5367: Unmarshalling delete by id commands with JavaBin can lead to class cast
  exception. (Mark Miller)

* SOLR-5359: ZooKeeper client is not closed when it fails to connect to an ensemble.
  (Mark Miller, Klaus Herrmann)

* SOLR-5042: MoreLikeThisComponent was using the rows/count value in place of
  flags, which caused a number of very strange issues, including NPEs and
  ignoring requests for the results to include the score.
  (Anshum Gupta, Mark Miller, Shawn Heisey)

* SOLR-5371: Solr should consistently call SolrServer#shutdown (Mark Miller)

* SOLR-5363: Solr doesn't start up properly with Log4J2 (Petar Tahchiev via Alan
  Woodward)

* SOLR-5380: Using cloudSolrServer.setDefaultCollection(collectionId) does not
  work as intended for an alias spanning more than 1 collection.
  (Thomas Egense, Shawn Heisey, Mark Miller)

* SOLR-5418: Background merge after field removed from solr.xml causes error.
  (Reported on user's list, Robert M's patch via Erick Erickson)

* SOLR-5318: Creating a core via the admin API doesn't respect transient property
   (Olivier Soyez via Erick Erickson)

* SOLR-5388: Creating a new core via the HTTP API that results in a transient being
  unloaded results in a " Too many close [count:-1]" error.
  (Olivier Soyez via Erick Erickson)

* SOLR-5453: Raise recovery socket read timeouts. (Mark Miller)

* SOLR-5397: Replication can fail silently in some cases. (Mark Miller)

* SOLR-5465: SolrCmdDistributor retry logic has a concurrency race bug.
  (Mark Miller)

* SOLR-5452: Do not attempt to proxy internal update requests. (Mark Miller)

Optimizations
----------------------

* SOLR-5232: SolrCloud should distribute updates via streaming rather than buffering.
  (Mark Miller)

* SOLR-5223: SolrCloud should use the JavaBin binary format for communication by default.
  (Mark Miller)

* SOLR-5370: Requests to recover when an update fails should be done in
  background threads. (Mark Miller)

* LUCENE-5300,LUCENE-5304: Specialized faceting for fields which are declared as
  multi-valued in the schema but are actually single-valued. (Adrien Grand)

Security
----------------------

* SOLR-4882: SolrResourceLoader was restricted to only allow access to resource
  files below the instance dir. The reason for this is security related: Some
  Solr components allow to pass in resource paths via REST parameters
  (e.g. XSL stylesheets, velocity templates,...) and load them via resource
  loader. For backwards compatibility, this security feature can be disabled
  by a new system property: solr.allow.unsafe.resourceloading=true
  (Uwe Schindler)

Other Changes
----------------------

* SOLR-5237: Add indexHeapUsageBytes to LukeRequestHandler, indicating how much
  heap memory is being used by the underlying Lucene index structures.
  (Areek Zillur via Robert Muir)

* SOLR-5241: Fix SimplePostToolTest performance problem - implicit DNS lookups
  (hossman)

* SOLR-5273: Update HttpComponents to 4.2.5 and 4.2.6. (Mark Miller)

* SOLR-5264: Move methods for getting config information from
             FieldMutatingUpdateProcessorFactory to NamedList. (Shawn Heisey)

* SOLR-5319: Remove unused and incorrect router name from Collection ZK nodes.
  (Jessica Cheng via shalin)

* SOLR-5321: Remove unnecessary code in Overseer.updateState method which tries to
  use router name from message where none is ever sent. (shalin)

* SOLR-5401: SolrResourceLoader logs a warning if a deprecated (factory) class
  is used in schema or config.  (Uwe Schindler)

* SOLR-3397: Warn if master or slave replication is enabled in SolrCloud mode. (Erick
  Erickson)

==================  4.5.1 ==================

Versions of Major Components
---------------------
Apache Tika 1.4
Carrot2 3.8.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Detailed Change List
----------------------

Bug Fixes
----------------------

* SOLR-4590: Collections API should return a nice error when not in SolrCloud mode.
  (Anshum Gupta, Mark Miller)

* SOLR-5295: The CREATESHARD collection API creates maxShardsPerNode number of
  replicas if replicationFactor is not specified. (Brett Hoerner, shalin)

* SOLR-5296: Creating a collection with implicit router adds shard ranges
  to each shard. (shalin)

* SOLR-5263: Fix CloudSolrServer URL cache update race. (Jessica Cheng, Mark Miller)

* SOLR-5297: Admin UI - Threads Screen missing Icon (steffkes)

* SOLR-5301: DELETEALIAS command prints CREATEALIAS in logs (janhoy)

* SOLR-5255: Remove unnecessary call to fetch and watch live nodes in ZkStateReader
  cluster watcher. (Jessica Cheng via shalin)

* SOLR-5305: Admin UI - Reloading System-Information on Dashboard does not work
  anymore (steffkes)

* SOLR-5314: Shard split action should use soft commits instead of hard commits
  to make sub shard data visible. (Kalle Aaltonen, shalin)

* SOLR-5327: SOLR-4915, "The root cause should be returned to the user when a SolrCore create
  call fails", was reverted. (Mark Miller)

* SOLR-5317: SolrCore persistence bugs if defining SolrCores in solr.xml.
  (Mark Miller, Yago Riveiro)

 * SOLR-5306: Extra collection creation parameters like collection.configName are
  not being respected. (Mark Miller, Liang Tianyu, Nathan Neulinger)

* SOLR-5325: ZooKeeper connection loss can cause the Overseer to stop processing
  commands. (Christine Poerschke, Mark Miller, Jessica Cheng)

* SOLR-4327: HttpSolrServer can leak connections on errors. (Karl Wright, Mark Miller)

* SOLR-5349: CloudSolrServer - ZK timeout arguments passed to ZkStateReader are flipped.
  (Ricardo Merizalde via shalin)

* SOLR-5330: facet.method=fcs on single values fields could sometimes result
  in incorrect facet labels. (Michael Froh, yonik)


Other Changes
----------------------

* SOLR-5323: Disable ClusteringComponent by default in collection1 example.
  The solr.clustering.enabled system property needs to be set to 'true'
  to enable the clustering contrib (reverts SOLR-4708). (Dawid Weiss)

==================  4.5.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.4
Carrot2 3.8.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Upgrading from Solr 4.4.0
----------------------

* XML configuration parsing is now more strict about situations where a single
  setting is allowed but multiple values are found.  In the past, one value
  would be chosen arbitrarily and silently.  Starting with 4.5, configuration
  parsing will fail with an error in situations like this.  If you see error
  messages such as "solrconfig.xml contains more than one value for config path:
  XXXXX" or "Found Z configuration sections when at most 1 is allowed matching
  expression: XXXXX" check your solrconfig.xml file for multiple occurrences of
  XXXXX and delete the ones that you do not wish to use.  See SOLR-4953 &
  SOLR-5108 for more details.

* In the past, schema.xml parsing would silently ignore "default" or "required"
  options specified on <dynamicField/> declarations.  Beginning with 4.5, attempting
  to do configured these on a dynamic field will cause an init error.  If you
  encounter one of these errors when upgrading an existing schema.xml, you can
  safely remove these attributes, regardless of their value, from your config and
  Solr will continue to behave exactly as it did in previous versions.  See
  SOLR-5227 for more details.

* The UniqFieldsUpdateProcessorFactory has been improved to support all of the
  FieldMutatingUpdateProcessorFactory selector options.  The <lst named="fields">
  init param option is now deprecated and should be replaced with the more standard
  <arr name="fieldName">.  See SOLR-4249 for more details.

* UpdateRequestExt has been removed as part of SOLR-4816. You should use UpdateRequest
  instead.

* CloudSolrServer can now use multiple threads to add documents by default. This is a
  small change in runtime semantics when using the bulk add method - you will still
  end up with the same exception on a failure, but some documents beyond the one that
  failed may have made it in. To get the old, single threaded behavior, set parallel updates
  to false on the CloudSolrServer instance.

Detailed Change List
----------------------

New Features
----------------------

* SOLR-5219: Rewritten selection of the default search and document clustering
  algorithms. (Dawid Weiss)

* SOLR-5202: Support easier overrides of Carrot2 clustering attributes via
  XML data sets exported from the Workbench. (Dawid Weiss)

* SOLR-5126: Update Carrot2 clustering to version 3.8.0, update Morfologik
  to version 1.7.1 (Dawid Weiss)

* SOLR-2345: Enhanced geodist() to work with an RPT field, provided that the
  field is referenced via 'sfield' and the query point is constant.
  (David Smiley)

* SOLR-5082: The encoding of URL-encoded query parameters can be changed with
  the "ie" (input encoding) parameter, e.g. "select?q=m%FCller&ie=ISO-8859-1".
  The default is UTF-8. To change the encoding of POSTed content, use the
  "Content-Type" HTTP header.  (Uwe Schindler, Shawn Heisey)

* SOLR-4221: Custom sharding (Noble Paul)

* SOLR-4808: Persist and use router,replicationFactor and maxShardsPerNode at Collection
  and Shard level (Noble Paul, Shalin Mangar)

* SOLR-5006: CREATESHARD command for 'implicit' shards (Noble Paul)

* SOLR-5017: Allow sharding based on the value of a field (Noble Paul)

* SOLR-4222: create custom sharded collection via collections API (Noble Paul)

* SOLR-4718: Allow solr.xml to be stored in ZooKeeper. (Mark Miller, Erick Erickson)

* SOLR-5156: Enhance ZkCLI to allow uploading of arbitrary files to ZK. (Erick Erickson)

* SOLR-5165: Single-valued docValues fields no longer require a default value.
  Additionally they work with sortMissingFirst, sortMissingLast, facet.missing,
  exists() in function queries, etc.  (Robert Muir)

* SOLR-5182: Add NoOpRegenerator, a regenerator for custom per-segment caches
  where items are preserved across commits.  (Robert Muir)

* SOLR-4249: UniqFieldsUpdateProcessorFactory now extends
  FieldMutatingUpdateProcessorFactory and supports all of its selector options. Use
  of the "fields" init param is now deprecated in favor of "fieldName" (hossman)

* SOLR-2548: Allow multiple threads to be specified for faceting. When threading, one
  can specify facet.threads to parallelize loading the uninverted fields. In at least
  one extreme case this reduced warmup time from 20 seconds to 3 seconds. (Janne Majaranta,
  Gun Akkor via Erick Erickson, David Smiley)

* SOLR-4816: CloudSolrServer can now route updates locally and no longer relies on inter-node
  update forwarding.  (Joel Bernstein, Shikhar Bhushan, Stephen Riesenberg, Mark Miller)

* SOLR-3249: Allow CloudSolrServer and SolrCmdDistributor to use JavaBin. (Mark Miller)

Bug Fixes
----------------------

* SOLR-3633: web UI reports an error if CoreAdminHandler says there are no
  SolrCores (steffkes)

* SOLR-4489: SpellCheckComponent can throw StringIndexOutOfBoundsException
  when generating collations involving multiple word-break corrections.
  (James Dyer)

* SOLR-5087 - CoreAdminHandler.handleMergeAction generating NullPointerException
 (Patrick Hunt via Erick Erickson)

* SOLR-5107: Fixed NPE when using numTerms=0 in LukeRequestHandler
  (Ahmet Arslan, hossman)

* SOLR-4679, SOLR-4908, SOLR-5124: Text extracted from HTML or PDF files
  using Solr Cell was missing ignorable whitespace, which is inserted by
  TIKA for convenience to support plain text extraction without using the
  HTML elements. This bug resulted in glued words.  (hossman, Uwe Schindler)

* SOLR-5121: zkcli usage help for makepath doesn't match actual command.
  (Daniel Collins via Mark Miller)

* SOLR-5119: Managed schema problems after adding fields via Schema Rest API.
  (Nils Kübler, Steve Rowe)

* SOLR-5133: HdfsUpdateLog can fail to close a FileSystem instance if init
  is called more than once. (Mark Miller)

* SOLR-5135: Harden Collection API deletion of /collections/$collection
  ZooKeeper node. (Mark Miller)

* SOLR-4764: When using NRT, just init the first reader from IndexWriter.
  (Robert Muir, Mark Miller)

* SOLR-5122: Fixed bug in spellcheck.collateMaxCollectDocs.  Eliminates risk
  of divide by zero, and makes estimated hit counts meaningful in non-optimized
  indexes.  (hossman)

* SOLR-3936: Fixed QueryElevationComponent sorting when used with Grouping
  (Michael Garski via hossman)

* SOLR-5171: SOLR Admin gui works in IE9, breaks in IE10. (Joseph L Howard via
  steffkes)

* SOLR-5174: Admin UI - Query View doesn't highlight (json) Result if it
  contains HTML Tags (steffkes)

* SOLR-4817 Solr should not fall back to the back compat built in solr.xml in SolrCloud
  mode (Erick Erickson)

* SOLR-5112: Show full message in Admin UI Logging View (Matthew Keeney via
  steffkes)

* SOLR-5190: SolrEntityProcessor substitutes variables only once in child entities
  (Harsh Chawla, shalin)

* SOLR-3852: Fixed ZookeeperInfoServlet so that the SolrCloud Admin UI pages will
  work even if ZK contains nodes with data which are not utf8 text. (hossman)

* SOLR-5206: Fixed OpenExchangeRatesOrgProvider to use refreshInterval correctly
  (Catalin, hossman)

* SOLR-5215: Fix possibility of deadlock in ZooKeeper ConnectionManager.
  (Mark Miller, Ricardo Merizalde)

* SOLR-4909: Use DirectoryReader.openIfChanged in non-NRT mode.
  (Michael Garski via Robert Muir)

* SOLR-5227: Correctly fail schema initialization if a dynamicField is configured to
  be required, or have a default value.  (hossman)

* SOLR-5231: Fixed a bug with the behavior of BoolField that caused documents w/o
  a value for the field to act as if the value were true in functions if no other
  documents in the same index segment had a value of true.
  (Robert Muir, hossman, yonik)

* SOLR-5233: The "deleteshard" collections API doesn't wait for cluster state to update,
  can fail if some nodes of the deleted shard were down and had incorrect logging.
  (Christine Poerschke, shalin)

* SOLR-5150: HdfsIndexInput may not fully read requested bytes. (Mark Miller, Patrick Hunt)

* SOLR-5240: All solr cores will now be loaded in parallel (as opposed to a fixed number)
  in zookeeper mode to avoid deadlocks due to replicas waiting for other replicas
  to come up. (yonik)

* SOLR-5243: Killing a shard in one collection can result in leader election in a different
  collection if they share the same coreNodeName. (yonik, Mark Miller)

* SOLR-5281: IndexSchema log message was printing '[null]' instead of
  '[<core name>]' (Jun Ohtani via Steve Rowe)

* SOLR-5279: Implicit properties don't seem to exist on core RELOAD
  (elyograg, hossman, Steve Rowe)

* SOLR-5291: Solrj does not propagate the root cause to the user for many errors.
  (Mark Miller)

Optimizations
----------------------

* SOLR-5044: Admin UI - Note on Core-Admin about directories while creating
  core (steffkes)

* SOLR-5134: Have HdfsIndexOutput extend BufferedIndexOutput.
  (Mark Miller, Uwe Schindler)

 * SOLR-5057: QueryResultCache should not related with the order of fq's list (Feihong Huang via Erick Erickson)

* SOLR-4816: CloudSolrServer now uses multiple threads to send updates by default.
  (Joel Bernstein via Mark Miller)

* SOLR-3530: Better error messages / Content-Type validation in SolrJ. (Mark Miller, hossman)

Other Changes
----------------------

* SOLR-4708: Enable ClusteringComponent by default in collection1 example.
  The solr.clustering.enabled system property is set to 'true' by default.
  (ehatcher, Dawid Weiss)

* SOLR-4914, SOLR-5162: Factor out core list persistence and discovery into a
  new CoresLocator interface. (Alan Woodward, Shawn Heisey)

* SOLR-5056: Improve type safety of ConfigSolr class. (Alan Woodward)

* SOLR-4951: Better randomization of MergePolicy in Solr tests (hossman)

* SOLR-4953, SOLR-5108: Make XML Configuration parsing fail if an xpath matches
  multiple nodes when only a single value or plugin instance is expected.
  (hossman)

* The routing parameter "shard.keys" is deprecated as part of SOLR-5017 .The new parameter name is '_route_' .
  The old parameter should continue to work for another release  (Noble Paul)

* SOLR-5173: Solr-core's Maven configuration includes test-only Hadoop
  dependencies as indirect compile-time dependencies.
  (Chris Collins, Steve Rowe)

==================  4.4.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.4
Carrot2 3.6.2
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Upgrading from Solr 4.3.0
----------------------

* TieredMergePolicy and the various subtypes of LogMergePolicy no longer have
  an explicit "setUseCompoundFile" method.  Instead the behavior of new
  segments is determined by the IndexWriter configuration, and the MergePolicy
  is only consulted to determine if merge segments should use the compound
  file format (based on the value of "setNoCFSRatio").  If you have explicitly
  configured one of these classes using <mergePolicy> and include an init arg
  like this...
     <bool name="useCompoundFile">true</bool>
  ...this will now be treated as if you specified...
     <useCompoundFile>true</useCompoundFile>
  ...directly on the <indexConfig> (overriding any value already set using that
  syntax) and a warning will be logged to updated your configuration.  Users
  with an explicitly declared <mergePolicy> are encouraged to review the
  current javadocs for their MergePolicy subclass and review their configured
  options carefully.  See SOLR-4941, SOLR-4934 and LUCENE-5038 for more
  information.

* SOLR-4778: The signature of LogWatcher.registerListener has changed, from
  (ListenerConfig, CoreContainer) to (ListenerConfig).  Users implementing their
  own LogWatcher classes will need to change their code accordingly.

* LUCENE-5063: ByteField and ShortField have been deprecated and will be removed
  in 5.0. If you are still using these field types, you should migrate your
  fields to TrieIntField.


Detailed Change List
----------------------

New Features
----------------------

* SOLR-3251: Dynamically add fields to schema. (Steve Rowe, Robert Muir, yonik)

* SOLR-4761, SOLR-4976: Add option to plugin a merged segment warmer into solrconfig.xml.
  Info about segments warmed in the background is available via infostream.
  (Mark Miller, Ryan Ernst, Mike McCandless, Robert Muir)

* SOLR-3240: Add "spellcheck.collateMaxCollectDocs" option so that when testing
  potential Collations against the index, SpellCheckComponent will only collect
  n documents, thereby estimating the hit-count.  This is a performance optimization
  in cases where exact hit-counts are unnecessary.  Also, when "collateExtendedResults"
  is false, this optimization is always made (James Dyer).

* SOLR-4785: New MaxScoreQParserPlugin returning max() instead of sum() of terms (janhoy)

* SOLR-4234: Add support for binary files in ZooKeeper. (Eric Pugh via Mark Miller)

* SOLR-4048: Add findRecursive method to NamedList. (Shawn Heisey)

* SOLR-4228: SolrJ's SolrPing object has new methods for ping, enable, and
  disable. (Shawn Heisey, hossman, Steve Rowe)

* SOLR-4893: Extend FieldMutatingUpdateProcessor.ConfigurableFieldNameSelector
  to enable checking whether a field matches any schema field.  To select field
  names that don't match any fields or dynamic fields in the schema, add
  <bool name="fieldNameMatchesSchemaField">false</bool> to an update
  processor's configuration in solrconfig.xml.  (Steve Rowe, hossman)

* SOLR-4921: Admin UI now supports adding documents to Solr (gsingers, steffkes)

* SOLR-4916: Add support to write and read Solr index files and transaction log
  files to and from HDFS. (phunt, Mark Miller, Gregory Chanan)

* SOLR-4892: Add FieldMutatingUpdateProcessorFactory subclasses
  Parse{Date,Integer,Long,Float,Double,Boolean}UpdateProcessorFactory. These
  factories have a default selector that matches all fields that either don’t
  match any schema field, or are in the schema with the corresponding
  typeClass. If they see a value that is not a CharSequence, or can't parse
  the value, they leave it as is. For multi-valued fields, these processors
  will not convert any values unless all are first successfully parsed, or
  already are instances of the target class. Ordering the processors, e.g.
  [Boolean, Long, Double, Date] will allow e.g. values ["2", "5", "8.6"] to
  be left alone by the Boolean and Long processors, but then converted by the
  Double processor.  (Steve Rowe, hossman)

* SOLR-4972: Add PUT command to ZkCli tool. (Roman Shaposhnik via Mark Miller)

* SOLR-4973: Adding getter method for defaultCollection on CloudSolrServer.
  (Furkan KAMACI via Mark Miller)

* SOLR-4897: Add solr/example/example-schemaless/, an example config set
  for schemaless mode. (Steve Rowe)

* SOLR-4655: Add option to have Overseer assign generic node names so that
  new addresses can host shards without naming confusion. (Mark Miller, Anshum Gupta)

* SOLR-4977: Add option to send IndexWriter's infostream to the logging system.
  (Ryan Ernst via Robert Muir)

* SOLR-4693: A "deleteshard" collections API that unloads all replicas of a given
  shard and then removes it from the cluster state. It will remove only those shards
  which are INACTIVE or have no range (created for custom sharding).
  (Anshum Gupta, shalin)

* SOLR-5003: CSV Update Handler supports optionally adding the line number/row id to
  a document (gsingers)

* SOLR-5010: Add support for creating copy fields to the Schema REST API (gsingers)

* SOLR-4991: Register QParserPlugins as SolrInfoMBeans (ehatcher)

* SOLR-4943: Add a new system wide info admin handler that exposes the system info
  that could previously only be retrieved using a SolrCore. (Mark Miller)

* SOLR-3076: Block joins.  Documents and their sub-documents must be indexed
  as a block.
  {!parent which=<allParents>}<someChildren>  takes in a query that matches child
     documents and results in matches on their parents.
  {!child of=<allParents>}<someParents>  takes in a query that matches some parent
     documents and results in matches on their children.
  (Mikhail Khludnev, Vadim Kirilchuk, Alan Woodward, Tom Burton-West, Mike McCandless,
  hossman, yonik)


Bug Fixes
----------------------

* SOLR-4333: edismax parser to not double-escape colons if already escaped by
  the client application (James Dyer, Robert J. van der Boon)

* SOLR-4776: Solrj doesn't return "between" count in range facets
  (Philip K. Warren via shalin)

* SOLR-4616: HitRatio on caches is now exposed over JMX MBeans as a float.
  (Greg Bowyer)

* SOLR-4803: Fixed core discovery mode (ie: new style solr.xml) to treat
  'collection1' as the default core name. (hossman)

* SOLR-4790: Throw an error if a core has the same name as another core, both old and
  new style solr.xml

* SOLR-4842: Fix facet.field local params from affecting other facet.field's.
  (ehatcher, hossman)

* SOLR-4814: If a SolrCore cannot be created it should remove any information it
  published about itself from ZooKeeper. (Mark Miller)

* SOLR-4863: Removed non-existent attribute sourceId from dynamic JMX stats
  to fix AttributeNotFoundException (suganuma, hossman via shalin)

* SOLR-4891: JsonLoader should preserve field value types from the JSON content stream.
  (Steve Rowe)

* SOLR-4805: SolrCore#reload should not call preRegister and publish a DOWN state to
  ZooKeeper. (Mark Miller, Jared Rodriguez)

* SOLR-4899: When reconnecting after ZooKeeper expiration, we need to be willing to wait
  forever, not just for 30 seconds. (Mark Miller)

* SOLR-4920: JdbcDataSource incorrectly suppresses exceptions when retrieving a connection from
  a JNDI context and falls back to trying to use DriverManager to obtain a connection. Additionally,
  if a SQLException is thrown while initializing a connection, such as in setAutoCommit(), the
  connection will not be closed. (Chris Eldredge via shalin)

* SOLR-4915: The root cause should be returned to the user when a SolrCore create call fails.
  (Mark Miller)

* SOLR-4925 : Collection create throws NPE when 'numShards' param is missing (Noble Paul)

* SOLR-4910: persisting solr.xml is broken. More stringent testing of persistence fixed
  up a number of issues and several bugs with persistence. Among them are
  - don't persisting implicit properties
  - should persist zkHost in the <solr> tag (user's list)
  - reloading a core that has transient="true" returned an error. reload should load
    a transient core if it's not yet loaded.
  - No longer persisting loadOnStartup or transient core properties if they were not
    specified in the original solr.xml
  - Testing flushed out the fact that you couldn't swap a core marked transient=true
    loadOnStartup=false because it hadn't been loaded yet.
  - SOLR-4862, CREATE fails to persist schema, config, and dataDir
  - SOLR-4363, not persisting coreLoadThreads in <solr> tag
  - SOLR-3900, logWatcher properties not persisted
  - SOLR-4850, cores defined as loadOnStartup=true, transient=false can't be searched
  (Erick Erickson)

* SOLR-4923: Commits to non leaders as part of a request that also contain updates
  can execute out of order. (hossman, Ricardo Merizalde, Mark Miller)

* SOLR-4932: persisting solr.xml saves some parameters it shouldn't when they weren't
  defined in the original. Benign since the default values are saved, but still incorrect.
  (Erick Erickson, thanks Shawn Heisey for helping test!)

* SOLR-4934, SOLR-4941: Fix handling of <mergePolicy> init arg
  "useCompoundFile" needed after changes in LUCENE-5038 (hossman)

* SOLR-4456: Admin UI: Displays dashboard even if Solr is down (steffkes)

* SOLR-4949: UI Analysis page dropping characters from input box (steffkes)

* SOLR-4960: Fix race conditions in shutdown of CoreContainer
  and getCore that could cause a request to attempt to use a core that
  has shut down. (yonik)

* SOLR-4926: Fixed rare replication bug that normally only manifested when
  using compound file format. (yonik, Mark Miller)

* SOLR-4974: Outgrowth of SOLR-4960 that includes transient cores and pending cores
  (Erick Erickson)

* SOLR-3369: shards.tolerant=true is broken for group queries
  (Russell Black, Martijn van Groningen, Jabouille jean Charles, Ryan McKinley via shalin)

* SOLR-4452: Hunspell stemmer should not merge duplicate dictionary entries (janhoy)

* SOLR-5000: ManagedIndexSchema doesn't persist uniqueKey tag after calling addFields
  method. (Jun Ohtani, Steve Rowe)

* SOLR-4982: Creating a core while referencing system properties looks like it loses files
  Actually, instanceDir, config, dataDir and schema are not dereferenced properly
  when creating cores that reference sys vars (e.g. &dataDir=${dir}). In the dataDir
  case in particular this leads to the index being put in a directory literally named
  ${dir} but on restart the sysvar will be properly dereferenced.

* SOLR-4788: Multiple Entities DIH delta import: dataimporter.[entityName].last_index_time
  is empty. (chakming wong, James Dyer via shalin)

* SOLR-4978: Time is stripped from datetime column when imported into Solr date field
  if convertType=true. (Bill Au, shalin)

* SOLR-5019: spurious ConcurrentModificationException when spell check component
  was in use with filters. (yonik)

* SOLR-5018: The Overseer should avoid publishing the state for collections that do not
  exist under the /collections zk node. (Mark Miller)

* SOLR-5028,SOLR-5029: ShardHandlerFactory was not being created properly when
  using new-style solr.xml, and was not being persisted properly when using
  old-style.  (Tomás Fernández Löbbe, Ryan Ernst, Alan Woodward)

* SOLR-4997: The splitshard api doesn't call commit on new sub shards before
  switching shard states. Multiple bugs related to sub shard recovery and
  replication are also fixed. (shalin)

* SOLR-5034: A facet.query that parses or analyzes down to a null Query would
  throw a NPE. Fixed. (David Smiley)

* SOLR-5039: Admin/Schema Browser displays -1 for term counts for multiValued fields.

* SOLR-5037: The CSV loader now accepts field names that are not in the schema.
  (gsingers, ehatcher, Steve Rowe)

* SOLR-4791: solr.xml sharedLib does not work in 4.3.0 (Ryan Ernst, Jan Høydahl via
  Erick Erickson)

Optimizations
----------------------

* SOLR-4923: Commit to all nodes in a collection in parallel rather than locally and
  then to all other nodes. (hossman, Ricardo Merizalde, Mark Miller)

* SOLR-3838: Admin UI - Multiple filter queries are not supported in Query UI (steffkes)

* SOLR-4719 : Admin UI - Default to wt=json on Query-Screen (steffkes)

* SOLR-4611: Admin UI - Analysis-Urls with empty parameters create empty result table
  (steffkes)

* SOLR-4955: Admin UI - Show address bar on top for Schema + Config (steffkes)

* SOLR-4412: New parameter langid.lcmap to map detected language code to be placed
  in "language" field (janhoy)

* SOLR-4815: Admin-UI - DIH: Let "commit" be checked by default (steffkes)

* SOLR-5002: optimize numDocs(Query,DocSet) when filterCache is null (Robert Muir)

* SOLR-5012: optimize search with filter when filterCache is null (Robert Muir)

Other Changes
----------------------

* SOLR-4737: Update Guava to 14.0.1 (Mark Miller)

* SOLR-2079: Add option to pass HttpServletRequest in the SolrQueryRequest context map.
  (Tomás Fernández Löbbe via Robert Muir)

* SOLR-4738: Update Jetty to 8.1.10.v20130312 (Mark Miller, Robert Muir)

* SOLR-4749: Clean up and refactor CoreContainer code around solr.xml and SolrCore
  management. (Mark Miller)

* SOLR-4547: Move logging of filenames on commit from INFO to DEBUG.
  (Shawn Heisey, hossman)

* SOLR-4757: Change the example to use the new solr.xml format and core
  discovery by directory structure. (Mark Miller)

* SOLR-4759: Velocity (/browse) template cosmetic cleanup.
  (Mark Bennett, ehatcher)

* SOLR-4778: LogWatcher init code moved out of CoreContainer (Alan Woodward)

* SOLR-4784: Make class LuceneQParser public (janhoy)

* SOLR-4448: Allow the solr internal load balancer to be more easily pluggable.
  (Philip Hoy via Robert Muir)

* SOLR-4224: Refactor JavaBinCodec input stream definition to enhance reuse.
  (phunt via Mark Miller)

* SOLR-4931: SolrDeletionPolicy onInit and onCommit methods changed to override
  exact signatures (with generics) from IndexDeletionPolicy (shalin)

* SOLR-4942: test improvements to randomize use of compound files (hossman)

* SOLR-4966: CSS, JS and other files in webapp without license (uschindler,
  steffkes)

* SOLR-4986: Upgrade to Tika 1.4 (Markus Jelsma via janhoy)

* SOLR-4948, SOLR-5009: Tidied up CoreContainer construction logic.
  (Alan Woodward, Uwe Schindler, Steve Rowe)

* LUCENE-5107: Properties files by Solr are now written in UTF-8 encoding,
  Unicode is no longer escaped. Reading of legacy properties files with
  \u escapes is still possible.  (Uwe Schindler, Robert Muir)

==================  4.3.1 ==================

Versions of Major Components
---------------------
Apache Tika 1.3
Carrot2 3.6.2
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Detailed Change List
----------------------

Bug Fixes
----------------------

* SOLR-4795: Sub shard leader should not accept any updates from parent after
  it goes active (shalin)

* SOLR-4798: shard splitting does not respect the router for the collection
  when executing the index split.   One effect of this is that documents
  may be placed in the wrong shard when the default compositeId router
  is used in conjunction with IDs containing "!". (yonik)

* SOLR-4797: Shard splitting creates sub shards which have the wrong hash
  range in cluster state. This happens when numShards is not a power of two
  and router is compositeId. (shalin)

* SOLR-4806: Shard splitting does not abort if WaitForState times out (shalin)

* SOLR-4807: The zkcli script now works with log4j. The zkcli.bat script
  was broken on Windows in 4.3.0, now it works. (Shawn Heisey)

* SOLR-4813: Fix SynonymFilterFactory to allow init parameters for
  tokenizer factory used when parsing synonyms file.  (Shingo Sasaki, hossman)

* SOLR-4829: Fix transaction log leaks (a failure to clean up some old logs)
  on a shard leader, or when unexpected exceptions are thrown during log
  recovery.  (Steven Bower, Mark Miller, yonik)

* SOLR-4751: Fix replication problem of files in sub directory of conf directory.
  (Minoru Osuka via Koji)

* SOLR-4741: Deleting a collection should set DELETE_DATA_DIR to true.
  (Mark Miller)

* SOLR-4752: There are some minor bugs in the Collections API parameter
  validation. (Mark Miller)

* SOLR-4563: RSS DIH-example not working (janhoy)

* SOLR-4796: zkcli.sh should honor JAVA_HOME (Roman Shaposhnik via Mark Miller)

* SOLR-4734: Leader election fails with an NPE if there is no UpdateLog.
 (Mark Miller, Alexander Eibner)

* SOLR-4868: Setting the log level for the log4j root category results in
  adding a new category, the empty string. (Shawn Heisey)

* SOLR-4855: DistributedUpdateProcessor doesn't check for peer sync requests (shalin)

* SOLR-4867: Admin UI - setting loglevel on root throws RangeError (steffkes)

* SOLR-4870: RecentUpdates.update() does not increment numUpdates loop counter
  (Alexey Kudinov via shalin)

* SOLR-4877, LUCENE-5023: Removed SolrIndexSearcher#getDocSetNC()'s special
  case for handling TermQuery to prevent NullPointerException if reader does
  not have fields.  (Bao Yang Yang, Uwe Schindler)

* SOLR-4881: Fix DocumentAnalysisRequestHandler to correctly use
  EmptyEntityResolver to prevent loading of external entities like
  UpdateRequestHandler does.  (Hossman, Uwe Schindler)

* SOLR-4858: SolrCore reloading was broken when the UpdateLog
  was enabled.  (Hossman, Anshum Gupta, Alexey Serba, Mark Miller, yonik)

* SOLR-4853: Fixed SolrJettyTestBase so it may be reused by end users
  (hossman)

* SOLR-4744: Update failure on sub shard is not propagated to clients by parent
  shard (Anshum Gupta, yonik, shalin)

Other Changes
----------------------

* SOLR-4760: Include core name in logs when loading schema.
  (Shawn Heisey)

==================  4.3.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.3
Carrot2 3.6.2
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Upgrading from Solr 4.2.0
----------------------

* In the schema REST API, the output path for copyFields and dynamicFields
  has been changed from all lowercase "copyfields" and "dynamicfields" to
  camelCase "copyFields" and "dynamicFields", respectively, to align with all
  other schema REST API outputs, which use camelCase.  The URL format remains
  the same: all resource names are lowercase.  See SOLR-4623 for details.

* Slf4j/logging jars are no longer included in the Solr webapp. All logging
  jars are now in example/lib/ext. Changing logging impls is now as easy as
  updating the jars in this folder with those necessary for the logging impl
  you would like. If you are using another webapp container, these jars will
  need to go in the corresponding location for that container.
  In conjunction, the dist-excl-slf4j and dist-war-excl-slf4 build targets
  have been removed since they are redundant.  See the Slf4j documentation,
  SOLR-3706, and SOLR-4651 for more details.

* The hardcoded SolrCloud defaults for 'hostContext="solr"' and
  'hostPort="8983"' have been deprecated and will be removed in Solr 5.0.
  Existing solr.xml files that do not have these options explicitly specified
  should be updated accordingly.  See SOLR-4622 for more details.


Detailed Change List
----------------------

New Features
----------------------

* SOLR-4648 PreAnalyzedUpdateProcessorFactory allows using the functionality
  of PreAnalyzedField with other field types. See javadoc for details and
  examples. (Andrzej Bialecki)

* SOLR-4623: Provide REST API read access to all elements of the live schema.
  Add a REST API request to return the entire live schema, in JSON, XML, and
  schema.xml formats.  Move REST API methods from package org.apache.solr.rest
  to org.apache.solr.rest.schema, and rename base functionality REST API
  classes to remove the current schema focus, to prepare for other non-schema
  REST APIs.  Change output path for copyFields and dynamicFields from
  "copyfields" and "dynamicfields" (all lowercase) to "copyFields" and
  "dynamicFields", respectively, to align with all other REST API outputs, which
  use camelCase.
  (Steve Rowe)

* SOLR-4658: In preparation for REST API requests that can modify the schema,
  a "managed schema" is introduced.
  Add '<schemaFactory class="ManagedSchemaFactory" mutable="true"/>' to solrconfig.xml
  in order to use it, and to enable schema modifications via REST API requests.
  (Steve Rowe, Robert Muir)

* SOLR-4656: Added two new highlight parameters, hl.maxMultiValuedToMatch and
  hl.maxMultiValuedToExamine. maxMultiValuedToMatch stops looking for snippets after
  finding the specified number of matches, no matter how far into the multivalued field
  you've gone. maxMultiValuedToExamine stops looking for matches after the specified
  number of multiValued entries have been examined. If both are specified, the limit
  hit first stops the loop. Also this patch cuts down on the copying of the document
  entries during highlighting. These optimizations are probably unnoticeable unless
  there are a large number of entries in the multiValued field. Conspicuously, this will
  prevent the "best" match from being found if it appears later in the MV list than the
  cutoff specified by either of these params. (Erick Erickson)

* SOLR-4675: Improve PostingsSolrHighlighter to support per-field/query-time overrides
  and add additional configuration parameters. See the javadocs for more details and
  examples. (Robert Muir)

* SOLR-3755: A new collections api to add additional shards dynamically by splitting
  existing shards. (yonik, Anshum Gupta, shalin)

* SOLR-4530: DIH: Provide configuration to use Tika's IdentityHtmlMapper
  (Alexandre Rafalovitch via shalin)

* SOLR-4662: Discover SolrCores by directory structure rather than defining them
  in solr.xml. Also, change the format of solr.xml to be closer to that of solrconfig.xml.
  This version of Solr will ship the example in the old style, but you can manually
  try the new style. Solr 4.4 will ship with the new style, and Solr 5.0 will remove
  support for the old style. (Erick Erickson, Mark Miller)
  Additional Work:
  - SOLR-4347: Ensure that newly-created cores via Admin handler are persisted in solr.xml
    (Erick Erickson)
  - SOLR-1905: Cores created by the admin request handler should be persisted to solr.xml.
    Also fixed a problem whereby properties like solr.solr.datadir would be persisted
    to solr.xml. Also, cores that didn't happen to be loaded were not persisted.
    (Erick Erickson)

* SOLR-4717/SOLR-1351: SimpleFacets now work with localParams allowing faceting on the
  same field multiple ways (ryan, Uri Boness)

* SOLR-4671: CSVResponseWriter now supports pseudo fields. (ryan, nihed mbarek)

* SOLR-4358: HttpSolrServer sends the stream name and exposes 'useMultiPartPost'
  (Karl Wright via ryan)


Bug Fixes
----------------------

* SOLR-4543: setting shardHandlerFactory in solr.xml/solr.properties does not work.
  (Ryan Ernst, Robert Muir via Erick Erickson)

* SOLR-4634: Fix scripting engine tests to work with Java 8's "Nashorn" Javascript
  implementation.  (Uwe Schindler)

* SOLR-4636: If opening a reader fails for some reason when opening a SolrIndexSearcher,
  a Directory can be left unreleased. (Mark Miller)

* SOLR-4405: Admin UI - admin-extra files are not rendered into the core-menu (steffkes)

* SOLR-3956: Fixed group.facet=true to work with negative facet.limit
  (Chris van der Merwe, hossman)

* SOLR-4650: copyField doesn't work with source globs that don't match any
  explicit or dynamic fields.  This regression was introduced in Solr 4.2.
  (Daniel Collins, Steve Rowe)

* SOLR-4641: Schema now throws exception on illegal field parameters.  (Robert Muir)

* SOLR-3758: Fixed SpellCheckComponent to work consistently with distributed grouping
  (James Dyer)

* SOLR-4652: Fix broken behavior with shared libraries in resource loader for
  solr.xml plugins.  (Ryan Ernst, Robert Muir, Uwe Schindler)

* SOLR-4664: ZkStateReader should update aliases on construction.
  (Mark Miller, Elodie Sannier)

* SOLR-4682: CoreAdminRequest.mergeIndexes can not merge multiple cores or indexDirs.
  (Jason.D.Cao via shalin)

* SOLR-4581: When faceting on numeric fields in Solr 4.2, negative values (constraints)
  were sorted incorrectly. (Alexander Buhr, shalin, yonik)

* SOLR-4699: The System admin handler should not assume a file system based data directory
  location. (Mark Miller)

* SOLR-4695: Fix core admin SPLIT action to be useful with non-cloud setups (shalin)

* SOLR-4680: Correct example spellcheck configuration's queryAnalyzerFieldType and
  use "text" field instead of narrower "name" field (ehatcher, Mark Bennett)

* SOLR-4702: Fix example /browse "Did you mean?" suggestion feature. (ehatcher, Mark Bennett)

* SOLR-4710: You cannot delete a collection fully from ZooKeeper unless all nodes are up and
  functioning correctly. (Mark Miller)

* SOLR-4487: SolrExceptions thrown by HttpSolrServer will now contain the
  proper HTTP status code returned by the remote server, even if that status
  code is not something Solr itself returned -- eg: from the Servlet Container,
  or an intermediate HTTP Proxy (hossman)

* SOLR-4661: Admin UI Replication details now correctly displays the current
  replicable generation/version of the master. (hossman)

* SOLR-4716,SOLR-4584: SolrCloud request proxying does not work on Tomcat and
  perhaps other non Jetty containers. (Po Rui, Yago Riveiro via Mark Miller)

* SOLR-4746: Distributed grouping used a NamedList instead of a SimpleOrderedMap
  for the top level group commands, causing output formatting differences
  compared to non-distributed grouping. (yonik)

* SOLR-4705: Fixed bug causing NPE when querying a single replica in SolrCloud
  using the shards param (Raintung Li, hossman)

* SOLR-4729: LukeRequestHandler: Using a dynamic copyField source that is
  not also a dynamic field triggers error message 'undefined field: "(glob)"'.
  (Adam Hahn, hossman, Steve Rowe)

Optimizations
----------------------

Other Changes
----------------------

* SOLR-4653: Solr configuration should log inaccessible/ non-existent relative paths in lib
  dir=... (Dawid Weiss)

* SOLR-4317: SolrTestCaseJ4: Can't avoid "collection1" convention (Tricia Jenkins, via Erick Erickson)

* SOLR-4571: SolrZkClient#setData should return Stat object. (Mark Miller)

* SOLR-4603: CachingDirectoryFactory should use an IdentityHashMap for
  byDirectoryCache. (Mark Miller)

* SOLR-4544: Refactor HttpShardHandlerFactory so load-balancing logic can be customized.
  (Ryan Ernst via Robert Muir)

* SOLR-4607: Use noggit 0.5 release jar rather than a forked copy.  (Yonik Seeley, Robert Muir)

* SOLR-3706: Ship setup to log with log4j. (ryan, Mark Miller)

* SOLR-4651: Remove dist-excl-slf4j build target. (Shawn Heisey)

* SOLR-4622: The hardcoded SolrCloud defaults for 'hostContext="solr"' and
  'hostPort="8983"' have been deprecated and will be removed in Solr 5.0.
  Existing solr.xml files that do not have these options explicitly specified
  should be updated accordingly.  (hossman)

* SOLR-4672: Requests attempting to use SolrCores which had init failures
  (that would be reported by CoreAdmin STATUS requests) now result in 500
  error responses with the details about the init failure, instead of 404
  error responses.  (hossman)

* SOLR-4730: Make the wiki link more prominent in the release documentation.
  (Uri Laserson via Robert Muir)


==================  4.2.1 ==================

Versions of Major Components
---------------------
Apache Tika 1.3
Carrot2 3.6.2
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Detailed Change List
----------------------

Bug Fixes
----------------------

* SOLR-4567: copyField source glob matching explicit field(s) stopped working
  in Solr 4.2. (Alexandre Rafalovitch, Steve Rowe)

* SOLR-4475: Fix various places that still assume File based paths even when
  not using a file based DirectoryFactory. (Mark Miller)

* SOLR-4551: CachingDirectoryFactory needs to create CacheEntry's with the
  fullpath not path. (Mark Miller)

* SOLR-4555: When forceNew is used with CachingDirectoryFactory#get, the old
  CacheValue should give up its path as it will be used by a new Directory
  instance. (Mark Miller)

* SOLR-4578: CoreAdminHandler#handleCreateAction gets a SolrCore and does not
  close it in SolrCloud mode when a core with the same name already exists.
  (Mark Miller)

* SOLR-4574: The Collections API will silently return success on an unknown
  ACTION parameter. (Mark Miller)

* SOLR-4576: Collections API validation errors should cause an exception on
  clients and otherwise act as validation errors with the Core Admin API.
  (Mark Miller)

* SOLR-4577: The collections API should return responses (success or failure)
  for each node it attempts to work with. (Mark Miller)

* SOLR-4568: The lastPublished state check before becoming a leader is not
  working correctly. (Mark Miller)

* SOLR-4570: Even if an explicit shard id is used, ZkController#preRegister
  should still wait to see the shard id in its current ClusterState.
  (Mark Miller)

* SOLR-4585: The Collections API validates numShards with < 0 but should use
  <= 0. (Mark Miller)

* SOLR-4592: DefaultSolrCoreState#doRecovery needs to check the CoreContainer
  shutdown flag inside the recoveryLock sync block. (Mark Miller)

* SOLR-4595: CachingDirectoryFactory#close can throw a concurrent
  modification exception. (Mark Miller)

* SOLR-4573: Accessing Admin UI files in SolrCloud mode logs warnings.
  (Mark Miller, Phil John)

* SOLR-4594: StandardDirectoryFactory#remove accesses byDirectoryCache
  without a lock. (Mark Miller)

* SOLR-4597: CachingDirectoryFactory#remove should not attempt to empty/remove
  the index right away but flag for removal after close. (Mark Miller)

* SOLR-4598: The Core Admin unload command's option 'deleteDataDir', should use
  the DirectoryFactory API to remove the data dir. (Mark Miller)

* SOLR-4599: CachingDirectoryFactory calls close(Directory) on forceNew if the
  Directory has a refCnt of 0, but it should call closeDirectory(CacheValue).
  (Mark Miller)

* SOLR-4602: ZkController#unregister should cancel its election participation
  before asking the Overseer to delete the SolrCore information. (Mark Miller)

* SOLR-4601: A Collection that is only partially created and then deleted will
  leave pre allocated shard information in ZooKeeper. (Mark Miller)

* SOLR-4604: UpdateLog#init is over called on SolrCore#reload. (Mark Miller)

* SOLR-4605: Rollback does not work correctly. (Mark S, Mark Miller)

* SOLR-4609: The Collections API should only send the reload command to ACTIVE
  cores. (Mark Miller)

* SOLR-4297: Atomic update request containing null=true sets all subsequent
  fields to null (Ben Pennell, Rob, shalin)

* SOLR-4371: Admin UI - Analysis Screen shows empty result (steffkes)

* SOLR-4318: NPE encountered with querying with wildcards on a field that uses
  the DefaultAnalyzer (i.e. no analysis chain defined). (Erick Erickson)

* SOLR-4361: DataImportHandler would throw UnsupportedOperationException if
  handler-level parameters were specified containing periods in the name
  (James Dyer)

* SOLR-4538: Date Math expressions were being truncated to 32 characters
  when used in field:value queries in the lucene QParser.  (hossman, yonik)

* SOLR-4617: SolrCore#reload needs to pass the deletion policy to the next
  SolrCore through its constructor rather than setting a field after.
  (Mark Miller)

* SOLR-4589: Fixed CPU spikes and poor performance in lazy field loading
  of multivalued fields. (hossman)

* SOLR-4608: Update Log replay and PeerSync replay should use the default
  processor chain to update the index. (Ludovic Boutros, yonik)

* SOLR-4625: The solr (lucene syntax) query parser lost top-level boost
  values and top-level phrase slops on queries produced by nested
  sub-parsers. (yonik)

* SOLR-4624: CachingDirectoryFactory does not need to support forceNew any
  longer and it appears to be causing a missing close directory bug. forceNew
  is no longer respected and will be removed in 4.3. (Mark Miller)

* SOLR-3819: Grouped faceting (group.facet=true) did not respect filter
  exclusions. (Petter Remen, yonik)

* SOLR-4637: Replication can sometimes wait until shutdown or core unload until
  removing some tmp directories. (Mark Miller)

* SOLR-4638: DefaultSolrCoreState#getIndexWriter(null) is a way to avoid
  creating the IndexWriter earlier than necessary, but it's not
  implemented quite right. (Mark Miller)

* SOLR-4640: CachingDirectoryFactory can fail to close directories in some race
  conditions. (Mark Miller)

* SOLR-4642: QueryResultKey is not calculating the correct hashCode for filters.
  (Joel Bernstein via Mark Miller)

Optimizations
----------------------

* SOLR-4569: waitForReplicasToComeUp should bail right away if it doesn't see the
  expected slice in the clusterstate rather than waiting. (Mark Miller)

* SOLR-4311: Admin UI - Optimize Caching Behaviour (steffkes)

Other Changes
----------------------

* SOLR-4537: Clean up schema information REST API. (Steve Rowe)

* SOLR-4596: DistributedQueue should ensure its full path exists in the constructor.
  (Mark Miller)

==================  4.2.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.3
Carrot2 3.6.2
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Upgrading from Solr 4.1.0
----------------------

(No upgrade instructions yet)

Detailed Change List
----------------------

New Features
----------------------

* SOLR-4043: Add ability to get success/failure responses from Collections API.
  (Raintung Li, Mark Miller)

* SOLR-2827: RegexpBoost Update Processor (janhoy)

* SOLR-4370: Allow configuring commitWithin to do hard commits.
  (Mark Miller, Senthuran Sivananthan)

* SOLR-4451: SolrJ, and SolrCloud internals, now use SystemDefaultHttpClient
  under the covers -- allowing many HTTP connection related properties to be
  controlled via 'standard' java system properties.  (hossman)

* SOLR-3855, SOLR-4490: Doc values support. (Adrien Grand, Robert Muir)

* SOLR-4417: Reopen the IndexWriter on SolrCore reload. (Mark Miller)

* SOLR-4477: Add support for queries (match-only) against docvalues fields.
  (Robert Muir)

* SOLR-4488: Return slave replication details for a master if the master has
  also acted like a slave. (Mark Miller)

* SOLR-4498: Add list command to ZkCLI that prints out the contents of
  ZooKeeper. (Roman Shaposhnik via Mark Miller)

* SOLR-4481: SwitchQParserPlugin registered by default as 'switch' using
  syntax: {!switch case=XXX case.foo=YYY case.bar=ZZZ default=QQQ}foo
  (hossman)

* SOLR-4078: Allow custom naming of SolrCloud nodes so that a new host:port
  combination can take over for a previous shard. (Mark Miller)

* SOLR-4210: Requests to a Collection that does not exist on the receiving node
  should be proxied to a suitable node. (Mark Miller, Po Rui, yonik)

* SOLR-1365: New SweetSpotSimilarityFactory allows customizable TF/IDF based
  Similarity when you know the optimal "Sweet Spot" of values for the field
  length and TF scoring factors.  (hossman)

* SOLR-4138: CurrencyField fields can now be used in a ValueSources to
  get the "raw" value (using the default number of fractional digits) in
  the default currency of the field type.  There is also a new
  currency(field,[CODE]) function for generating a ValueSource of the
  "natural" value, converted to an optionally specified currency to
  override the default for the field type.
  (hossman)

* SOLR-4503: Add REST API methods, via Restlet integration, for reading schema
  elements, at /schema/fields/, /schema/dynamicfields/, /schema/fieldtypes/,
  and /schema/copyfields/.  (Steve Rowe)

Bug Fixes
----------------------

* SOLR-2850: Do not refine facets when minCount == 1
  (Matt Smith, lundgren via Adrien Grand)

* SOLR-4309: /browse: Improve JQuery autosuggest behavior (janhoy)

* SOLR-4330: group.sort is ignored when using group.truncate and ex/tag
  local params together (koji)

* SOLR-4321: Collections API will sometimes use a node more than once, even
  when more unused nodes are available.
  (Eric Falcao, Brett Hoerner, Mark Miller)

* SOLR-4345 : Solr Admin UI doesn't work in IE 10 (steffkes)

* SOLR-4349 : Admin UI - Query Interface does not work in IE
  (steffkes)

* SOLR-4359: The RecentUpdates#update method should treat a problem reading the
  next record the same as a problem parsing the record - log the exception and
  break. (Mark Miller)

* SOLR-4225: Term info page under schema browser shows incorrect count of terms
  (steffkes)

* SOLR-3926: Solr should support better way of finding active sorts (Eirik Lygre via
  Erick Erickson)

* SOLR-4342: Fix DataImportHandler stats to be a proper Map (hossman)

* SOLR-3967: langid.enforceSchema option checks source field instead of target field (janhoy)

* SOLR-4380: Replicate after startup option would not replicate until the
  IndexWriter was lazily opened. (Mark Miller, Gregg Donovan)

* SOLR-4400: Deadlock can occur in a rare race between committing and
  closing a SolrIndexWriter. (Erick Erickson, Mark Miller)

* SOLR-3655: A restarted node can briefly appear live and active before it really
  is in some cases. (Mark Miller)

* SOLR-4426: NRTCachingDirectoryFactory does not initialize maxCachedMB and maxMergeSizeMB
  if <directoryFactory> is not present in solrconfig.xml (Jack Krupansky via shalin)

* SOLR-4463: Fix SolrCoreState reference counting. (Mark Miller)

* SOLR-4459: The Replication 'index move' rather than copy optimization doesn't
  kick in when using NRTCachingDirectory or the rate limiting feature.
  (Mark Miller)

* SOLR-4421,SOLR-4165: On CoreContainer shutdown, all SolrCores should publish their
  state as DOWN. (Mark Miller, Markus Jelsma)

* SOLR-4467: Ephemeral directory implementations may not recover correctly
  because the code to clear the tlog files on startup is off. (Mark Miller)

* SOLR-4413: Fix SolrCore#getIndexDir() to return the current index directory.
  (Gregg Donovan, Mark Miller)

* SOLR-4469: A new IndexWriter must be opened on SolrCore reload when the index
  directory has changed and the previous SolrCore's state should not be
  propagated. (Mark Miller, Gregg Donovan)

* SOLR-4471: Replication occurs even when a slave is already up to date.
  (Mark Miller, Andre Charton)

* SOLR-4484: ReplicationHandler#loadReplicationProperties still uses Files
  rather than the Directory to try and read the replication properties files.
  (Mark Miller)

* SOLR-4352: /browse pagination now supports and preserves sort context
  (Eric Spiegelberg, Erik Hatcher)

* LUCENE-4796, SOLR-4373: Fix concurrency issue in NamedSPILoader and
  AnalysisSPILoader when doing concurrent core loads in multicore
  Solr configs.  (Uwe Schindler, Hossman)

* SOLR-4504: Fixed CurrencyField range queries to correctly exclude
  documents w/o values (hossman)

* SOLR-4480: A trailing + or - caused the edismax parser to throw
  an exception.  (Fiona Tay, Jan Høydahl, yonik)

* SOLR-4507: The Cloud tab does not show up in the Admin UI if you
  set zkHost in solr.xml. (Alfonso Presa, Mark Miller)

* SOLR-4505: Possible deadlock around SolrCoreState update lock.
  (Erick Erickson, Mark Miller)

* SOLR-4511: When a new index is replicated into place, we need
  to update the most recent replicatable index point without
  doing a commit. This is important for repeater use cases, as
  well as when nodes may switch master/slave roles.
  (Mark Miller, Raúl Grande)

* SOLR-4515: CurrencyField's OpenExchangeRatesOrgProvider now requires
  a ratesFileLocation init param, since the previous global default
  no longer works (hossman)

* SOLR-4518: Improved CurrencyField error messages when attempting to
  use a Currency that is not supported by the current JVM. (hossman)

* SOLR-3798: Fix copyField implementation in IndexSchema to handle
  dynamic field references that aren't string-equal to the name of
  the referenced dynamic field. (Steve Rowe)

* SOLR-4497: Collection Aliasing. (Mark Miller)

Optimizations
----------------------

* SOLR-4339: Admin UI - Display Field-Flags on Schema-Browser
  (steffkes)

* SOLR-4340: Admin UI - Analysis's Button Spinner goes wild
  (steffkes)

* SOLR-4341: Admin UI - Plugins/Stats Page contains loooong
  Values which result in horizontal Scrollbar (steffkes)

* SOLR-3915: Color Legend for Cloud UI (steffkes)

* SOLR-4306: Utilize indexInfo=false when gathering core names in UI
  (steffkes)

* SOLR-4284: Admin UI - make core list scrollable separate from the rest of
  the UI (steffkes)

* SOLR-4364: Admin UI - Locale based number formatting (steffkes)

* SOLR-4521: Stop using the 'force' option for recovery replication. This
  will keep some less common unnecessary replications from happening.
  (Mark Miller, Simon Scofield)

* SOLR-4529: Improve Admin UI Dashboard legibility (Felix Buenemann via
  steffkes)

* SOLR-4526: Admin UI depends on optional system info (Felix Buenemann via
  steffkes)

Other Changes
----------------------

* SOLR-4259: Carrot2 dependency should be declared on the mini version, not the core.
  (Dawid Weiss).

* SOLR-4348: Make the lock type configurable by system property by default.
  (Mark Miller)

* SOLR-4353: Renamed example jetty context file to reduce confusion (hossman)

* SOLR-4384: Make post.jar report timing information (Upayavira via janhoy)

* SOLR-4415: Add 'state' to shards (default to 'active') and read/write them to
  ZooKeeper (Anshum Gupta via shalin)

* SOLR-4394: Tests and example configs demonstrating SSL with both server
  and client certs (hossman)

* SOLR-3060: SurroundQParserPlugin highlighting tests
  (Ahmet Arslan via hossman)

* SOLR-2470: Added more tests for VelocityResponseWriter

* SOLR-4471: Improve and clean up TestReplicationHandler.
  (Amit Nithian via Mark Miller)

* SOLR-3843: Include lucene codecs jar and enable per-field postings and docvalues
  support in the schema.xml (Robert Muir, Steve Rowe)

* SOLR-4511: Add new test for 'repeater' replication node. (Mark Miller)

* SOLR-4458: Sort directions (asc, desc) are now case insensitive
  (Shawn Heisey via hossman)

* SOLR-2996: A bare * without a field specification is treated as *:*
  by the lucene and edismax query parsers.
  (hossman, Jan Høydahl, Alan Woodward, yonik)

* SOLR-4416: Upgrade to Tika 1.3. (Markus Jelsma via Mark Miller)

* SOLR-4200: Reduce INFO level logging from CachingDirectoryFactory
  (Shawn Heisey via hossman)

==================  4.1.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.2
Carrot2 3.6.2
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.5

Upgrading from Solr 4.0.0
----------------------

Custom java parsing plugins need to migrate from throwing the internal
ParseException to throwing SyntaxError.

BaseDistributedSearchTestCase now randomizes the servlet context it uses when
creating Jetty instances.  Subclasses that assume a hard coded context of
"/solr" should either be fixed to use the "String context" variable, or should
take advantage of the new BaseDistributedSearchTestCase(String) constructor
to explicitly specify a fixed servlet context path.  See SOLR-4136 for details.


Detailed Change List
----------------------

New Features
----------------------

* SOLR-2255: Enhanced pivot faceting to use local-params in the same way that
  regular field value faceting can. This means support for excluding a filter
  query, using a different output key, and specifying 'threads' to do
  facet.method=fcs concurrently. PivotFacetHelper now extends SimpleFacet and
  the getFacetImplementation() extension hook was removed. (dsmiley)

* SOLR-3897: A highlighter parameter "hl.preserveMulti" to return all of the
  values of a multiValued field in their original order when highlighting.
  (Joel Bernstein via yonik)

* SOLR-3929: Support configuring IndexWriter max thread count in solrconfig.
  (phunt via Mark Miller)

* SOLR-3906: Add support for AnalyzingSuggester (LUCENE-3842), where the
  underlying analyzed form used for suggestions is separate from the returned
  text.  (Robert Muir)

* SOLR-3985: ExternalFileField caches can be reloaded on firstSearcher/
  newSearcher events using the ExternalFileFieldReloader (Alan Woodward)

* SOLR-3911: Make Directory and DirectoryFactory first class so that the majority
  of Solr's features work with any custom implementations. (Mark Miller)
  Additional Work:
  - SOLR-4032: Files larger than an internal buffer size fail to replicate.
    (Mark Miller, Markus Jelsma)
  - SOLR-4033: Consistently use the solrconfig.xml lockType everywhere.
    (Mark Miller, Markus Jelsma)
  - SOLR-4144: Replication using too much RAM. (yonik, Markus Jelsma)
  - SOLR-4187: NPE on Directory release (Mark Miller, Markus Jelsma)

* SOLR-4051: Add <propertyWriter /> element to DIH's data-config.xml file,
  allowing the user to specify the location, filename and Locale for
  the "data-config.properties" file.  Alternatively, users can specify their
  own property writer implementation for greater control. This new configuration
  element is optional, and defaults mimic prior behavior.  The one exception is
  that the "root" locale is default. Previously it was the machine's default locale.
  (James Dyer)

* SOLR-4084: Add FuzzyLookupFactory, which is like AnalyzingSuggester except that
  it can tolerate typos in the input.  (Areek Zillur via Robert Muir)

* SOLR-4088: New and improved auto host detection strategy for SolrCloud.
  (Raintung Li via Mark Miller)

* SOLR-3970: SystemInfoHandler now exposes more details about the
  JRE/VM/Java version in use.  (hossman)

* SOLR-4101: Add support for storing term offsets in the index via a
  'storeOffsetsWithPositions' flag on field definitions in the schema.
  (Tom Winch, Alan Woodward)

* SOLR-4093: Solr QParsers may now be directly invoked in the lucene
  query syntax without the _query_ magic field hack.
  Example:  foo AND {!term f=myfield v=$qq}
  (yonik)

* SOLR-4087: Add MAX_DOC_FREQ option to MoreLikeThis.
  (Andrew Janowczyk via Mark Miller)

* SOLR-4114: Allow creating more than one shard per instance with the
  Collection API. (Per Steffensen, Mark Miller)

* SOLR-3531: Allowing configuring maxMergeSizeMB and maxCachedMB when
  using NRTCachingDirectoryFactory. (Andy Laird via Mark Miller)

* SOLR-4118: Fix replicationFactor to align with industry usage.
  replicationFactor now means the total number of copies
  of a document stored in the collection (or the total number of
  physical indexes for a single logical slice of the collection).
  For example if replicationFactor=3 then for a given shard there
  will be a total of 3 replicas (one of which will normally be
  designated as the leader.) (yonik)

* SOLR-4124: You should be able to set the update log directory with the
  CoreAdmin API the same way as the data directory. (Mark Miller)

* SOLR-4028: When using ZK chroot, it would be nice if Solr would create the
  initial path when it doesn't exist. (Tomás Fernández Löbbe via Mark Miller)

* SOLR-3948: Calculate/display deleted documents in admin interface.
  (Shawn Heisey via Mark Miller)

* SOLR-4030: Allow rate limiting Directory IO based on the IO context.
  (Mark Miller, Radim Kolar)

* SOLR-4166: LBHttpSolrServer ignores ResponseParser passed in constructor.
  (Steve Molloy via Mark Miller)

* SOLR-4140: Allow access to the collections API through CloudSolrServer
  without referencing an existing collection. (Per Steffensen via Mark Miller)

* SOLR-788: Distributed search support for MLT.
  (Matthew Woytowitz, Mike Anderson, Jamie Johnson, Mark Miller)

* SOLR-4120: Collection API: Support for specifying a list of Solr addresses to
  spread a new collection across. (Per Steffensen via Mark Miller)

* SOLR-4110: Configurable Content-Type headers for PHPResponseWriters and
  PHPSerializedResponseWriter. (Dominik Siebel via Mark Miller)

* SOLR-1028: The ability to specify "transient" and "loadOnStartup" as a new properties of
  <core> tags in solr.xml. Can specify "transientCacheSize" in the <cores> tag. Together
  these allow cores to be loaded only when needed and only transientCacheSize transient
  cores will be loaded at a time, the rest aged out on an LRU basis.

* SOLR-4246: When update.distrib is set to skip update processors before
  the distributed update processor, always include the log update processor
  so forwarded updates will still be logged. (yonik)

* SOLR-4230: The new Solr 4 spatial fields now work with the {!geofilt} and
  {!bbox} query parsers. The score local-param works too. (David Smiley)

* SOLR-1972: Add extra statistics to RequestHandlers - 5 & 15-minute reqs/sec
  rolling averages; median, 75th, 95th, 99th, 99.9th percentile request times
  (Alan Woodward, Shawn Heisey, Adrien Grand, Uwe Schindler)

* SOLR-4271: Add support for PostingsHighlighter.  (Robert Muir)

* SOLR-4255: The new Solr 4 spatial fields now have a 'filter' boolean local-param
  that can be set to false to not filter. It's useful when there is already a spatial
  filter query but you also need to sort or boost by distance. (David Smiley)

* SOLR-4265, SOLR-4283: Solr now parses request parameters (in URL or sent with POST
  using content-type application/x-www-form-urlencoded) in its dispatcher code. It no
  longer relies on special configuration settings in Tomcat or other web containers
  to enable UTF-8 encoding, which is mandatory for correct Solr behaviour. Query
  strings passed in via the URL need to be properly-%-escaped, UTF-8 encoded
  bytes, otherwise Solr refuses to handle the request. The maximum length of
  x-www-form-urlencoded POST parameters can now be configured through the
  requestDispatcher/requestParsers/@formdataUploadLimitInKB setting in
  solrconfig.xml (defaults to 2 MiB). Solr now works out of the box with
  e.g. Tomcat, JBoss,...  (Uwe Schindler, Dawid Weiss, Alex Rocher)

* SOLR-2201: DIH's "formatDate" function now supports a timezone as an optional
  fourth parameter (James Dyer, Mark Waddle)

* SOLR-4302: New parameter 'indexInfo' (defaults to true) in CoreAdmin STATUS
  command can be used to omit index specific information (Shahar Davidson via shalin)

* SOLR-2592: Collection specific document routing.  The "compositeId"
  router is the default for collections with hash based routing (i.e. when
  numShards=N is specified on collection creation).  Documents with ids sharing
  the same domain (prefix) will be routed to the same shard, allowing for
  efficient querying.

  Example:
    The following two documents will be indexed to the same shard
    since they share the same domain "customerB!".
    <code>
       {"id" : "customerB!doc1" [...] }
       {"id" : "customerB!doc2" [...] }
    </code>
    At query time, one can specify a "shard.keys" parameter that lists what
    shards the query should cover.
       http://.../query?q=my_query&shard.keys=customerB!

  Collections that do not specify numShards at collection creation time
  use custom sharding and default to the "implicit" router.  Document updates
  received by a shard will be indexed to that shard, unless a "_shard_" parameter
  or document field names a different shard.
  (Michael Garski, Dan Rosher, yonik)


Optimizations
----------------------

* SOLR-3788: Admin Cores UI should redirect to newly created core details
  (steffkes)

* SOLR-3895: XML and XSLT UpdateRequestHandler should not try to resolve
  external entities. This improves speed of loading e.g. XSL-transformed
  XHTML documents.  (Martin Herfurt, uschindler, hossman)

* SOLR-3614: Fix XML parsing in XPathEntityProcessor to correctly expand
  named entities, but ignore external entities.  (uschindler, hossman)

* SOLR-3734: Improve Schema-Browser Handling for CopyField using
  dynamicField's (steffkes)

* SOLR-3941: The "commitOnLeader" part of distributed recovery can use
  openSearcher=false. (Tomás Fernández Löbbe via Mark Miller)

* SOLR-4063: Allow CoreContainer to load multiple SolrCores in parallel rather
  than just serially. (Mark Miller)

* SOLR-4199: When doing zk retries due to connection loss, rather than just
  retrying for 2 minutes, retry in proportion to the session timeout.
  (Mark Miller)

* SOLR-4262: Replication Icon on Dashboard does not reflect Master-/Slave-
  State (steffkes)

* SOLR-4264: Missing Error-Screen on UI's Cloud-Page (steffkes)

* SOLR-4261: Percentage Infos on Dashboard have a fixed width (steffkes)

* SOLR-3851: create a new core/delete an existing core should also update
  the main/left list of cores on the admin UI (steffkes)

* SOLR-3840: XML query response display is unreadable in Solr Admin Query UI
  (steffkes)

* SOLR-3982: Admin UI: Various Dataimport Improvements (steffkes)

* SOLR-4296: Admin UI: Improve Dataimport Auto-Refresh (steffkes)

* SOLR-3458: Allow multiple Items to stay open on Plugins-Page (steffkes)

Bug Fixes
----------------------

* SOLR-4288: Improve logging for FileDataSource (basePath, relative
  resources). (Dawid Weiss)

* SOLR-4007: Morfologik dictionaries not available in Solr field type
  due to class loader lookup problems. (Lance Norskog, Dawid Weiss)

* SOLR-3560: Handle different types of Exception Messages for Logging UI
  (steffkes)

* SOLR-3637: Commit Status at Core-Admin UI is always false (steffkes)

* SOLR-3917: Partial State on Schema-Browser UI is not defined for Dynamic
  Fields & Types (steffkes)

* SOLR-3939: Consider a sync attempt from leader to replica that fails due
  to 404 a success. (Mark Miller, Joel Bernstein)

* SOLR-3940: Rejoining the leader election incorrectly triggers the code path
  for a fresh cluster start rather than fail over. (Mark Miller)

* SOLR-3961: Fixed error using LimitTokenCountFilterFactory
  (Jack Krupansky, hossman)

* SOLR-3933: Distributed commits are not guaranteed to be ordered within a
  request. (Mark Miller)

* SOLR-3939: An empty or just replicated index cannot become the leader of a
  shard after a leader goes down. (Joel Bernstein, yonik, Mark Miller)

* SOLR-3971: A collection that is created with numShards=1 turns into a
  numShards=2 collection after starting up a second core and not specifying
  numShards. (Mark Miller)

* SOLR-3988: Fixed SolrTestCaseJ4.adoc(SolrInputDocument) to respect
  field and document boosts (hossman)

* SOLR-3981: Fixed bug that resulted in document boosts being compounded in
  <copyField/> destination fields. (hossman)

* SOLR-3920: Fix server list caching in CloudSolrServer when using more than one
  collection list with the same instance. (Grzegorz Sobczyk, Mark Miller)

* SOLR-3938: prepareCommit command omits commitData causing a failure to trigger
  replication to slaves. (yonik)

* SOLR-3992: QuerySenderListener doesn't populate document cache.
  (Shotaro Kamio, yonik)

* SOLR-3995: Recovery may never finish on SolrCore shutdown if the last reference to
  a SolrCore is closed by the recovery process. (Mark Miller)

* SOLR-3998: Atomic update on uniqueKey field itself causes duplicate document.
  (Eric Spencer, yonik)

* SOLR-4001: In CachingDirectoryFactory#close, if there are still refs for a
  Directory outstanding, we need to wait for them to be released before closing.
  (Mark Miller)

* SOLR-4005: If CoreContainer fails to register a created core, it should close it.
  (Mark Miller)

* SOLR-4009: OverseerCollectionProcessor is not resilient to many error conditions
  and can stop running on errors. (Raintung Li, milesli, Mark Miller)

* SOLR-4019: Log stack traces for 503/Service Unavailable SolrException if not
  thrown by PingRequestHandler. Do not log exceptions if a user tries to view a
  hidden file using ShowFileRequestHandler.  (Tomás Fernández Löbbe via James Dyer)

* SOLR-3589: Edismax parser does not honor mm parameter if analyzer splits a token.
  (Tom Burton-West, Robert Muir)

* SOLR-4031: Upgrade to Jetty 8.1.7 to fix a bug where in very rare occasions
  the content of two concurrent requests get mixed up. (Per Steffensen, yonik)

* SOLR-4060: ReplicationHandler can try and do a snappull and open a new IndexWriter
  after shutdown has already occurred, leaving an IndexWriter that is not closed.
  (Mark Miller)

* SOLR-4055: Fix a thread safety issue with the Collections API that could
  cause actions to be targeted at the wrong SolrCores.
  (Raintung Li, Per Steffensen via Mark Miller)

* SOLR-3993: If multiple SolrCore's for a shard coexist on a node, on cluster
  restart, leader election would stall until timeout, waiting to see all of
  the replicas come up. (Mark Miller, Alexey Kudinov)

* SOLR-2045: Databases that require a commit to be issued before closing the
  connection on a non-read-only database leak connections.  Also expanded the
  SqlEntityProcessor test to sometimes use Derby as well as HSQLDB (Derby is
  one db affected by this bug).  (Fenlor Sebastia, James Dyer)

* SOLR-4064: When there is an unexpected exception while trying to run the new
  leader process, the SolrCore will not correctly rejoin the election.
  (Po Rui via Mark Miller)

* SOLR-3989: SolrZkClient constructor dropped exception cause when throwing
  a new RuntimeException. (Colin Bartolome, yonik)

* SOLR-4036: field aliases in fl should not cause properties of target field
  to be used. (Martin Koch, yonik)

* SOLR-4003: The SolrZKClient clean method should not try and clear zk paths
  that start with /zookeeper, as this can fail and stop the removal of
  further nodes. (Mark Miller)

* SOLR-4076: SolrQueryParser should run fuzzy terms through
  MultiTermAwareComponents to ensure that (for example) a fuzzy query of
  foobar~2 is equivalent to FooBar~2 on a field that includes lowercasing.
  (yonik)

* SOLR-4081: QueryParsing.toString, used during debugQuery=true, did not
  correctly handle ExtendedQueries such as WrappedQuery
  (used when cache=false), spatial queries, and frange queries.
  (Eirik Lygre, yonik)

* SOLR-3959: Ensure the internal comma separator of poly fields is escaped
  for CSVResponseWriter.  (Areek Zillur via Robert Muir)

* SOLR-4075: A logical shard that has had all of its SolrCores unloaded should
  be removed from the cluster state. (Mark Miller, Gilles Comeau)

* SOLR-4034: Check if a collection already exists before trying to create a
  new one. (Po Rui, Mark Miller)

* SOLR-4097: Race can cause NPE in logging line on first cluster state update.
  (Mark Miller)

* SOLR-4099: Allow the collection api work queue to make forward progress even
  when its watcher is not fired for some reason. (Raintung Li via Mark Miller)

* SOLR-3960: Fixed a bug where Distributed Grouping ignored PostFilters
  (Nathan Visagan, hossman)

* SOLR-3842: DIH would not populate multivalued fields if the column name
  derives from a resolved variable (James Dyer)

* SOLR-4117: Retrieving the size of the index may use the wrong index dir if
  you are replicating.
  (Mark Miller, Markus Jelsma)

* SOLR-2890: Fixed a bug that prevented omitNorms and omitTermFreqAndPositions
  options from being respected in some <fieldType/> declarations (hossman)

* SOLR-4159: When we are starting a shard from rest, a potential leader should
  not consider its last published state when deciding if it can be the new
  leader. (Mark Miller)

* SOLR-4158: When a core is registering in ZooKeeper it may not wait long
  enough to find the leader due to how long the potential leader waits to see
  replicas. (Mark Miller, Alain Rogister)

* SOLR-4162: ZkCli usage examples are not correct because the zkhost parameter
  is not present and it is mandatory for all commands.
  (Tomás Fernández Löbbe via Mark Miller)

* SOLR-4071: Validate that name is pass to Collections API create, and behave the
  same way as on startup when collection.configName is not explicitly passed.
  (Po Rui, Mark Miller)

* SOLR-4127: Added explicit error message if users attempt Atomic document
  updates with either updateLog or DistribUpdateProcessor. (hossman)

* SOLR-4136: Fix SolrCloud behavior when using "hostContext" containing "_"
  or"/" characters.  This fix also makes SolrCloud more accepting of
  hostContext values with leading/trailing slashes. (hossman)

* SOLR-4168: Ensure we are using the absolute latest index dir when getting
  list of files for replication. (Mark Miller)

* SOLR-4171: CachingDirectoryFactory should not return any directories after it
  has been closed. (Mark Miller)

* SOLR-4102: Fix UI javascript error if canonical hostname can not be resolved
  (steffkes via hossman)

* SOLR-4178: ReplicationHandler should abort any current pulls and wait for
  its executor to stop during core close. (Mark Miller)

* SOLR-3918: Fixed the 'dist-war-excl-slf4j' ant target to exclude all
  slf4j jars, so that the resulting war is usable as is provided the servlet
  container includes the correct slf4j api and impl jars.
  (Shawn Heisey, hossman)

* SOLR-4198: OverseerCollectionProcessor should implement ClosableThread.
  (Mark Miller)

* SOLR-4213: Directories that are not shutdown until DirectoryFactory#close
  do not have close listeners called on them. (Mark Miller)

* SOLR-4134: Standard (XML) request writer cannot "set" multiple values into
  multivalued field with partial updates. (Luis Cappa Banda, Will Butler, shalin)

* SOLR-3972: Fix ShowFileRequestHandler to not log a warning in the
  (expected) situation of a file not found.  (hossman)

* SOLR-4133: Cannot "set" field to null with partial updates when using the
  standard RequestWriter. (Will Butler, shalin)

* SOLR-4223: "maxFormContentSize" in jetty.xml is not picked up by jetty 8
  so set it via solr webapp context file. (shalin)

* SOLR-4175:SearchComponent chain can't contain two components of the
  same class and use debugQuery. (Tomás Fernández Löbbe via ehatcher)

* SOLR-4244: When coming back from session expiration we should not wait for
  the leader to see us in the down state if we are the node that must become
  the leader. (Mark Miller)

* SOLR-4245: When a core is registering with ZooKeeper, the timeout to find the
  leader in the cluster state is 30 seconds rather than leaderVoteWait + extra
  time. (Mark Miller)

* SOLR-4238: Fix jetty example requestLog config (jm via hossman)

* SOLR-4251: Fix SynonymFilterFactory when an optional tokenizerFactory is supplied.
  (Chris Bleakley via rmuir)

* SOLR-4253: Misleading resource loading warning from Carrot2 clustering
  component fixed (Stanisław Osiński)

* SOLR-4257: PeerSync updates and Log Replay updates should not wait for
  a ZooKeeper connection in order to proceed. (yonik)

* SOLR-4045: SOLR admin page returns HTTP 404 on core names containing
  a '.' (dot) (steffkes)

* SOLR-4176: analysis ui: javascript not properly handling URL decoding
  of input (steffkes)

* SOLR-4079: Long core names break web gui appearance and functionality
  (steffkes)

* SOLR-4263: Incorrect Link from Schema-Browser to Query From for Top-Terms
  (steffkes)

* SOLR-3829: Admin UI Logging events broken if schema.xml defines a catch-all
  dynamicField with type ignored (steffkes)

* SOLR-4275: Fix TrieTokenizer to no longer throw StringIndexOutOfBoundsException
  in admin UI / AnalysisRequestHandler when you enter no number to tokenize.
  (Uwe Schindler)

* SOLR-4279: Wrong exception message if _version_ field is multivalued (shalin)

* SOLR-4170: The 'backup' ReplicationHandler command can sometimes use a stale
  index directory rather than the current one. (Mark Miller, Marcin Rzewucki)

* SOLR-3876: Solr Admin UI is completely dysfunctional on IE 9 (steffkes)

* SOLR-4112: Fixed DataImportHandler ZKAwarePropertiesWriter implementation so
  import works fine with SolrCloud clusters (Deniz Durmus, James Dyer,
  Erick Erickson, shalin)

* SOLR-4291: Harden the Overseer work queue thread loop. (Mark Miller)

* SOLR-3820: Solr Admin Query form is missing some edismax request parameters
  (steffkes)

* SOLR-4217: post.jar no longer ignores -Dparams when -Durl is used.
  (Alexandre Rafalovitch, ehatcher)

* SOLR-4303: On replication, if the generation of the master is lower than the
  slave we need to force a full copy of the index. (Mark Miller, Gregg Donovan)

* SOLR-4266: HttpSolrServer does not release connection properly on exception
  when no response parser is used. (Steve Molloy via Mark Miller)

* SOLR-2298: Updated JavaDoc for SolrDocument.addField and SolrInputDocument.addField
  to have more information on name and value parameters. (Siva Natarajan)

Other Changes
----------------------

* SOLR-4106: Javac/ ivy path warnings with morfologik fixed by
  upgrading to Morfologik 1.5.5 (Robert Muir, Dawid Weiss)

* SOLR-3899: SolrCore should not log at warning level when the index directory
  changes - it's an info event. (Tobias Bergman, Mark Miller)

* SOLR-3861: Refactor SolrCoreState so that it's managed by SolrCore.
  (Mark Miller, hossman)

* SOLR-3966: Eliminate superfluous warning from LanguageIdentifierUpdateProcessor
  (Markus Jelsma via hossman)

* SOLR-3932: SolrCmdDistributorTest either takes 3 seconds or 3 minutes.
  (yonik, Mark Miller)

* SOLR-3856: New tests for SqlEntityProcessor/CachedSqlEntityProcessor
  (James Dyer)

* SOLR-4067: ZkStateReader#getLeaderProps should not return props for a leader
  that it does not think is live. (Mark Miller)

* SOLR-4086: DIH refactor of VariableResolver and Evaluator.  VariableResolver
  and each built-in Evaluator are separate concrete classes.  DateFormatEvaluator
  now defaults with the ROOT Locale. However, users may specify a different
  Locale using an optional new third parameter. (James Dyer)

* SOLR-3602: Update ZooKeeper to 3.4.5 (Mark Miller)

* SOLR-4095: DIH NumberFormatTransformer & DateFormatTransformer default to the
  ROOT Locale if none is specified.  These previously used the machine's default.
  (James Dyer)

* SOLR-4096: DIH FileDataSource & FieldReaderDataSource default to UTF-8 encoding
  if none is specified.  These previously used the machine's default.
  (James Dyer)

* SOLR-1916: DIH to not use Lucene-forbidden Java APIs
  (default encoding, locale, etc.) (James Dyer, Robert Muir)

* SOLR-4111: SpellCheckCollatorTest#testContextSensitiveCollate to test against
  both DirectSolrSpellChecker & IndexBasedSpellChecker
  (Tomás Fernández Löbbe via James Dyer)

* SOLR-2141: Better test coverage for Evaluators (James Dyer)

* SOLR-4119: Update Guava to 13.0.1 (Mark Miller)

* SOLR-4074: Raise default ramBufferSizeMB to 100 from 32.
  (yonik, Mark Miller)

* SOLR-4062: The update log location in solrconfig.xml should default to
  ${solr.ulog.dir} rather than ${solr.data.dir:} (Mark Miller)

* SOLR-4155: Upgrade Jetty to 8.1.8. (Robert Muir)

* SOLR-2986: Add MoreLikeThis to warning about features that require uniqueKey.
  Also, change the warning to warn log level. (Shawn Heisey via Mark Miller)

* SOLR-4163: README improvements (Shawn Heisey via hossman)

* SOLR-4248: "ant eclipse" should declare .svn directories as derived.
  (Shawn Heisey via Mark Miller)

* SOLR-3279: Upgrade Carrot2 to 3.6.2 (Stanisław Osiński)

* SOLR-4254: Harden the 'leader requests replica to recover' code path.
  (Mark Miller, yonik)

* SOLR-4226: Extract fl parsing code out of ReturnFields constructor.
  (Ryan Ernst via Robert Muir)

* SOLR-4208: ExtendedDismaxQParserPlugin has been refactored to make
  subclassing easier. (Tomás Fernández Löbbe, hossman)

* SOLR-3735: Relocate the example mime-to-extension mapping, and
  upgrade Velocity Engine to 1.7 (ehatcher)

* SOLR-4287: Removed "apache-" prefix from Solr distribution and artifact
  filenames. (Ryan Ernst, Robert Muir, Steve Rowe)

* SOLR-4016: Deduplication does not work with atomic/partial updates so
  disallow atomic update requests which change signature generating fields.
  (Joel Nothman, yonik, shalin)

* SOLR-4308: Remove the problematic and now unnecessary log4j-over-slf4j.
  (Mark Miller)

==================  4.0.0 ==================

Versions of Major Components
---------------------
Apache Tika 1.2
Carrot2 3.5.0
Velocity 1.6.4 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.3.6

Upgrading from Solr 4.0.0-BETA
----------------------

In order to better support distributed search mode, the TermVectorComponent's
response format has been changed so that if the schema defines a
uniqueKeyField, then that field value is used as the "key" for each document in
its response section, instead of the internal lucene doc id.  Users w/o a
uniqueKeyField will continue to see the same response format.  See SOLR-3229
for more details.

If you are using SolrCloud's distributed update request capabilities and a non
string type id field, you must re-index.

Upgrading from Solr 4.0.0-ALPHA
----------------------

Solr is now much more strict about requiring that the uniqueKeyField feature
(if used) must refer to a field which is not multiValued.  If you upgrade from
an earlier version of Solr and see an error that your uniqueKeyField "can not
be configured to be multivalued" please add 'multiValued="false"' to the
<field /> declaration for your uniqueKeyField.  See SOLR-3682 for more details.

In addition, please review the notes above about upgrading from 4.0.0-BETA

Upgrading from Solr 3.6
----------------------

* The Lucene index format has changed and as a result, once you upgrade,
  previous versions of Solr will no longer be able to read your indices.
  In a master/slave configuration, all searchers/slaves should be upgraded
  before the master.  If the master were to be updated first, the older
  searchers would not be able to read the new index format.

* Setting abortOnConfigurationError=false is no longer supported
  (since it has never worked properly).  Solr will now warn you if
  you attempt to set this configuration option at all. (see SOLR-1846)

* The default logic for the 'mm' param of the 'dismax' QParser has
  been changed.  If no 'mm' param is specified (either in the query,
  or as a default in solrconfig.xml) then the effective value of the
  'q.op' param (either in the query or as a default in solrconfig.xml
  or from the 'defaultOperator' option in schema.xml) is used to
  influence the behavior.  If q.op is effectively "AND" then mm=100%.
  If q.op is effectively "OR" then mm=0%.  Users who wish to force the
  legacy behavior should set a default value for the 'mm' param in
  their solrconfig.xml file.

* The VelocityResponseWriter is no longer built into the core.  Its JAR and
  dependencies now need to be added (via <lib> or solr/home lib inclusion),
  and it needs to be registered in solrconfig.xml like this:
    <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter"/>

* The update request parameter to choose Update Request Processor Chain is
  renamed from "update.processor" to "update.chain". The old parameter was
  deprecated but still working since Solr3.2, but is now removed
  entirely.

* The <indexDefaults> and <mainIndex> sections of solrconfig.xml are discontinued
  and replaced with the <indexConfig> section. There are also better defaults.
  When migrating, if you don't know what your old settings mean, simply delete
  both <indexDefaults> and <mainIndex> sections. If you have customizations,
  put them in <indexConfig> section - with same syntax as before.

* Two of the SolrServer subclasses in SolrJ were renamed/replaced.
  CommonsHttpSolrServer is now HttpSolrServer, and
  StreamingUpdateSolrServer is now ConcurrentUpdateSolrServer.

* The PingRequestHandler no longer looks for a <healthcheck/> option in the
  (legacy) <admin> section of solrconfig.xml.  Users who wish to take
  advantage of this feature should configure a "healthcheckFile" init param
  directly on the  PingRequestHandler.  As part of this change, relative file
  paths have been fixed to be resolved against the data dir.  See the example
  solrconfig.xml and SOLR-1258 for more details.

* Due to low level changes to support SolrCloud, the uniqueKey field can no
  longer be populated via <copyField/> or <field default=...> in the
  schema.xml.  Users wishing to have Solr automatically generate a uniqueKey
  value when adding documents should instead use an instance of
  solr.UUIDUpdateProcessorFactory in their update processor chain.  See
  SOLR-2796 for more details.

In addition, please review the notes above about upgrading from 4.0.0-BETA, and 4.0.0-ALPHA

Detailed Change List
----------------------

New Features
----------------------

* SOLR-3670: New CountFieldValuesUpdateProcessorFactory makes it easy to index
  the number of values in another field for later use at query time. (hossman)

* SOLR-2768: new "mod(x,y)" function for computing the modulus of two value
  sources. (hossman)

* SOLR-3238: Numerous small improvements to the Admin UI (steffkes)

* SOLR-3597: seems like a lot of wasted whitespace at the top of the admin screens
  (steffkes)

* SOLR-3304: Added Solr adapters for Lucene 4's new spatial module.  With
  SpatialRecursivePrefixTreeFieldType ("location_rpt" in example schema), it is
  possible to index a variable number of points per document (and sort on them),
  index not just points but any Spatial4j supported shape such as polygons, and
  to query on these shapes too.  Polygons requires adding JTS to the classpath.
  (David Smiley)

* SOLR-3825: Added optional capability to log what ids are in a response
        (Scott Stults via gsingers)

* SOLR-3821: Added 'df' to the UI Query form (steffkes)

* SOLR-3822: Added hover titles to the edismax params on the UI Query form
  (steffkes)

Optimizations
----------------------

* SOLR-3715: improve concurrency of the transaction log by removing
  synchronization around log record serialization. (yonik)

* SOLR-3807: Currently during recovery we pause for a number of seconds after
  waiting for the leader to see a recovering state so that any previous updates
  will have finished before our commit on the leader - we don't need this wait
  for peersync. (Mark Miller)

* SOLR-3837: When a leader is elected and asks replicas to sync back to him and
  that fails, we should ask those nodes to recovery asynchronously rather than
  synchronously. (Mark Miller)

* SOLR-3709: Cache the url list created from the ClusterState in CloudSolrServer
  on each request. (Mark Miller)


Bug Fixes
----------------------

* SOLR-3685: Solr Cloud sometimes skipped peersync attempt and replicated instead due
  to tlog flags not being cleared when no updates were buffered during a previous
  replication.  (Markus Jelsma, Mark Miller, yonik)

* SOLR-3229: Fixed TermVectorComponent to work with distributed search
  (Hang Xie, hossman)

* SOLR-3725: Fixed package-local-src-tgz target to not bring in unnecessary jars
  and binary contents.  (Michael Dodsworth via rmuir)

* SOLR-3649: Fixed bug in JavabinLoader that caused deleteById(List<String> ids)
  to not work in SolrJ (siren)

* SOLR-3730: Rollback is not implemented quite right and can cause corner case fails in
  SolrCloud tests. (rmuir, Mark Miller)

* SOLR-2981: Fixed StatsComponent to no longer return duplicated information
  when requesting multiple stats.facet fields.
  (Roman Kliewer via hossman)

* SOLR-3743: Fixed issues with atomic updates and optimistic concurrency in
  conjunction with stored copyField targets by making real-time get never
  return copyField targets. (yonik)

* SOLR-3746: Proper error reporting if updateLog is configured w/o necessary
  "_version_" field in schema.xml (hossman)

* SOLR-3745: Proper error reporting if SolrCloud mode is used w/o
  necessary "_version_" field in schema.xml (hossman)

* SOLR-3770: Overseer may lose updates to cluster state (siren)

* SOLR-3721: Fix bug that could theoretically allow multiple recoveries to run
  briefly at the same time if the recovery thread join call was interrupted.
  (Per Steffensen, Mark Miller)

* SOLR-3782: A leader going down while updates are coming in can cause shard
  inconsistency. (Mark Miller)

* SOLR-3611: We do not show ZooKeeper data in the UI for a node that has children.
  (Mark Miller)

* SOLR-3789: Fix bug in SnapPuller that caused "internal" compression to fail.
  (siren)

* SOLR-3790: ConcurrentModificationException could be thrown when using hl.fl=*.
  Fixed in r1231606. (yonik, koji)

* SOLR-3668: DataImport : Specifying Custom Parameters (steffkes)

* SOLR-3793: UnInvertedField faceting cached big terms in the filter
  cache that ignored deletions, leading to duplicate documents in search
  later when a filter of the same term was specified.
  (Günter Hipler, hossman, yonik)

* SOLR-3679: Core Admin UI gives no feedback if "Add Core" fails (steffkes, hossman)

* SOLR-3795: Fixed LukeRequestHandler response to correctly return field name
  strings in copyDests and copySources arrays (hossman)

* SOLR-3699: Fixed some Directory leaks when there were errors during SolrCore
  or SolrIndexWriter initialization. (hossman)

* SOLR-3518: Include final 'hits' in log information when aggregating a
  distributed request (Markus Jelsma via hossman)

* SOLR-3628: SolrInputField and SolrInputDocument are now consistently backed
  by Collections passed in to setValue/setField, and defensively copy values
  from Collections passed to addValue/addField
  (Tom Switzer via hossman)

* SOLR-3595: CurrencyField now generates an appropriate error on schema init
  if it is configured as multiValued - this has never been properly supported,
  but previously failed silently in odd ways.  (hossman)

* SOLR-3823: Fix 'bq' parsing in edismax.  Please note that this required
  reverting the negative boost support added by SOLR-3278 (hossman)

* SOLR-3827: Fix shareSchema=true in solr.xml
  (Tomás Fernández Löbbe via hossman)

* SOLR-3809: Fixed config file replication when subdirectories are used
  (Emmanuel Espina via hossman)

* SOLR-3828: Fixed QueryElevationComponent so that using 'markExcludes' does
  not modify the result set or ranking of 'excluded' documents relative to
  not using elevation at all.  (Alexey Serba via hossman)

* SOLR-3569: Fixed debug output on distributed requests when there are no
  results found.  (David Bowen via hossman)

* SOLR-3811: Query Form using wrong values for dismax, edismax (steffkes)

* SOLR-3779: DataImportHandler's LineEntityProcessor when used in conjunction
  with FileListEntityProcessor would only process the first file.
  (Ahmet Arslan via James Dyer)

* SOLR-3791: CachedSqlEntityProcessor would throw a NullPointerException when
  a query returns a row with a NULL key.  (Steffen Moelter via James Dyer)

* SOLR-3833: When a election is started because a leader went down, the new
  leader candidate should decline if the last state they published was not
  active. (yonik, Mark Miller)

* SOLR-3836: When doing peer sync, we should only count sync attempts that
  cannot reach the given host as success when the candidate leader is
  syncing with the replicas - not when replicas are syncing to the leader.
  (Mark Miller)

* SOLR-3835: In our leader election algorithm, if on connection loss we found
  we did not create our election node, we should retry, not throw an exception.
  (Mark Miller)

* SOLR-3834: A new leader on cluster startup should also run the leader sync
  process in case there was a bad cluster shutdown. (Mark Miller)

* SOLR-3772: On cluster startup, we should wait until we see all registered
  replicas before running the leader process - or if they all do not come up,
  N amount of time. (Mark Miller)

* SOLR-3756: If we are elected the leader of a shard, but we fail to publish
  this for any reason, we should clean up and re trigger a leader election.
  (Mark Miller)

* SOLR-3812: ConnectionLoss during recovery can cause lost updates, leading to
  shard inconsistency. (Mark Miller)

* SOLR-3813: When a new leader syncs, we need to ask all shards to sync back,
  not just those that are active. (Mark Miller)

* SOLR-3641: CoreContainer is not persisting roles core attribute.
  (hossman, Mark Miller)

* SOLR-3527: SolrCmdDistributor drops some of the important commit attributes
  (maxOptimizeSegments, softCommit, expungeDeletes) when sending a commit to
  replicas. (Andy Laird, Tomás Fernández Löbbe, Mark Miller)

* SOLR-3844: SolrCore reload can fail because it tries to remove the index
  write lock while already holding it. (Mark Miller)

* SOLR-3831: Atomic updates do not distribute correctly to other nodes.
  (Jim Musil, Mark Miller)

* SOLR-3465: Replication causes two searcher warmups.
  (Michael Garski, Mark Miller)

* SOLR-3645: /terms should default to distrib=false. (Nick Cotton, Mark Miller)

* SOLR-3759: Various fixes to the example-DIH configs (Ahmet Arslan, hossman)

* SOLR-3777: Dataimport-UI does not send unchecked checkboxes (Glenn MacStravic
  via steffkes)

* SOLR-3850: DataImportHandler "cacheKey" parameter was incorrectly renamed "cachePk"
  (James Dyer)

* SOLR-3087: Fixed DOMUtil so that code doing attribute validation will
  automatically ignore nodes in the reserved "xml" prefix - in particular this
  fixes some bugs related to xinclude and fieldTypes.
  (Amit Nithian, hossman)

* SOLR-3783: Fixed Pivot Faceting to work with facet.missing=true (hossman)

* SOLR-3869: A PeerSync attempt to its replicas by a candidate leader should
  not fail on o.a.http.conn.ConnectTimeoutException. (Mark Miller)

* SOLR-3875: Fixed index boosts on multi-valued fields when docBoost is used
  (hossman)

* SOLR-3878: Exception when using open-ended range query with CurrencyField (janhoy)

* SOLR-3891: CacheValue in CachingDirectoryFactory cannot be used outside of
  solr.core package. (phunt via Mark Miller)

* SOLR-3892: Inconsistent locking when accessing cache in CachingDirectoryFactory
  from RAMDirectoryFactory and MockDirectoryFactory. (phunt via Mark Miller)

* SOLR-3883: Distributed indexing forwards non-applicable request params.
  (Dan Sutton, Per Steffensen, yonik, Mark Miller)

* SOLR-3903: Fixed MissingFormatArgumentException in ConcurrentUpdateSolrServer
  (hossman)

* SOLR-3916: Fixed whitespace bug in parsing the fl param (hossman)

Other Changes
----------------------

* SOLR-3690: Fixed binary release packages to include dependencies needed for
  the solr-test-framework (hossman)

* SOLR-2857: The /update/json and /update/csv URLs were restored to aid
  in the migration of existing clients.  (yonik)

* SOLR-3691: SimplePostTool: Mode for crawling/posting web pages
  See https://lucene.apache.org/solr/guide/post-tool.html for examples (janhoy)

* SOLR-3707: Upgrade Solr to Tika 1.2 (janhoy)

* SOLR-2747: Updated changes2html.pl to handle Solr's CHANGES.txt; added
  target 'changes-to-html' to solr/build.xml.
  (Steve Rowe, Robert Muir)

* SOLR-3752: When a leader goes down, have the Overseer clear the leader state
  in cluster.json (Mark Miller)

* SOLR-3751: Add defensive checks for SolrCloud updates and requests that ensure
  the local state matches what we can tell the request expected. (Mark Miller)

* SOLR-3773: Hash based on the external String id rather than the indexed
  representation for distributed updates. (Michael Garski, yonik, Mark Miller)

* SOLR-3780: Maven build: Make solrj tests run separately from solr-core.
  (Steve Rowe)

* SOLR-3772: Optionally, on cluster startup, we can wait until we see all registered
  replicas before running the leader process - or if they all do not come up,
  N amount of time. (Jan Høydahl, Per Steffensen, Mark Miller)

* SOLR-3750: Optionally, on session expiration, we can explicitly wait some time before
  running the leader sync process so that we are sure every node participates.
  (Per Steffensen, Mark Miller)

* SOLR-3824: Velocity: Error messages from search not displayed (janhoy)

* SOLR-3826: Test framework improvements for specifying coreName on initCore
  (Amit Nithian, hossman)

* SOLR-3749: Allow default UpdateLog syncLevel to be configured by
  solrconfig.xml (Raintung Li, Mark Miller)

* SOLR-3845: Rename numReplicas to replicationFactor in Collections API.
  (yonik, Mark Miller)

* SOLR-3815: SolrCloud - Add properties such as "range" to shards, which changes
  the clusterstate.json and puts the shard replicas under "replicas". (yonik)

* SOLR-3871: SyncStrategy should use an executor for the threads it creates to
  request recoveries. (Mark Miller)

* SOLR-3870: SyncStrategy should have a close so it can abort earlier on
  shutdown. (Mark Miller)


==================  4.0.0-BETA ===================


Versions of Major Components
---------------------
Apache Tika 1.1
Carrot2 3.5.0
Velocity 1.6.4 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.3.6

Upgrading from Solr 4.0.0-ALPHA
----------------------

Solr is now much more strict about requiring that the uniqueKeyField feature
(if used) must refer to a field which is not multiValued.  If you upgrade from
an earlier version of Solr and see an error that your uniqueKeyField "can not
be configured to be multivalued" please add 'multiValued="false"' to the
<field /> declaration for your uniqueKeyField.  See SOLR-3682 for more details.

Detailed Change List
----------------------

New Features
----------------------

* LUCENE-4201: Added JapaneseIterationMarkCharFilterFactory to normalize Japanese
  iteration marks. (Robert Muir, Christian Moen)

* SOLR-1856: In Solr Cell, literals should override Tika-parsed values.
  Patch adds a param "literalsOverride" which defaults to true, but can be set
  to "false" to let Tika-parsed values be appended to literal values (Chris Harris, janhoy)

* SOLR-3488: Added a Collection management API for SolrCloud.
  (Tommaso Teofili, Sami Siren, yonik, Mark Miller)

* SOLR-3559: Full deleteByQuery support with SolrCloud distributed indexing.
  All replicas of a shard will be consistent, even if updates arrive in a
  different order on different replicas.  (yonik)

* SOLR-1929: Index encrypted documents with ExtractingUpdateRequestHandler.
  By supplying resource.password=<mypw> or specifying an external file with regular
  expressions matching file names, Solr will decrypt and index PDFs and DOCX formats.
  (janhoy, Yiannis Pericleous)

* SOLR-3562: Add options to remove instance dir or data dir on core unload.
  (Mark Miller, Per Steffensen)

* SOLR-2702: The default directory factory was changed to NRTCachingDirectoryFactory
  which wraps the StandardDirectoryFactory and caches small files for improved
  Near Real-time (NRT) performance. (Mark Miller, yonik)

* SOLR-2616: Include a sample java util logging configuration file.
  (David Smiley, Mark Miller)

* SOLR-3460: Add cloud-scripts directory and a zkcli.sh|bat tool for easy scripting
  and interaction with ZooKeeper. (Mark Miller)

* SOLR-1725: StatelessScriptUpdateProcessorFactory allows users to implement
  the full ScriptUpdateProcessor API using any scripting language with a
  javax.script.ScriptEngineFactory
  (Uri Boness, ehatcher, Simon Rosenthal, hossman)

* SOLR-139: Change to updateable documents to create the document if it doesn't
  already exist.  To assert that the document must exist, use the optimistic
  concurrency feature by specifying a _version_ of 1.  (yonik)

* LUCENE-2510, LUCENE-4044: Migrated Solr's Tokenizer-, TokenFilter-, and
  CharFilterFactories to the lucene-analysis module. To add new analysis
  modules to Solr (like ICU, SmartChinese, Morfologik,...), just drop in
  the JAR files from Lucene's binary distribution into your Solr instance's
  lib folder. The factories are automatically made available with SPI.
  (Chris Male, Robert Muir, Uwe Schindler)

* SOLR-3634, SOLR-3635: CoreContainer and CoreAdminHandler will now remember
  and report back information about failures to initialize SolrCores.  These
  failures will be accessible from the web UI and CoreAdminHandler STATUS
  command until they are "reset" by creating/renaming a SolrCore with the
  same name.  (hossman, steffkes)

* SOLR-1280: Added commented-out example of the new script update processor
  to the example configuration. (ehatcher)

* SOLR-3672: SimplePostTool: Improvements for posting files
  Support for auto mode, recursive and wildcards (janhoy)

Optimizations
----------------------

* SOLR-3708: Add hashCode to ClusterState so that structures built based on the
  ClusterState can be easily cached. (Mark Miller)

* SOLR-3709: Cache the url list created from the ClusterState in CloudSolrServer on each
  request. (Mark Miller, yonik)

* SOLR-3710: Change CloudSolrServer so that update requests are only sent to leaders by
  default. (Mark Miller)

Bug Fixes
----------------------

* SOLR-3582: Our ZooKeeper watchers respond to session events as if they are change events,
  creating undesirable side effects. (Trym R. Møller, Mark Miller)

* SOLR-3467: ExtendedDismax escaping is missing several reserved characters
  (Michael Dodsworth via janhoy)

* SOLR-3587: After reloading a SolrCore, the original Analyzer is still used rather than a new
  one. (Alexey Serba, yonik, rmuir, Mark Miller)

* LUCENE-4185: Fix a bug where CharFilters were wrongly being applied twice. (Michael Froh, rmuir)

* SOLR-3610: After reloading a core, indexing would fail on any newly added fields to the schema. (Brent Mills, rmuir)

* SOLR-3377: edismax fails to correctly parse a fielded query wrapped by parens.
  This regression was introduced in 3.6.  (Bernd Fehling, Jan Høydahl, yonik)

* SOLR-3621: Fix rare concurrency issue when opening a new IndexWriter for replication or rollback.
  (Mark Miller)

* SOLR-1781: Replication index directories not always cleaned up.
  (Markus Jelsma, Terje Sten Bjerkseth, Mark Miller)

* SOLR-3639: Update ZooKeeper to 3.3.6 for a variety of bug fixes. (Mark Miller)

* SOLR-3629: Typo in solr.xml persistence when overriding the solrconfig.xml
  file name using the "config" attribute prevented the override file from being
  used. (Ryan Zezeski, hossman)

* SOLR-3642: Correct broken check for multivalued fields in stats.facet
  (Yandong Yao, hossman)

* SOLR-3660: Velocity: Link to admin page broken (janhoy)

* SOLR-3658: Adding thousands of docs with one UpdateProcessorChain instance can briefly create
  spikes of threads in the thousands. (yonik, Mark Miller)

* SOLR-3656: A core reload now always uses the same dataDir.  (Mark Miller, yonik)

* SOLR-3662: Core reload bugs: a reload always obtained a non-NRT searcher, which
  could go back in time with respect to the previous core's NRT searcher.  Versioning
  did not work correctly across a core reload, and update handler synchronization
  was changed to synchronize on core state since more than on update handler
  can coexist for a single index during a reload. (yonik)

* SOLR-3663: There are a couple of bugs in the sync process when a leader goes down and a
  new leader is elected. (Mark Miller)

* SOLR-3623: Fixed inconsistent treatment of third-party dependencies for
  solr contribs analysis-extras & uima (hossman)

* SOLR-3652: Fixed range faceting to error instead of looping infinitely
  when 'gap' is zero -- or effectively zero due to floating point arithmetic
  underflow. (hossman)

* SOLR-3648: Fixed VelocityResponseWriter template loading in SolrCloud mode.
  For the example configuration, this means /browse now works with SolrCloud.
  (janhoy, ehatcher)

* SOLR-3677: Fixed misleading error message in web ui to distinguish between
  no SolrCores loaded vs. no /admin/ handler available.
  (hossman, steffkes)

* SOLR-3428: SolrCmdDistributor flushAdds/flushDeletes can cause repeated
  adds/deletes to be sent (Mark Miller, Per Steffensen)

* SOLR-3647: DistributedQueue should use our Solr zk client rather than the std zk
  client. ZooKeeper expiration can be permanent otherwise. (Mark Miller)

Other Changes
----------------------

* SOLR-3524: Make discarding punctuation configurable in JapaneseTokenizerFactory.
  The default is to discard punctuation, but this is overridable as an expert option.
  (Kazuaki Hiraga, Jun Ohtani via Christian Moen)

* SOLR-1770: Move the default core instance directory into a collection1 folder.
  (Mark Miller)

* SOLR-3355: Add shard and collection to SolrCore statistics. (Michael Garski, Mark Miller)

* SOLR-3575: solr.xml should default to persist=true (Mark Miller)

* SOLR-3563: Unloading all cores in a SolrCloud collection will now cause the removal of
  that collection's meta data from ZooKeeper. (Mark Miller, Per Steffensen)

* SOLR-3599: Add zkClientTimeout to solr.xml so that it's obvious how to change it and so
  that you can change it with a system property. (Mark Miller)

* SOLR-3609: Change Solr's expanded webapp directory to be at a consistent path called
  solr-webapp rather than a temporary directory. (Mark Miller)

* SOLR-3600: Raise the default zkClientTimeout from 10 seconds to 15 seconds. (Mark Miller)

* SOLR-3215: Clone SolrInputDocument when distrib indexing so that update processors after
  the distrib update process do not process the document twice. (Mark Miller)

* SOLR-3683: Improved error handling if an <analyzer> contains both an
  explicit class attribute, as well as nested factories. (hossman)

* SOLR-3682: Fail to parse schema.xml if uniqueKeyField is multivalued (hossman)

* SOLR-2115: DIH no longer requires the "config" parameter to be specified in solrconfig.xml.
  Instead, the configuration is loaded and parsed with every import.  This allows the use of
  a different configuration with each import, and makes correcting configuration errors simpler.
  Also, the configuration itself can be passed using the "dataConfig" parameter rather than
  using a file (this previously worked in debug mode only).  When configuration errors are
  encountered, the error message is returned in XML format.  (James Dyer)

* SOLR-3439: Make SolrCell easier to use out of the box. Also improves "/browse" to display
  rich-text documents correctly, along with facets for author and content_type.
  With the new "content" field, highlighting of body is supported. See also SOLR-3672 for
  easier posting of a whole directory structure. (Jack Krupansky, janhoy)

* SOLR-3579: SolrCloud view should default to the graph view rather than tree view.
  (steffkes, Mark Miller)

==================  4.0.0-ALPHA ==================
More information about this release, including any errata related to the
release notes, upgrade instructions, or other changes may be found online at:
   https://cwiki.apache.org/confluence/display/solr/Solr4.0


Versions of Major Components
---------------------
Apache Tika 1.1
Carrot2 3.5.0
Velocity 1.6.4 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.3.4


Upgrading from Solr 3.6-dev
----------------------

* The Lucene index format has changed and as a result, once you upgrade,
  previous versions of Solr will no longer be able to read your indices.
  In a master/slave configuration, all searchers/slaves should be upgraded
  before the master.  If the master were to be updated first, the older
  searchers would not be able to read the new index format.

* Setting abortOnConfigurationError=false is no longer supported
  (since it has never worked properly).  Solr will now warn you if
  you attempt to set this configuration option at all. (see SOLR-1846)

* The default logic for the 'mm' param of the 'dismax' QParser has
  been changed.  If no 'mm' param is specified (either in the query,
  or as a default in solrconfig.xml) then the effective value of the
  'q.op' param (either in the query or as a default in solrconfig.xml
  or from the 'defaultOperator' option in schema.xml) is used to
  influence the behavior.  If q.op is effectively "AND" then mm=100%.
  If q.op is effectively "OR" then mm=0%.  Users who wish to force the
  legacy behavior should set a default value for the 'mm' param in
  their solrconfig.xml file.

* The VelocityResponseWriter is no longer built into the core.  Its JAR and
  dependencies now need to be added (via <lib> or solr/home lib inclusion),
  and it needs to be registered in solrconfig.xml like this:
    <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter"/>

* The update request parameter to choose Update Request Processor Chain is
  renamed from "update.processor" to "update.chain". The old parameter was
  deprecated but still working since Solr3.2, but is now removed
  entirely.

* The <indexDefaults> and <mainIndex> sections of solrconfig.xml are discontinued
  and replaced with the <indexConfig> section. There are also better defaults.
  When migrating, if you don't know what your old settings mean, simply delete
  both <indexDefaults> and <mainIndex> sections. If you have customizations,
  put them in <indexConfig> section - with same syntax as before.

* Two of the SolrServer subclasses in SolrJ were renamed/replaced.
  CommonsHttpSolrServer is now HttpSolrServer, and
  StreamingUpdateSolrServer is now ConcurrentUpdateSolrServer.

* The PingRequestHandler no longer looks for a <healthcheck/> option in the
  (legacy) <admin> section of solrconfig.xml.  Users who wish to take
  advantage of this feature should configure a "healthcheckFile" init param
  directly on the  PingRequestHandler.  As part of this change, relative file
  paths have been fixed to be resolved against the data dir.  See the example
  solrconfig.xml and SOLR-1258 for more details.

* Due to low level changes to support SolrCloud, the uniqueKey field can no
  longer be populated via <copyField/> or <field default=...> in the
  schema.xml.  Users wishing to have Solr automatically generate a uniqueKey
  value when adding documents should instead use an instance of
  solr.UUIDUpdateProcessorFactory in their update processor chain.  See
  SOLR-2796 for more details.


Detailed Change List
----------------------

New Features
----------------------

* SOLR-3272: Solr filter factory for MorfologikFilter (Polish lemmatisation).
  (Rafał Kuć via Dawid Weiss, Steven Rowe, Uwe Schindler).

* SOLR-571: The autowarmCount for LRUCaches (LRUCache and FastLRUCache) now
  supports "percentages" which get evaluated  relative the current size of
  the cache when warming happens.
  (Tomás Fernández Löbbe and hossman)

* SOLR-1932: New relevancy function queries: termfreq, tf, docfreq, idf
  norm, maxdoc, numdocs. (yonik)

* SOLR-1665: Add debug component options for timings, results and query info only (gsingers, hossman, yonik)

* SOLR-2112: Solrj API now supports streaming results. (ryan)

* SOLR-792: Adding PivotFacetComponent for Hierarchical faceting
  (ehatcher, Jeremy Hinegardner, Thibaut Lassalle, ryan)

* LUCENE-2507, SOLR-2571, SOLR-2576: Added DirectSolrSpellChecker, which uses Lucene's
  DirectSpellChecker to retrieve correction candidates directly from the term dictionary using
  levenshtein automata.  (James Dyer, rmuir)

* SOLR-1873, SOLR-2358: SolrCloud - added shared/central config and core/shard management via zookeeper,
  built-in load balancing, and distributed indexing.
  (Jamie Johnson, Sami Siren, Ted Dunning, yonik, Mark Miller)
  Additional Work:
  - SOLR-2324: SolrCloud solr.xml parameters are not persisted by CoreContainer.
    (Massimo Schiavon, Mark Miller)
  - SOLR-2287: Allow users to query by multiple, compatible collections with SolrCloud.
    (Soheb Mahmood, Alex Cowell, Mark Miller)
  - SOLR-2622: ShowFileRequestHandler does not work in SolrCloud mode.
    (Stefan Matheis, Mark Miller)
  - SOLR-3108: Error in SolrCloud's replica lookup code when replica's are hosted in same Solr instance.
    (Bruno Dumon, Sami Siren, Mark Miller)
  - SOLR-3080: Remove shard info from zookeeper when SolrCore is explicitly unloaded.
    (yonik, Mark Miller, siren)
  - SOLR-3437: Recovery issues a spurious commit to the cluster. (Trym R. Møller via Mark Miller)
  - SOLR-2822: Skip update processors already run on other nodes (hossman)

* SOLR-1566: Transforming documents in the ResponseWriters.  This will allow
  for more complex results in responses and open the door for function queries
  as results.
  (ryan with patches from grant, noble, cmale, yonik, Jan Høydahl,
  Arul Kalaipandian, Luca Cavanna, hossman)
  - SOLR-2037: Thanks to SOLR-1566, documents boosted by the QueryElevationComponent
    can be marked as boosted.  (gsingers, ryan, yonik)

* SOLR-2396: Add CollationField, which is much more efficient than
  the Solr 3.x CollationKeyFilterFactory, and also supports
  Locale-sensitive range queries. (rmuir)

* SOLR-2338: Add support for using <similarity/> in a schema's fieldType,
  for customizing scoring on a per-field basis. (hossman, yonik, rmuir)

* SOLR-2335: New 'field("...")' function syntax for referring to complex
  field names (containing whitespace or special characters) in functions.

* SOLR-2383: /browse improvements: generalize range and date facet display
  (Jan Høydahl via yonik)

* SOLR-2272: Pseudo-join queries / filters.  Examples:
  - To restrict to the set of parents with at least one blue-eyed child:
      fq={!join from=parent to=name}eyes:blue
  - To restrict to the set of children with at least one blue-eyed parent:
      fq={!join from=name to=parent}eyes:blue
  (yonik)

* SOLR-1942: Added the ability to select postings format per fieldType in schema.xml
  as well as support custom Codecs in solrconfig.xml.
  (simonw via rmuir)

* SOLR-2136: Boolean type added to function queries, along with
  new functions exists(), if(), and(), or(), xor(), not(), def(),
  and true and false constants. (yonik)

* SOLR-2491: Add support for using spellcheck collation in conjunction
  with grouping. Note that the number of hits returned for collations
  is the number of ungrouped hits.  (James Dyer via rmuir)

* SOLR-1298: Return FunctionQuery as pseudo field.  The solr 'fl' param
  now supports functions.  For example:  fl=id,sum(x,y) -- NOTE: only
  functions with fast random access are recommended. (yonik, ryan)

* SOLR-705: Optionally return shard info with each document in distributed
  search.  Use fl=id,[shard]  to return the shard url.  (ryan)

* SOLR-2417: Add explain info directly to return documents using
  ?fl=id,[explain] (ryan)

* SOLR-2533: Converted ValueSource.ValueSourceSortField over to new rewriteable Lucene
  SortFields.  ValueSourceSortField instances must be rewritten before they can be used.
  This is done by SolrIndexSearcher when necessary. (Chris Male).

* SOLR-2193, SOLR-2565: You may now specify a 'soft' commit when committing. This will
  use Lucene's NRT feature to avoid guaranteeing documents are on stable storage in exchange
  for faster reopen times. There is also a new 'soft' autocommit tracker that can be
  configured. (Mark Miller, Robert Muir)

* SOLR-2399: Updated Solr Admin interface.  New look and feel with per core administration
  and many new options.  (Stefan Matheis via ryan)

* SOLR-1032: CSV handler now supports "literal.field_name=value" parameters.
  (Simon Rosenthal, ehatcher)

* SOLR-2656: realtime-get, efficiently retrieves the latest stored fields for specified
  documents, even if they are not yet searchable (i.e. without reopening a searcher)
  (yonik)

* SOLR-2703: Added support for Lucene's "surround" query parser. (Simon Rosenthal, ehatcher)

* SOLR-2754: Added factories for several ranking algorithms:
    - BM25SimilarityFactory: Okapi BM25
    - DFRSimilarityFactory: Divergence from Randomness models
    - IBSimilarityFactory: Information-based models
    - LMDirichletSimilarity: LM with Dirichlet smoothing
    - LMJelinekMercerSimilarity: LM with Jelinek-Mercer smoothing
  (David Mark Nemeskey, Robert Muir)

* SOLR-2134 Trie* fields should support sortMissingLast=true, and deprecate Sortable* Field Types
  (Ryan McKinley, Mike McCandless, Uwe Schindler, Erick Erickson)

* SOLR-2438 added MultiTermAwareComponent to the various classes to allow automatic lowercasing
  for multiterm queries (wildcards, regex, prefix, range, etc). You can now optionally specify a
  "multiterm" analyzer in our schema.xml, but Solr should "do the right thing" if you don't
  specify <analyzer type="multiterm"> (Pete Sturge Erick Erickson, Mentoring from Seeley and Muir)

* SOLR-2481: Add support for commitWithin in DataImportHandler (Sami Siren via yonik)

* SOLR-2992: Add support for IndexWriter.prepareCommit() via prepareCommit=true
  on update URLs. (yonik)

* SOLR-2906: Added LFU cache options to Solr. (Shawn Heisey via Erick Erickson)

* SOLR-3069: Ability to add openSearcher=false to not open a searcher when doing
  a hard commit.  commitWithin now only invokes a softCommit. (yonik)

* SOLR-2802: New FieldMutatingUpdateProcessor and Factory to simplify the
  development of UpdateProcessors that modify field values of documents as
  they are indexed. Also includes several useful new implementations:
    - RemoveBlankFieldUpdateProcessorFactory
    - TrimFieldUpdateProcessorFactory
    - HTMLStripFieldUpdateProcessorFactory
    - RegexReplaceProcessorFactory
    - FieldLengthUpdateProcessorFactory
    - ConcatFieldUpdateProcessorFactory
    - FirstFieldValueUpdateProcessorFactory
    - LastFieldValueUpdateProcessorFactory
    - MinFieldValueUpdateProcessorFactory
    - MaxFieldValueUpdateProcessorFactory
    - TruncateFieldUpdateProcessorFactory
    - IgnoreFieldUpdateProcessorFactory
  (hossman, janhoy)

* SOLR-3120: Optional post filtering for spatial queries bbox and geofilt
  for LatLonType. (yonik)

* SOLR-2459: Expose LogLevel selection with a RequestHandler rather then servlet
  (Stefan Matheis, Upayavira, ryan)

* SOLR-3134: Include shard info in distributed response when shards.info=true
  (Russell Black, ryan)

* SOLR-2898: Support grouped faceting. (Martijn van Groningen)
  Additional Work:
  - SOLR-3406: Extended grouped faceting support to facet.query and facet.range parameters.
               (David Boychuck, Martijn van Groningen)

* SOLR-2949: QueryElevationComponent is now supported with distributed search.
  (Mark Miller, yonik)

* SOLR-3221: Added the ability to directly configure aspects of the concurrency
 and thread-pooling used within distributed search in solr. This allows for finer
 grained controlled and can be tuned by end users to target their own specific
 requirements. This builds on the work of the HttpCommComponent and uses the same configuration
 block to configure the thread pool. The default configuration has
 the same behaviour as solr 3.5, favouring throughput over latency. More
 information can be found on the wiki (http://wiki.apache.org/solr/SolrConfigXml) (Greg Bowyer)

* SOLR-3278: Negative boost support to the Extended Dismax Query Parser Boost Query (bq).
  (James Dyer)

* SOLR-3255: OpenExchangeRates.Org Exchange Rate Provider for CurrencyField (janhoy)

* SOLR-3358: Logging events are captured and available from the /admin/logging
  request handler. (ryan)

* SOLR-1535: PreAnalyzedField type provides a functionality to index (and optionally store)
  field content that was already processed and split into tokens using some external processing
  chain. Serialization format is pluggable, and defaults to JSON. (ab)

* SOLR-3363: Consolidated Exceptions in Analysis Factories so they only throw
  InitializationExceptions (Chris Male)

* SOLR-2690: New support for a "TZ" request param which overrides the TimeZone
  used when rounding Dates in DateMath expressions for the entire request
  (all date range queries and date faceting is affected).  The default TZ
  is still UTC.  (David Schlotfeldt, hossman)

* SOLR-3402: Analysis Factories are now configured with their Lucene Version
  throw setLuceneMatchVersion, rather than through the Map passed to init.
  Parsing and simple error checking for the Version is now done inside
  the code that creates the Analysis Factories. (Chris Male)

* SOLR-3178: Optimistic locking.  If a _version_ is provided with an update
  that does not match the version in the index, an HTTP 409 error (Conflict)
  will result.  (Per Steffensen, yonik)

* SOLR-139: Updateable documents.  JSON Example:
  {"id":"mydoc", "f1":{"set":10}, "f2":{"add":20}}  will result in field "f1"
  being set to 10, "f2" having an additional value of 20 added, and all
  other existing fields unchanged.  All source fields must be stored for
  this feature to work correctly.  (Ryan McKinley, Erik Hatcher, yonik)

* SOLR-2857: Support XML,CSV,JSON, and javabin in a single RequestHandler and
  choose the correct ContentStreamLoader based on Content-Type header.  This
  also deprecates the existing [Xml,JSON,CSV,Binary,Xslt]UpdateRequestHandler.
  (ryan)

* SOLR-2585: Context-Sensitive Spelling Suggestions & Collations.  This adds support
  for the "spellcheck.alternativeTermCount" & "spellcheck.maxResultsForSuggest"
  parameters, letting users receive suggestions even when all the queried terms
  exist in the dictionary.  This differs from "spellcheck.onlyMorePopular" in
  that the suggestions need not consist entirely of terms with a greater document
  frequency than the queried terms. (James Dyer)

* SOLR-2058: Edismax query parser to allow "phrase slop" to be specified per-field
  on the pf/pf2/pf3 parameters using optional "FieldName~slop^boost" syntax.  The
  prior "FieldName^boost" syntax is still accepted.  In such cases the value on the
  "ps" parameter serves as the default slop.  (Ron Mayer via James Dyer)

* SOLR-3495: New UpdateProcessors have been added to create default values for
  configured fields.  These works similarly to the <field default="..."/>
  option in schema.xml, but are applied in the UpdateProcessorChain, so they
  may be used prior to other UpdateProcessors, or to generate a uniqueKey field
  value when using the DistributedUpdateProcessor (ie: SolrCloud)
    TimestampUpdateProcessorFactory
    UUIDUpdateProcessorFactory
    DefaultValueUpdateProcessorFactory
  (hossman)

* SOLR-2993: Add WordBreakSolrSpellChecker to offer suggestions by combining adjacent
  query terms and/or breaking terms into multiple words.  This spellchecker can be
  configured with a traditional checker (ie: DirectSolrSpellChecker).  The results
  are combined and collations can contain a mix of corrections from both spellcheckers.
  (James Dyer)

* SOLR-3508: Simplify JSON update format for deletes as well as allow
  version specification for optimistic locking.  Examples:
    - {"delete":"myid"}
    - {"delete":["id1","id2","id3"]}
    - {"delete":{"id":"myid", "_version_":123456789}}
  (yonik)

* SOLR-3211:  Allow parameter overrides in conjunction with "spellcheck.maxCollationTries".
  To do so, use parameters starting with "spellcheck.collateParam."  For instance, to
  override the "mm" parameter, specify "spellcheck.collateParam.mm".  This is helpful
  in cases where testing spellcheck collations for result counts should use different
  parameters from the main query (James Dyer)

* SOLR-2599: CloneFieldUpdateProcessorFactory provides similar functionality
  to schema.xml's <copyField/> declaration but as an update processor that can
  be combined with other processors in any order. (Jan Høydahl & hossman)

* SOLR-3351: eDismax: ps2 and ps3 params (janhoy)

* SOLR-3542: Add WeightedFragListBuilder for FVH and set it to default fragListBuilder
  in example solrconfig.xml. (Sebastian Lutze, koji)

* SOLR-2396: Add ICUCollationField to contrib/analysis-extras, which is much
  more efficient than the Solr 3.x ICUCollationKeyFilterFactory, and also
  supports Locale-sensitive range queries.  (rmuir)


Optimizations
----------------------

* SOLR-1875: Per-segment field faceting for single valued string fields.
  Enable with facet.method=fcs, control the number of threads used with
  the "threads" local param on the facet.field param.  This algorithm will
  only be faster in the presence of rapid index changes.  (yonik)

* SOLR-1904: When facet.enum.cache.minDf > 0 and the base doc set is a
  SortedIntSet, convert to HashDocSet for better performance. (yonik)

* SOLR-2092: Speed up single-valued and multi-valued "fc" faceting. Typical
  improvement is 5%, but can be much greater (up to 10x faster) when facet.offset
  is very large (deep paging). (yonik)

* SOLR-2193, SOLR-2565: The default Solr update handler has been improved so
  that it uses fewer locks, keeps the IndexWriter open rather than closing it
  on each commit (ie commits no longer wait for background merges to complete),
  works with SolrCore to provide faster 'soft' commits, and has an improved API
  that requires less instanceof special casing. (Mark Miller, Robert Muir)
  Additional Work:
  - SOLR-2697: commit and autocommit operations don't reset
    DirectUpdateHandler2.numDocsPending stats attribute.
    (Alexey Serba, Mark Miller)

* SOLR-2950: The QueryElevationComponent now avoids using the FieldCache and looking up
  every document id (gsingers, yonik)

Bug Fixes
----------------------
* SOLR-3139: Make ConcurrentUpdateSolrServer send UpdateRequest.getParams()
  as HTTP request params (siren)

* SOLR-3165: Cannot use DIH in Solrcloud + Zookeeper (Alexey Serba,
  Mark Miller, siren)

* SOLR-3068: Occasional NPE in ThreadDumpHandler (siren)

* SOLR-2762: FSTLookup could return duplicate results or one results less
  than requested. (David Smiley, Dawid Weiss)

* SOLR-2741: Bugs in facet range display in trunk (janhoy)

* SOLR-1908: Fixed SignatureUpdateProcessor to fail to initialize on
  invalid config.  Specifically: a signatureField that does not exist,
  or overwriteDupes=true with a signatureField that is not indexed.
  (hossman)

* SOLR-1824: IndexSchema will now fail to initialize if there is a
  problem initializing one of the fields or field types. (hossman)

* SOLR-1928: TermsComponent didn't correctly break ties for non-text
  fields sorted by count. (yonik)

* SOLR-2107: MoreLikeThisHandler doesn't work with alternate qparsers. (yonik)

* SOLR-2108: Fixed false positives when using wildcard queries on fields with reversed
  wildcard support. For example, a query of *zemog* would match documents that contain
  'gomez'.  (Landon Kuhn via Robert Muir)

* SOLR-1962: SolrCore#initIndex should not use a mix of indexPath and newIndexPath (Mark Miller)

* SOLR-2275: fix DisMax 'mm' parsing to be tolerant of whitespace
  (Erick Erickson via hossman)

* SOLR-2193, SOLR-2565, SOLR-2651: SolrCores now properly share IndexWriters across SolrCore reloads.
  (Mark Miller, Robert Muir)
  Additional Work:
  - SOLR-2705: On reload, IndexWriterProvider holds onto the initial SolrCore it was created with.
    (Yury Kats, Mark Miller)

* SOLR-2682: Remove addException() in SimpleFacet. FacetComponent no longer catches and embeds
  exceptions occurred during facet processing, it throws HTTP 400 or 500 exceptions instead. (koji)

* SOLR-2654: Directorys used by a SolrCore are now closed when they are no longer used.
  (Mark Miller)

* SOLR-2854: Now load URL content stream data (via stream.url) when called for during request handling,
  rather than loading URL content streams automatically regardless of use.
  (David Smiley and Ryan McKinley via ehatcher)

* SOLR-2829: Fix problem with false-positives due to incorrect
  equals methods. (Yonik Seeley, Hossman, Erick Erickson.
  Marc Tinnemeyer caught the bug)

* SOLR-2848: Removed 'instanceof AbstractLuceneSpellChecker' hacks from distributed spellchecking code,
  and added a merge() method to SolrSpellChecker instead. Previously if you extended SolrSpellChecker
  your spellchecker would not work in distributed fashion.  (James Dyer via rmuir)

* SOLR-2509: StringIndexOutOfBoundsException in the spellchecker collate when the term contains
  a hyphen. (Thomas Gambier caught the bug, Steffen Godskesen did the patch, via Erick Erickson)

* SOLR-1730: Made it clearer when a core failed to load as well as better logging when the
  QueryElevationComponent fails to properly initialize (gsingers)

* SOLR-1520: QueryElevationComponent now supports non-string ids (gsingers)

* SOLR-3037: When using binary format in solrj the codec screws up parameters
  (Sami Siren, Jörg Maier  via yonik)

* SOLR-3062: A join in the main query was not respecting any filters pushed
  down to it via acceptDocs since LUCENE-1536. (Mike Hugo, yonik)

* SOLR-3214: If you use multiple fl entries rather than a comma separated list, all but the first
  entry can be ignored if you are using distributed search. (Tomás Fernández Löbbe via Mark Miller)

* SOLR-3352: eDismax: pf2 should kick in for a query with 2 terms (janhoy)

* SOLR-3361: ReplicationHandler "maxNumberOfBackups" doesn't work if backups are triggered on commit
  (James Dyer, Tomás Fernández Löbbe)

* SOLR-2605: fixed tracking of the 'defaultCoreName' in CoreContainer so that
  CoreAdminHandler could return consistent information regardless of whether
  there is a a default core name or not. (steffkes, hossman)

* SOLR-3370: fixed CSVResponseWriter to respect globs in the 'fl' param
  (Keith Fligg via hossman)

* SOLR-3436: Group count incorrect when not all shards are queried in the second
  pass. (Francois Perron, Martijn van Groningen)

* SOLR-3454: Exception when using result grouping with main=true and using
  wt=javabin. (Ludovic Boutros, Martijn van Groningen)

* SOLR-3446: Better errors when PatternTokenizerFactory is configured with
  an invalid pattern, and include the 'name' whenever possible in plugin init
  error messages. (hossman)

* LUCENE-4075: Cleaner path usage in TestXPathEntityProcessor
  (Greg Bowyer via hossman)

* SOLR-2923: IllegalArgumentException when using useFilterForSortedQuery on an
  empty index. (Adrien Grand via Mark Miller)

* SOLR-2352: Fixed TermVectorComponent so that it will not fail if the fl
  param contains globs or psuedo-fields (hossman)

* SOLR-3541: add missing solrj dependencies to binary packages.
  (Thijs Vonk via siren)

* SOLR-3522: fixed parsing of the 'literal()' function (hossman)

* SOLR-3548: Fixed a bug in the cachability of queries using the {!join}
  parser or the strdist() function, as well as some minor improvements to
  the hashCode implementation of {!bbox} and {!geofilt} queries.
  (hossman)

* SOLR-3470: contrib/clustering: custom Carrot2 tokenizer and stemmer factories
  are respected now (Stanislaw Osinski, Dawid Weiss)

* SOLR-3430: Added a new DIH test against a real SQL database.  Fixed problems
  revealed by this new test related to  the expanded cache support added to
  3.6/SOLR-2382 (James Dyer)

* SOLR-1958: When using the MailEntityProcessor, import would fail if
  fetchMailsSince was not specified. (Max Lynch via James Dyer)

* SOLR-4289: Admin UI - JVM memory bar - dark grey "used" width is too small
  (steffkes, elyograg)

Other Changes
----------------------

* SOLR-1846: Eliminate support for the abortOnConfigurationError
  option.  It has never worked very well, and in recent versions of
  Solr hasn't worked at all.  (hossman)

* SOLR-1889: The default logic for the 'mm' param of DismaxQParser and
  ExtendedDismaxQParser has been changed to be determined based on the
  effective value of the 'q.op' param (hossman)

* SOLR-1946: Misc improvements to the SystemInfoHandler: /admin/system
  (hossman)

* SOLR-2289: Tweak spatial coords for example docs so they are a bit
  more spread out (Erick Erickson via hossman)

* SOLR-2288: Small tweaks to eliminate compiler warnings.  primarily
  using Generics where applicable in method/object declarations, and
  adding @SuppressWarnings("unchecked") when appropriate (hossman)

* SOLR-2375: Suggester Lookup implementations now store trie data
  and load it back on init. This means that large tries don't have to be
  rebuilt on every commit or core reload. (ab)

* SOLR-2413: Support for returning multi-valued fields w/o <arr> tag
  in the XMLResponseWriter was removed.  XMLResponseWriter only
  no longer work with values less then 2.2 (ryan)

* SOLR-2423: FieldType argument changed from String to Object
  Conversion from SolrInputDocument > Object > Fieldable is now managed
  by FieldType rather then DocumentBuilder.  (ryan)

* SOLR-2461: QuerySenderListener and AbstractSolrEventListener are
  now public (hossman)

* LUCENE-2995: Moved some spellchecker and suggest APIs to modules/suggest:
  HighFrequencyDictionary, SortedIterator, TermFreqIterator, and the
  suggester APIs and implementations. (rmuir)

* SOLR-2576: Remove deprecated SpellingResult.add(Token, int).
  (James Dyer via rmuir)

* LUCENE-3232: Moved MutableValue classes to new 'common' module. (Chris Male)

* LUCENE-2883: FunctionQuery, DocValues (and its impls), ValueSource (and its
  impls) and BoostedQuery have been consolidated into the queries module.  They
  can now be found at o.a.l.queries.function.

* SOLR-2027: FacetField.getValues() now returns an empty list if there are no
  values, instead of null (Chris Male)

* SOLR-1825: SolrQuery.addFacetQuery now enables facets automatically, like
  addFacetField (Chris Male)

* SOLR-2663: FieldTypePluginLoader has been refactored out of IndexSchema
  and made public. (hossman)

* SOLR-2331,SOLR-2691: Refactor CoreContainer's SolrXML serialization code and improve testing
  (Yury Kats, hossman, Mark Miller)

* SOLR-2698: Enhance CoreAdmin STATUS command to return index size.
  (Yury Kats, hossman, Mark Miller)

* SOLR-2654: The same Directory instance is now always used across a SolrCore so that
  it's easier to add other DirectoryFactory's without static caching hacks.
  (Mark Miller)

* LUCENE-3286: 'luke' ant target has been disabled due to incompatibilities with XML
  queryparser location (Chris Male)

* SOLR-1897: The data dir from the core descriptor should override the data dir from
  the solrconfig.xml rather than the other way round. (Mark Miller)

* SOLR-2756: Maven configuration: Excluded transitive stax:stax-api dependency
  from org.codehaus.woodstox:wstx-asl dependency. (David Smiley via Steve Rowe)

* SOLR-2588: Moved VelocityResponseWriter back to contrib module in order to
  remove it as a mandatory core dependency.  (ehatcher)

* SOLR-2862: More explicit lexical resources location logged if Carrot2 clustering
  extension is used. Fixed solr. impl. of IResource and IResourceLookup. (Dawid Weiss)

* SOLR-1123: Changed JSONResponseWriter to now use application/json as its Content-Type
  by default.  However the Content-Type can be overwritten and is set to text/plain in
  the example configuration. (Uri Boness, Chris Male)

* SOLR-2607: Removed deprecated client/ruby directory, which included solr-ruby and flare.
  (ehatcher)

* SOLR-3032: logOnce from SolrException logOnce and all the supporting
  structure is gone. abortOnConfigurationError is also gone as it is no longer referenced.
  Errors should be caught and logged at the top-most level or logged and NOT propagated up the
  chain. (Erick Erickson)

* SOLR-2105: Remove support for deprecated "update.processor" (since 3.2), in favor of
  "update.chain" (janhoy)

* SOLR-3005: Default QueryResponseWriters are now initialized via init() with an empty
  NamedList. (Gasol Wu, Chris Male)

* SOLR-2607: Removed obsolete client/ folder (ehatcher, Eric Pugh, janhoy)

* SOLR-3202, SOLR-3244: Dropping Support for JSP.  New Admin UI is all client side
  (ryan, Aliaksandr Zhuhrou, Uwe Schindler)

* SOLR-3159: Upgrade example and tests to run with Jetty 8 (ryan)

* SOLR-3254: Upgrade Solr to Tika 1.1 (janhoy)

* SOLR-3329: Dropped getSourceID() from SolrInfoMBean and using
  getClass().getPackage().getSpecificationVersion() for Version. (ryan)

* SOLR-3302: Upgraded SLF4j to version 1.6.4 (hossman)

* SOLR-3322: Add more context to IndexReaderFactory.newReader (ab)

* SOLR-3343: Moved FastWriter, FileUtils, RegexFileFilter, RTimer and SystemIdResolver
  from org.apache.solr.common to org.apache.solr.util (Chris Male)

* SOLR-3357: ResourceLoader.newInstance now accepts a Class representation of the expected
  instance type (Chris Male)

* SOLR-3388: HTTP caching is now disabled by default for RequestUpdateHandlers. (ryan)

* SOLR-3309: web.xml now specifies metadata-complete=true (which requires
  Servlet 2.5) to prevent servlet containers from scanning class annotations
  on startup.  This allows for faster startup times on some servlet containers.
  (Bill Bell, hossman)

* SOLR-1893: Refactored some common code from LRUCache and FastLRUCache into
  SolrCacheBase (Tomás Fernández Löbbe via hossman)

* SOLR-3403: Deprecated Analysis Factories now log their own deprecation messages.
  No logging support is provided by Factory parent classes. (Chris Male)

* SOLR-1258: PingRequestHandler is now directly configured with a
  "healthcheckFile" instead of looking for the legacy
  <admin><healthcheck/></admin> syntax.  Filenames specified as relative
  paths have been fixed so that they are resolved against the data dir
  instead of the CWD of the java process. (hossman)

* SOLR-3083: JMX beans now report Numbers as numeric values rather then String
  (Tagged Siteops, Greg Bowyer via ryan)

* SOLR-2796: Due to low level changes to support SolrCloud, the uniqueKey
  field can no longer be populated via <copyField/> or <field default=...>
  in the schema.xml.

* SOLR-3534: The Dismax and eDismax query parsers will fall back on the 'df' parameter
  when 'qf' is absent.  And if neither is present nor the schema default search field
  then an exception will be thrown now. (dsmiley)

* SOLR-3262: The "threads" feature of DIH is removed (deprecated in Solr 3.6)
  (James Dyer)

* SOLR-3422: Refactored DIH internal data classes.  All entities in
  data-config.xml must have a name (James Dyer)

Documentation
----------------------

* SOLR-2232: Improved README info on solr.solr.home in examples
  (Eric Pugh and hossman)

==================  3.6.2  ==================

Bug Fixes
----------------------
* SOLR-3790: ConcurrentModificationException could be thrown when using hl.fl=*.
  (yonik, koji)

* SOLR-3589: Edismax parser does not honor mm parameter if analyzer splits a token.
  (Tom Burton-West, Robert Muir)

==================  3.6.1  ==================
More information about this release, including any errata related to the
release notes, upgrade instructions, or other changes may be found online at:
   https://wiki.apache.org/solr/Solr3.6.1

Bug Fixes

* LUCENE-3969: Throw IAE on bad arguments that could cause confusing errors in
  PatternTokenizer. CommonGrams populates PositionLengthAttribute correctly.
  (Uwe Schindler, Mike McCandless, Robert Muir)

* SOLR-3361: ReplicationHandler "maxNumberOfBackups" doesn't work if backups are triggered on commit
  (James Dyer, Tomás Fernández Löbbe)

* SOLR-3375: Fix charset problems with HttpSolrServer (Roger Håkansson, yonik, siren)

* SOLR-3436: Group count incorrect when not all shards are queried in the second
  pass. (Francois Perron, Martijn van Groningen)

* SOLR-3454: Exception when using result grouping with main=true and using
  wt=javabin. (Ludovic Boutros, Martijn van Groningen)

* SOLR-3489: Config file replication less error prone (Jochen Just via janhoy)

* SOLR-3477: SOLR does not start up when no cores are defined (Tomás Fernández Löbbe via tommaso)

* SOLR-3470: contrib/clustering: custom Carrot2 tokenizer and stemmer factories
  are respected now (Stanislaw Osinski, Dawid Weiss)

* SOLR-3360: More DIH bug fixes for the deprecated "threads" parameter.
  (Mikhail Khludnev, Claudio R, via James Dyer)

* SOLR-3430: Added a new DIH test against a real SQL database.  Fixed problems
  revealed by this new test related to the expanded cache support added to
  3.6/SOLR-2382 (James Dyer)

* SOLR-3336: SolrEntityProcessor substitutes most variables at query time.
  (Michael Kroh, Lance Norskog, via Martijn van Groningen)


==================  3.6.0  ==================
More information about this release, including any errata related to the
release notes, upgrade instructions, or other changes may be found online at:
   https://wiki.apache.org/solr/Solr3.6

Upgrading from Solr 3.5
----------------------
* SOLR-2983: As a consequence of moving the code which sets a MergePolicy from SolrIndexWriter to SolrIndexConfig,
  (custom) MergePolicies should now have an empty constructor; thus an IndexWriter should not be passed as constructor
  parameter but instead set using the setIndexWriter() method.

* As doGet() methods in SimplePostTool was changed to static, the client applications of this
  class need to be recompiled.

* In Solr version 3.5 and earlier, HTMLStripCharFilter had known bugs in the
  character offsets it provided, triggering e.g. exceptions in highlighting.
  HTMLStripCharFilter has been re-implemented, addressing this and other
  issues.  See the entry for LUCENE-3690 in the Bug Fixes section below for a
  detailed list of changes.  For people who depend on the behavior of
  HTMLStripCharFilter in Solr version 3.5 and earlier: the old implementation
  (bugs and all) is preserved as LegacyHTMLStripCharFilter.

* As of Solr 3.6, the <indexDefaults> and <mainIndex> sections of solrconfig.xml are deprecated
  and replaced with a new <indexConfig> section. Read more in SOLR-1052 below.

* SOLR-3040: The DIH's admin UI (dataimport.jsp) now requires DIH request handlers to start with
  a '/'. (dsmiley)

* SOLR-3161: <requestDispatcher handleSelect="false"> is now the default. An existing config will
  probably work as-is because handleSelect was explicitly enabled in default configs. HandleSelect
  makes /select work as well as enables the 'qt' parameter. Instead, consider explicitly
  configuring /select as is done in the example solrconfig.xml, and register your other search
  handlers with a leading '/' which is a recommended practice.  (David Smiley, Erik Hatcher)

* SOLR-3161: Don't use the 'qt' parameter with a leading '/'.  It probably won't work in 4.0
  and it's now limited in 3.6 to SearchHandler subclasses that aren't lazy-loaded.

* SOLR-2724: Specifying <defaultSearchField> and <solrQueryParser defaultOperator="..."/> in
  schema.xml is now considered deprecated.  Instead you are encouraged to specify these via the "df"
  and "q.op" parameters in your request handler definition.  (David Smiley)

* Bugs found and fixed in the SignatureUpdateProcessor that previously caused
  some documents to produce the same signature even when the configured fields
  contained distinct (non-String) values.  Users of SignatureUpdateProcessor
  are strongly advised that they should re-index as document signatures may
  have now changed. (see SOLR-3200 & SOLR-3226 for details)

New Features
----------------------
* SOLR-2020: Add Java client that uses Apache Http Components http client (4.x).
  (Chantal Ackermann, Ryan McKinley, Yonik Seeley, siren)

* SOLR-2854: Now load URL content stream data (via stream.url) when called for during request handling,
  rather than loading URL content streams automatically regardless of use.
  (David Smiley and Ryan McKinley via ehatcher)

* SOLR-2904: BinaryUpdateRequestHandler should be able to accept multiple update requests from
  a stream (shalin)

* SOLR-1565: StreamingUpdateSolrServer supports RequestWriter API and therefore, javabin update
  format (shalin)

* SOLR-2438 added MultiTermAwareComponent to the various classes to allow automatic lowercasing
  for multiterm queries (wildcards, regex, prefix, range, etc). You can now optionally specify a
  "multiterm" analyzer in our schema.xml, but Solr should "do the right thing" if you don't
  specify <fieldType="multiterm"> (Pete Sturge Erick Erickson, Mentoring from Seeley and Muir)

* SOLR-2919: Added support for localized range queries when the analysis chain uses
  CollationKeyFilter or ICUCollationKeyFilter.  (Michael Sokolov, rmuir)

* SOLR-2982: Added BeiderMorseFilterFactory for Beider-Morse (BMPM) phonetic encoder. Upgrades
  commons-codec to version 1.6  (Brooke Schreier Ganz, rmuir)

* SOLR-1843: A new "rootName" attribute is now available when
  configuring <jmx/> in solrconfig.xml.  If this attribute is set,
  Solr will use it as the root name for all MBeans Solr exposes via
  JMX.  The default root name is "solr" followed by the core name.
  (Constantijn Visinescu, hossman)

* SOLR-2906: Added LFU cache options to Solr. (Shawn Heisey via Erick Erickson)

* SOLR-3036: Ability to specify overwrite=false on the URL for XML updates.
  (Sami Siren via yonik)

* SOLR-2603: Add the encoding function for alternate fields in highlighting.
  (Massimo Schiavon, koji)

* SOLR-1729: Evaluation of NOW for date math is done only once per request for
  consistency, and is also propagated to shards in distributed search.
  Adding a parameter NOW=<time_in_ms> to the request will override the
  current time.  (Peter Sturge, yonik, Simon Willnauer)

* SOLR-1709: Distributed support for Date and Numeric Range Faceting
  (Peter Sturge, David Smiley, hossman, Simon Willnauer)

* SOLR-3054, LUCENE-3671: Add TypeTokenFilterFactory that creates TypeTokenFilter
  that filters tokens based on their TypeAttribute.  (Tommaso Teofili via
  Uwe Schindler)

* LUCENE-3305, SOLR-3056: Added Kuromoji morphological analyzer for Japanese.
  See the 'text_ja' fieldtype in the example to get started.
  (Christian Moen, Masaru Hasegawa via Robert Muir)

* SOLR-1860: StopFilterFactory, CommonGramsFilterFactory, and
  CommonGramsQueryFilterFactory can optionally read stopwords in Snowball
  format (specify format="snowball").  (Robert Muir)

* SOLR-3105: ElisionFilterFactory optionally allows the parameter
  ignoreCase (default=false).  (Robert Muir)

* LUCENE-3714: Add WFSTLookupFactory, a suggester that uses a weighted FST
  for more fine-grained suggestions.  (Mike McCandless, Dawid Weiss, Robert Muir)

* SOLR-3143: Add SuggestQueryConverter, a QueryConverter intended for
  auto-suggesters. (Robert Muir)

* SOLR-3033: ReplicationHandler's backup command now supports a 'maxNumberOfBackups'
  init param that can be used to delete all but the most recent N backups. (Torsten Krah, James Dyer)

* SOLR-2202: Currency FieldType, whith support for currencies and exchange rates
  (Greg Fodor & Andrew Morrison via janhoy, rmuir, Uwe Schindler)

* SOLR-3026: eDismax: Locking down which fields can be explicitly queried (user fields aka uf)
  (janhoy, hossmann, Tomás Fernández Löbbe)

* SOLR-2826: URLClassify Update Processor (janhoy)

* SOLR-2764: Create a NorwegianLightStemmer and NorwegianMinimalStemmer (janhoy)

* SOLR-3221: Added the ability to directly configure aspects of the concurrency
 and thread-pooling used within distributed search in solr. This allows for finer
 grained controlled and can be tuned by end users to target their own specific
 requirements. This builds on the work of the HttpCommComponent and uses the same configuration
 block to configure the thread pool. The default configuration has
 the same behaviour as solr 3.5, favouring throughput over latency. More
 information can be found on the wiki (http://wiki.apache.org/solr/SolrConfigXml) (Greg Bowyer)

* SOLR-2001: The query component will substitute an empty query that matches
  no documents if the query parser returns null.  This also prevents an
  exception from being thrown by the default parser if "q" is missing. (yonik)
  - SOLR-435: if q is "" then it's also acceptable. (dsmiley, hoss)

* SOLR-2919: Added parametric tailoring options to ICUCollationKeyFilterFactory.
  These can be used to customize range query/sort behavior, for example to
  support numeric collation, ignore punctuation/whitespace, ignore accents but
  not case, control whether upper/lowercase values are sorted first, etc.  (rmuir)

* SOLR-2346: Add a chance to set content encoding explicitly via content type
  of stream for extracting request handler.  This is convenient when Tika's
  auto detector cannot detect encoding, especially the text file is too short
  to detect encoding. (koji)

* SOLR-1499: Added SolrEntityProcessor that imports data from another Solr core
  or instance based on a specified query.
  (Lance Norskog, Erik Hatcher, Pulkit Singhal, Ahmet Arslan, Luca Cavanna,
  Martijn van Groningen)

* SOLR-3190: Minor improvements to SolrEntityProcessor. Add more consistency
  between solr parameters and parameters used in SolrEntityProcessor and
  ability to specify a custom HttpClient instance.
  (Luca Cavanna via Martijn van Groningen)

* SOLR-2382: Added pluggable cache support to DIH so that any Entity can be
  made cache-able by adding the "cacheImpl" parameter.  Include
  "SortedMapBackedCache" to provide in-memory caching (as previously this was
  the only option when using CachedSqlEntityProcessor).  Users can provide
  their own implementations of DIHCache for other caching strategies.
  Deprecate CachedSqlEntityProcessor in favor of specifing "cacheImpl" with
  SqlEntityProcessor.  Make SolrWriter implement DIHWriter and allow the
  possibility of pluggable Writers (DIH writing to something other than Solr).
  (James Dyer, Noble Paul)


Optimizations
----------------------
* SOLR-1931: Speedup for LukeRequestHandler and admin/schema browser. New parameter
  reportDocCount defaults to 'false'. Old behavior still possible by specifying this as 'true'
  (Erick Erickson)

* SOLR-3012: Move System.getProperty("type") in postData() to main() and add type argument so that
  the client applications of SimplePostTool can set content type via method argument. (koji)

* SOLR-2888: FSTSuggester refactoring: internal storage is now UTF-8,
  external sorting (on disk) prevents OOMs even with large data sets
  (the bottleneck is now FST construction), code cleanups and API cleanups.
  (Dawid Weiss, Robert Muir)

Bug Fixes
----------------------
* SOLR-3187 SystemInfoHandler leaks filehandles (siren)

* LUCENE-3820: Fixed invalid position indexes by reimplementing PatternReplaceCharFilter.
  This change also drops real support for boundary characters -- all input is prebuffered
  for pattern matching. (Dawid Weiss)

* SOLR-3068: Fixed NPE in ThreadDumpHandler (siren)

* SOLR-2912: Fixed File descriptor leak in ShowFileRequestHandler (Michael Ryan, shalin)

* SOLR-2819: Improved speed of parsing hex entities in HTMLStripCharFilter
  (Bernhard Berger, hossman)

* SOLR-2509: StringIndexOutOfBoundsException in the spellchecker collate when the term contains
  a hyphen. (Thomas Gambier caught the bug, Steffen Godskesen did the patch, via Erick Erickson)

* SOLR-2955: Fixed IllegalStateException when querying with group.sort=score desc in sharded
             environment. (Steffen Elberg Godskesen, Martijn van Groningen)

* SOLR-2956: Fixed inconsistencies in the flags (and flag key) reported by
  the LukeRequestHandler (hossman)

* SOLR-1730: Made it clearer when a core failed to load as well as better logging when the
  QueryElevationComponent fails to properly initialize (gsingers)

* SOLR-1520: QueryElevationComponent now supports non-string ids (gsingers)

* SOLR-3024: Fixed JSONTestUtil.matchObj, in previous releases it was not
  respecting the 'delta' arg (David Smiley via hossman)

* SOLR-2542: Fixed DIH Context variables which were broken for all scopes other
  then SCOPE_ENTITY (Linbin Chen & Frank Wesemann via hossman)

* SOLR-3042: Fixed Maven Jetty plugin configuration.
  (David Smiley via Steve Rowe)

* SOLR-2970: CSV ResponseWriter returns fields defined as stored=false in schema (janhoy)

* LUCENE-3690, LUCENE-2208, SOLR-882, SOLR-42: Re-implemented
  HTMLStripCharFilter as a JFlex-generated scanner and moved it to
  lucene/contrib/analyzers/common/.  See below for a list of bug fixes and
  other changes.  To get the same behavior as HTMLStripCharFilter in Solr
  version 3.5 and earlier (including the bugs), use LegacyHTMLStripCharFilter,
  which is the previous implementation.

  Behavior changes from the previous version:

  - Known offset bugs are fixed.
  - The "Mark invalid" exceptions reported in SOLR-1283 are no longer
    triggered (the bug is still present in LegacyHTMLStripCharFilter).
  - The character entity "&apos;" is now always properly decoded.
  - More cases of <script> tags are now properly stripped.
  - CDATA sections are now handled properly.
  - Valid tag name characters now include the supplementary Unicode characters
    from Unicode character classes [:ID_Start:] and [:ID_Continue:].
  - Uppercase character entities "&QUOT;", "&COPY;", "&GT;", "&LT;", "&REG;",
    and "&AMP;" are now recognized and handled as if they were in lowercase.
  - The REPLACEMENT CHARACTER U+FFFD is now used to replace numeric character
    entities for unpaired UTF-16 low and high surrogates (in the range
    [U+D800-U+DFFF]).
  - Properly paired numeric character entities for UTF-16 surrogates are now
    converted to the corresponding code units.
  - Opening tags with unbalanced quotation marks are now properly stripped.
  - Literal "<" and ">" characters in opening tags, regardless of whether they
    appear inside quotation marks, now inhibit recognition (and stripping) of
    the tags.  The only exception to this is for values of event-handler
    attributes, e.g. "onClick", "onLoad", "onSelect".
  - A newline '\n' is substituted instead of a space for stripped HTML markup.
  - Nothing is substituted for opening and closing inline tags - they are
    simply removed.  The list of inline tags is (case insensitively): <a>,
    <abbr>, <acronym>, <b>, <basefont>, <bdo>, <big>, <cite>, <code>, <dfn>,
    <em>, <font>, <i>, <img>, <input>, <kbd>, <label>, <q>, <s>, <samp>,
    <select>, <small>, <span>, <strike>, <strong>, <sub>, <sup>, <textarea>,
    <tt>, <u>, and <var>.
  - HTMLStripCharFilterFactory now handles HTMLStripCharFilter's "escapedTags"
    feature: opening and closing tags with the given names, including any
    attributes and their values, are left intact in the output.
  (Steve Rowe)

* LUCENE-3717: Fixed offset bugs in TrimFilter, WordDelimiterFilter, and
  HyphenatedWordsFilter where they would create invalid offsets in
  some situations, leading to problems in highlighting.  (Robert Muir)

* SOLR-2280: commitWithin ignored for a delete query (Juan Grande via janhoy)

* SOLR-3073: Fixed 'Invalid UUID string' error when having an UUID field as
  the unique key and executing a distributed grouping request. (Devon Krisman, Martijn van Groningen)

* SOLR-3084: Fixed initialization error when using
  <queryResponseWriter default="true" ... /> (Bernd Fehling and hossman)

* SOLR-3109: Fixed numerous redundant shard requests when using distributed grouping.
  (rblack via Martijn van Groningen)

* SOLR-3052: Fixed typo in distributed grouping parameters.
  (Martijn van Groningen, Grant Ingersoll)

* SOLR-2909: Add support for ResourceLoaderAware tokenizerFactories in synonym
  filter factories. (Tom Klonikowski, Jun Ohtani via Koji Sekiguchi)

* SOLR-3168: ReplicationHandler "numberToKeep" & "maxNumberOfBackups" parameters
  would keep only 1 backup, even if more than 1 was specified (Neil Hooey, James Dyer)

* SOLR-3009: hitGrouped.vm isn't shipped with 3.x (ehatcher, janhoy)

* SOLR-3195: timeAllowed is ignored for grouping queries
  (Russell Black via Martijn van Groningen)

* SOLR-2124: Do not log stack traces for "Service Disabled" / 503 Exceptions (PingRequestHandler, etc)
  (James Dyer, others)

* SOLR-3260: DataImportHandler: ScriptTransformer gives better error messages when
  problems arise on initialization (no Script Engine, invalid script, etc). (James Dyer)

* SOLR-2959: edismax now respects the magic fields '_val_' and '_query_'
  (Michael Watts, hossman)

* SOLR-3074: fix SolrPluginUtils.docListToSolrDocumentList to respect the
  list of fields specified.  This fix also deprecates
  DocumentBuilder.loadStoredFields which is not used anywhere in Solr,
  and was fundamentally broken/bizarre.
  (hossman, Ahmet Arslan)

* SOLR-2291: fix JSONWriter to respect field list when writing SolrDocuments
  (Ahmet Arslan via hossman)

* SOLR-3264: Fix CoreContainer and SolrResourceLoader logging to be more
  clear about when SolrCores are being created, and stop misleading people
  about SolrCore instanceDir's being the "Solr Home Dir" (hossman)

* SOLR-3046: Fix whitespace typo in DIH response "Time taken" (hossman)

* SOLR-3261: Fix edismax to respect query operators when literal colons
  are used in query string.  (Juan Grande via hossman)

* SOLR-3226: Fix SignatureUpdateProcessor to no longer ignore non-String
  field values (Spyros Kapnissis, hossman)

* SOLR-3200: Fix SignatureUpdateProcessor "all fields" mode to use all
  fields of each document instead of the fields specified by the first
  document indexed (Spyros Kapnissis via hossman)

* SOLR-3316: Distributed grouping failed when rows parameter was set to 0 and
  sometimes returned a wrong hit count as matches. (Cody Young, Martijn van Groningen)

* SOLR-3107: contrib/langid: When using the LangDetect implementation of
  langid, set the random seed to 0, so that the same document is detected as
  the same language with the same probability every time.
  (Christian Moen via rmuir)

* SOLR-2937: Configuring the number of contextual snippets used for
  search results clustering. The hl.snippets parameter is now respected
  by the clustering plugin, can be overridden by carrot.summarySnippets
  if needed (Stanislaw Osinski).

* SOLR-2938: Clustering on multiple fields. The carrot.title and
  carrot.snippet can now take comma- or space-separated lists of
  field names to cluster (Stanislaw Osinski).

* SOLR-2939: Clustering of multilingual search results. The document's
  language field be passed in the carrot.lang parameter, the carrot.lcmap
  parameter enables mapping of language codes to ISO 639 (Stanislaw Osinski).

* SOLR-2940: Passing values for custom Carrot2 fields to Clustering component.
  The custom field mapping are defined using the carrot.custom parameter
  (Stanislaw Osinski).

* SOLR-2941: NullPointerException on clustering component initialization
  when schema does not have a unique key field (Stanislaw Osinski).

* SOLR-2942: ClassCastException when passing non-textual fields to
  clustering component (Stanislaw Osinski).


Other Changes
----------------------
* SOLR-2922: Upgrade commons-io and commons-lang to 2.1 and 2.6, respectively. (koji)

* SOLR-2920: Refactor frequent conditional use of DefaultSolrParams and
  AppendedSolrParams into factory methods.
  (David Smiley via hossman)

* SOLR-3032: Deprecate logOnce from SolrException logOnce and all the supporting
  structure will disappear in 4.0. Errors should be caught and logged at the
  top-most level or logged and NOT propagated up the chain. (Erick Erickson)

* SOLR-2718: Add ability to lazy load response writers, defined with startup="lazy".
  (ehatcher)

* SOLR-2901: Upgrade Solr to Tika 1.0 (janhoy)

* SOLR-3059: Example XSL stylesheet for indexing query result XML (janhoy)

* SOLR-3097, SOLR-3105: Add analysis configurations for different languages to
  the example.  (Christian Moen, Robert Muir)

* SOLR-3005: Default QueryResponseWriters are now initialized via init() with an empty
  NamedList. (Gasol Wu, Chris Male)

* SOLR-3140: Upgrade schema version to 1.5, where omitNorms defaults to "true" for all
  primitive (non-analyzed) field types such as int, float, date, bool, string.. (janhoy)

* SOLR-3077: Better error messages when attempting to use "blank" field names
  (Antony Stubbs via hossman)

* SOLR-2712: expecting fl=score to return all fields is now deprecated.
  In solr 4.0, this will only return the score.  (ryan)

* SOLR-3156: Check for Lucene directory locks at startup. In previous versions
  this check was only performed during modifying (e.g. adding and deleting
  documents) the index. (Luca Cavanna via Martijn van Groningen)

* SOLR-1052: Deprecated <indexDefaults> and <mainIndex> in solrconfig.xml
  From now, all settings go in the new <indexConfig> tag, and some defaults are
  changed: useCompoundFile=false, ramBufferSizeMB=32, lockType=native, so that
  the effect of NOT specifying <indexConfig> at all gives same result as the
  example config used to give in 3.5 (janhoy, gsingers)

* SOLR-3294: In contrib/clustering/lib/, replaced the manually retrowoven
  Java 1.5-compatible carrot2-core-3.5.0.jar (which is not publicly available,
  except from the Solr Subversion repository), with newly released Java
  1.5-compatible carrot2-core-3.5.0.1.jar (hosted on the Maven Central
  repository).  Also updated dependencies jackson-core-asl and
  jackson-mapper-asl (both v1.5.2 -> v1.7.4).  (Dawid Weiss, Steve Rowe)

* SOLR-3295: netcdf jar is excluded from the binary release (and disabled in
  ivy.xml) because it requires java 6. If you want to parse this content with
  extracting request handler and are willing to use java 6, just add the jar.
  (rmuir)

* SOLR-3142: DIH Imports no longer default optimize to true, instead false.
  If you want to force all segments to be merged into one, you can specify
  this parameter yourself. NOTE: this can be very expensive operation and
  usually does not make sense for delta-imports.  (Robert Muir)

Build
----------------------
* SOLR-2487: Add build target to package war without slf4j jars (janhoy)

* SOLR-3112: Fix tests not to write to src/test-files (Luca Cavanna via Robert Muir)

* LUCENE-3753: Restructure the Solr build system. (Steve Rowe)

* SOLR-3204: The packaged pre-release artifact of Commons CSV used the original
  package name (org.apache.commons.csv). This created a compatibility issue as
  the Apache Commons team works toward an official release of Commons CSV.
  The source of Commons CSV was added under a separate package name to the
  Solr source code.  (Uwe Schindler, Chris Male, Emmanuel Bourg)

* LUCENE-3930: Changed build system to use Apache Ivy for retrival of 3rd
  party JAR files.  Please review README.txt for instructions.
  (Robert Muir, Chris Male, Uwe Schindler, Steven Rowe, Hossman)

==================  3.5.0  ==================

New Features
----------------------
* SOLR-2749: Add boundary scanners for FastVectorHighlighter. <boundaryScanner/>
  can be specified with a name in solrconfig.xml, and use hl.boundaryScanner=name
  parameter to specify the named <boundaryScanner/>. (koji)

* SOLR-2066,SOLR-2776: Added support for distributed grouping.
  (Martijn van Groningen, Jasper van Veghel, Matt Beaumont)

* SOLR-2769: Added factory for the new Hunspell stemmer capable of doing stemming
  for 99 languages (janhoy, cmale)

* SOLR-1979: New contrib "langid". Adds language identification capabilities as an
  Update Processor, using Tika's LanguageIdentifier or Cybozu language-detection
  library (janhoy, Tommaso Teofili, gsingers)

* SOLR-2818: Added before/after count response parsing support for range facets in
  SolrJ. (Bernhard Frauendienst via Martijn van Groningen)

* SOLR-2276: Add support for cologne phonetic to PhoneticFilterFactory.
  (Marc Pompl via rmuir)

* SOLR-1926: Add hl.q parameter. (koji)

* SOLR-2881: Numeric types now support sortMissingFirst/Last. This includes Trie and date types
  (Ryan McKinley, Mike McCandless, Uwe Schindler, Erick Erickson)

* SOLR-1023: StatsComponent now supports date fields and string fields.
  (Chris Male, Mark Holland, Gunnlaugur Thor Briem, Ryan McKinley)

* SOLR-2578: ReplicationHandler's backup command now supports a 'numberToKeep'
  request param that can be used to delete all but the most recent N backups.
  (James Dyer via hossman)

* SOLR-2839: Add alternative implementation to contrib/langid supporting 53
  languages, based on http://code.google.com/p/language-detection/ (rmuir)

Optimizations
----------------------

* SOLR-2742: SolrJ: Provide commitWithinMs as optional parameter for all add() methods,
  making the feature more conveniently accessible for developers (janhoy)

Bug Fixes
----------------------
* SOLR-2748: The CommitTracker used for commitWith or autoCommit by maxTime
  could commit too frequently and could block adds until a new searcher was
  registered. (yonik)

* SOLR-2726: Fixed NullPointerException when using spellcheck.q with Suggester.
  (Bernd Fehling, valentin via rmuir)

* SOLR-2772: Fixed Date parsing/formatting of years 0001-1000 (hossman)

* SOLR-2763: Extracting update request handler throws exception and returns 400
  when zero-length file posted using multipart form post (janhoy)

* SOLR-2780: Fixed issue where multi select facets didn't respect group.truncate parameter.
  (Martijn van Groningen, Ramzi Alqrainy)

* SOLR-2793: In rare cases (most likely during shutdown), a SolrIndexSearcher can be left
  open if the executor rejects a task. (Mark Miller)

* SOLR-2791: Replication: abortfetch command is broken if replication was started
  by fetchindex command instead of a regular poll (Yury Kats via shalin)

* SOLR-2861: Fix extremely rare race condition on commit that can result
  in a NPE (yonik)

* SOLR-2813: Fix HTTP error codes returned when requests contain strings that
  can not be parsed as numbers for Trie fields. (Jeff Crump and hossman)

* SOLR-2902: List of collations are wrong parsed in SpellCheckResponse causing
  a wrong number of collation results in the response.
  (Bastiaan Verhoef, James Dyer via Simon Willnauer)

* SOLR-2875: Fix the incorrect url in DIH example tika-data-config.xml
  (Shinichiro Abe via koji)

Other Changes
----------------------

* SOLR-2750: Make both "update.chain" and the deprecated "update.param" work
  consistently everywhere; see also SOLR-2105. (Mark Miller, janhoy)

* LUCENE-3410: Deprecated the WordDelimiterFilter constructors accepting multiple
  ints masquerading as booleans.  Preferred constructor now accepts a single int
  bitfield (Chris Male)

* SOLR-2758: Moved ConcurrentLRUCache from o.a.s.common.util package in the solrj
  module to the o.a.s.util package in the Solr core module.
  (David Smiley via Steve Rowe)

* SOLR-2766: Package individual javadoc sites for solrj and test-framework.
  (Steve Rowe, Mike McCandless)

* SOLR-2771: Solr modules' tests should not depend on solr-core test classes;
  move BufferingRequestProcessor from solr-core tests to test-framework so that
  the Solr Cell module can use it. (janhoy, Steve Rowe)

* LUCENE-3457: Upgrade commons-compress to 1.2 (Doron Cohen)

* SOLR-2757: min() and max() functions now support an arbitrary number of
  ValueSources  (Bill Bell via hossman)

* SOLR-2372: Upgrade Solr to Tika 0.10 (janhoy)

* SOLR-2792: Allow case insensitive Hunspell stemming (janhoy, rmuir)

* SOLR-2862: More explicit lexical resources location logged if Carrot2 clustering
  extension is used. Fixed solr. impl. of IResource and IResourceLookup. (Dawid Weiss)

* SOLR-2849: Fix dependencies in Maven POMs. (David Smiley via Steve Rowe)

* SOLR-2591: Remove commitLockTimeout option from solrconfig.xml (Luca Cavanna via Martijn van Groningen)

* SOLR-2746: Upgraded UIMA dependencies from *-2.3.1-SNAPSHOT.jar to *-2.3.1.jar.


==================  3.4.0  ==================

Upgrading from Solr 3.3
----------------------

* The Lucene index format has changed and as a result, once you upgrade,
  previous versions of Solr will no longer be able to read your indices.
  In a master/slave configuration, all searchers/slaves should be upgraded
  before the master.  If the master were to be updated first, the older
  searchers would not be able to read the new index format.

* Previous versions of Solr silently allow and ignore some contradictory
  properties specified in schema.xml.  For example:
    - indexed="false" omitNorms="false"
    - indexed="false" omitTermFreqAndPositions="false"
  Field property validation has now been fixed, to ensure that
  contradictions like these now generate error messages.  If users
  have existing schemas that generate one of these new "conflicting
  'false' field options for non-indexed field" error messages the
  conflicting "omit*" properties can safely be removed, or changed to
  "true" for consistent behavior with previous Solr versions.  This
  situation has now been fixed to cause an error on startup when these
  contradictory options.  See SOLR-2669.

* FacetComponent no longer catches and embeds exceptions occurred during facet
  processing, it throws HTTP 400 or 500 exceptions instead.

New Features
----------------------

* SOLR-2540: CommitWithin as an Update Request parameter
  You can now specify &commitWithin=N (ms) on the update request (janhoy)

* SOLR-2458: post.jar enhanced to handle JSON, CSV and <optimize> (janhoy)

* LUCENE-3234: add a new parameter hl.phraseLimit for FastVectorHighlighter speed up.
  (Mike Sokolov via koji)

* SOLR-2429: Ability to add cache=false to queries and query filters to avoid
  using the filterCache or queryCache.  A cost may also be specified and is used
  to order the evaluation of non-cached filters from least to greatest cost .
  For very expensive query filters (cost >= 100) if the query implements
  the PostFilter interface, it will be used to obtain a Collector that is
  checked only for documents that match the main query and all other filters.
  The "frange" query now implements the PostFilter interface.  (yonik)

* SOLR-2630: Added new XsltUpdateRequestHandler that works like
  XmlUpdateRequestHandler but allows to transform the POSTed XML document
  using XSLT. This allows to POST arbitrary XML documents to the update
  handler, as long as you also provide a XSL to transform them to a valid
  Solr input document.  (Upayavira, Uwe Schindler)

* SOLR-2615: Log individual updates (adds and deletes) at the FINE level
  before adding to the index.  Fix a null pointer exception in logging
  when there was no unique key. (David Smiley via yonik)

* LUCENE-2048: Added omitPositions to the schema, so you can omit position
  information while still indexing term frequencies.  (rmuir)

* SOLR-2584: add UniqFieldsUpdateProcessor that removes duplicate values in the
  specified fields. (Elmer Garduno, koji)

* SOLR-2670: Added NIOFSDirectoryFactory (yonik)

* SOLR-2523: Added support in SolrJ to easily interact with range facets.
  The range facet response can be parsed and is retrievable from the
  QueryResponse class. The SolrQuery class has convenient methods for using
  range facets. (Martijn van Groningen)

* SOLR-2637: Added support for group result parsing in SolrJ.
  (Tao Cheng, Martijn van Groningen)

* SOLR-2665: Added post group faceting. Facet counts are based on the most
  relevant document of each group matching the query. This feature has the
  same impact on the StatsComponent. (Martijn van Groningen)

* SOLR-2675: CoreAdminHandler now allows arbitrary properties to be
  specified when CREATEing a new SolrCore using property.* request
  params.  (Yury Kats, hossman)

* SOLR-2714: JSON update format - "null" field values are now dropped
  instead of causing an exception. (Trygve Laugstøl, yonik)


Optimizations
----------------------

* LUCENE-3233: Improved memory usage, build time, and performance of
  SynonymFilterFactory.  (Mike McCandless, Robert Muir)

Bug Fixes
----------------------

* SOLR-2625: TermVectorComponent throws NPE if TF-IDF option is used without DF
  option. (Daniel Erenrich, Simon Willnauer)

* SOLR-2631: PingRequestHandler should not allow to ping itself using "qt"
  param to prevent infinite loop. (Edoardo Tosca, Uwe Schindler)

* SOLR-2636: Fix explain functionality for negative queries. (Tom Hill via yonik)

* SOLR-2538: Range Faceting on long/double fields could overflow if values
  bigger then the max int/float were used.
  (Erbi Hanka, hossman)

* SOLR-2230: CommonsHttpSolrServer.addFile could not be used to send
  multiple files in a single request.
  (Stephan Günther, hossman)

* SOLR-2541: PluginInfos was not correctly parsing <long/> tags when
  initializing plugins
  (Frank Wesemann, hossman)

* SOLR-2623: Solr JMX MBeans do not survive core reloads (Alexey Serba, shalin)

* Fixed grouping bug when start is bigger than rows and format is simple that zero documents are returned even
  if there are documents to display. (Martijn van Groningen, Nikhil Chhaochharia)

* SOLR-2564: Fixed ArrayIndexOutOfBoundsException when using simple format and
  start > 0 (Martijn van Groningen, Matteo Melli)

* SOLR-2642: Fixed sorting by function when using grouping. (Thomas Heigl, Martijn van Groningen)

* SOLR-2535: REGRESSION: in Solr 3.x and trunk the admin/file handler
  fails to show directory listings (David Smiley, Peter Wolanin via Erick Erickson)

* SOLR-2545: ExternalFileField file parsing would fail if any key
  contained an "=" character.  It now only looks for the last "=" delimiter
  prior to the float value.
  (Markus Jelsma, hossman)

* SOLR-2662: When Solr is configured to have no queryResultCache, the
  "start" parameter was not honored and the documents returned were
   0 through start+offset.  (Markus Jelsma, yonik)

* SOLR-2669: Fix backwards validation of field properties in
  SchemaField.calcProps (hossman)

* SOLR-2676: Add "welcome-file-list" to solr.war so admin UI works correctly
  in servlet containers such as WebSphere that do not use a default list
  (Jay R. Jaeger, hossman)

* SOLR-2606: Fixed sort parsing of fields containing punctuation that
  failed due to sort by function changes introduced in SOLR-1297
  (Mitsu Hadeishi, hossman)

* SOLR-2706: contrib/clustering: The carrot.lexicalResourcesDir parameter
  now works with absolute directories (Stanislaw Osinski)

* SOLR-2692: contrib/clustering: Typo in param name fixed: "carrot.fragzise"
  changed to "carrot.fragSize" (Stanislaw Osinski).

* SOLR-2644: When using DIH with threads=2 the default logging is set too high
  (Bill Bell via shalin)

* SOLR-2492: DIH does not commit if only deletes are processed
  (James Dyer via shalin)

* SOLR-2186: DataImportHandler's multi-threaded option throws NPE
  (Lance Norskog, Frank Wesemann, shalin)

* SOLR-2655: DIH multi threaded mode does not resolve attributes correctly
  (Frank Wesemann, shalin)

* SOLR-2695: DIH: Documents are collected in unsynchronized list in
  multi-threaded debug mode (Michael McCandless, shalin)

* SOLR-2668: DIH multithreaded mode does not rollback on errors from
  EntityProcessor (Frank Wesemann, shalin)

Other Changes
----------------------

* SOLR-2629: Eliminate deprecation warnings in some JSPs.
  (Bernd Fehling, hossman)

* SOLR-2743: Remove commons logging from contrib/extraction. (koji)


Build
----------------------

* SOLR-2452,SOLR-2653,LUCENE-3323,SOLR-2659,LUCENE-3329,SOLR-2666:
  Rewrote the Solr build system:
  - Integrated more fully with the Lucene build system: generalized the
    Lucene build system and eliminated duplication.
  - Converted all Solr contribs to the Lucene/Solr conventional src/ layout:
    java/, resources/, test/, and test-files/<contrib-name>.
  - Created a new Solr-internal module named "core" by moving the java/,
    test/, and test-files/ directories from solr/src/ to solr/core/src/.
  - Merged solr/src/webapp/src/ into solr/core/src/java/.
  - Eliminated solr/src/ by moving all its directories up one level;
    renamed solr/src/site/ to solr/site-src/ because solr/site/ already
    exists.
  - Merged solr/src/common/ into solr/solrj/src/java/.
  - Moved o.a.s.client.solrj.* and o.a.s.common.* tests from
    solr/src/test/ to solr/solrj/src/test/.
  - Made the solrj tests not depend on the solr core tests by moving
    some classes from solr/src/test/ to solr/test-framework/src/java/.
  - Each internal module (core/, solrj/, test-framework/, and webapp/)
    now has its own build.xml, from which it is possible to run
    module-specific targets.  solr/build.xml delegates all build
    tasks (via <ant dir="internal-module-dir"> calls) to these
    modules' build.xml files.
  (Steve Rowe, Robert Muir)

* LUCENE-3406: Add ant target 'package-local-src-tgz' to Lucene and Solr
  to package sources from the local working copy.
  (Seung-Yeoul Yang via Steve Rowe)

Documentation
----------------------

==================  3.3.0  ==================

Upgrading from Solr 3.2.0
----------------------
 * SolrCore's CloseHook API has been changed in a backward-incompatible way. It
   has been changed from an interface to an abstract class. Any custom
   components which use the SolrCore.addCloseHook method will need to
   be modified accordingly. To migrate, put your old CloseHook#close impl into
   CloseHook#preClose.

New Features
----------------------

* SOLR-2378: A new, automaton-based, implementation of suggest (autocomplete)
  component, offering an order of magnitude smaller memory consumption
  compared to ternary trees and jaspell and very fast lookups at runtime.
  (Dawid Weiss)

* SOLR-2400: Field- and DocumentAnalysisRequestHandler now provide a position
  history for each token, so you can follow the token through all analysis stages.
  The output contains a separate int[] attribute containing all positions from
  previous Tokenizers/TokenFilters (called "positionHistory").
  (Uwe Schindler)

* SOLR-2524: (SOLR-236, SOLR-237, SOLR-1773, SOLR-1311) Grouping / Field collapsing
  using the Lucene grouping contrib. The search result can be grouped by field and query.
  (Martijn van Groningen, Emmanuel Keller, Shalin Shekhar Mangar, Koji Sekiguchi,
   Iván de Prado, Ryan McKinley, Marc Sturlese, Peter Karich, Bojan Smid,
   Charles Hornberger, Dieter Grad, Dmitry Lihachev, Doug Steigerwald,
   Karsten Sperling, Michael Gundlach, Oleg Gnatovskiy, Thomas Traeger,
   Harish Agarwal, yonik, Michael McCandless, Bill Bell)

* SOLR-1331 -- Added a srcCore parameter to CoreAdminHandler's mergeindexes action
  to merge one or more cores' indexes to a target core (shalin)

* SOLR-2610 -- Add an option to delete index through CoreAdmin UNLOAD action (shalin)

* SOLR-2480: Add ignoreTikaException flag to the extraction request handler so
  that users can ignore TikaException but index meta data.
  (Shinichiro Abe, koji)

* SOLR-2582: Use uniqueKey for error log in UIMAUpdateRequestProcessor.
  (Tommaso Teofili via koji)

Optimizations
----------------------

* SOLR-2567: Solr now defaults to TieredMergePolicy. See http://s.apache.org/merging
  for more information.  (rmuir)

Bug Fixes
----------------------

* SOLR-2519: Improve text_* fieldTypes in example schema.xml: improve
  cross-language defaults for text_general; break out separate
  English-specific fieldTypes (Jan Høydahl, hossman, Robert Muir,
  yonik, Mike McCandless)

* SOLR-2462: Fix extremely high memory usage problems with spellcheck.collate.
  Separately, an additional spellcheck.maxCollationEvaluations (default=10000)
  parameter is added to avoid excessive CPU time in extreme cases (e.g. long
  queries with many misspelled words).  (James Dyer via rmuir)

* SOLR-2579: UIMAUpdateRequestProcessor ignore error fails if text.length() < 100.
  (Elmer Garduno via koji)

* SOLR-2581: UIMAToSolrMapper wrongly instantiates Type with reflection.
  (Tommaso Teofili via koji)

* SOLR-2551: Check dataimport.properties for write access (if delta-import is
  supported in DIH configuration) before starting an import (C S, shalin)

Other Changes
----------------------

* SOLR-2571: Add a commented out example of the spellchecker's thresholdTokenFrequency
  parameter to the example solrconfig.xml, and also add a unit test for this feature.
  (James Dyer via rmuir)

* SOLR-2576: Deprecate SpellingResult.add(Token token, int docFreq), please use
  SpellingResult.addFrequency(Token token, int docFreq) instead.
  (James Dyer via rmuir)

* SOLR-2574: Upgrade slf4j to v1.6.1 (shalin)

* LUCENE-3204: The maven-ant-tasks jar is now included in the source tree;
  users of the generate-maven-artifacts target no longer have to manually
  place this jar in the Ant classpath.  NOTE: when Ant looks for the
  maven-ant-tasks jar, it looks first in its pre-existing classpath, so
  any copies it finds will be used instead of the copy included in the
  Lucene/Solr source tree.  For this reason, it is recommeded to remove
  any copies of the maven-ant-tasks jar in the Ant classpath, e.g. under
  ~/.ant/lib/ or under the Ant installation's lib/ directory. (Steve Rowe)

* SOLR-2611: Fix typos in the example configuration (Eric Pugh via rmuir)

==================  3.2.0  ==================
Versions of Major Components
---------------------
Apache Lucene trunk
Apache Tika 0.8
Carrot2 3.4.2


Upgrading from Solr 3.1
----------------------

* The updateRequestProcessorChain for a RequestHandler is now defined
  with update.chain rather than update.processor. The latter still works,
  but has been deprecated.

* <uimaConfig/> just beneath <config> ... </config> is no longer supported.
  It should move to UIMAUpdateRequestProcessorFactory setting.
  See contrib/uima/README.txt for more details. (SOLR-2436)

Detailed Change List
----------------------

New Features
----------------------

* SOLR-2496: Add ability to specify overwrite and commitWithin as request
  parameters (e.g. specified in the URL) when using the JSON update format,
  and added a simplified format for specifying multiple documents.
  Example: [{"id":"doc1"},{"id":"doc2"}]
  (yonik)

* SOLR-2113: Add TermQParserPlugin, registered as "term".  This is useful
  when generating filter queries from terms returned from field faceting or
  the terms component. Example: fq={!term f=weight}1.5   (hossman, yonik)

* SOLR-1915: DebugComponent now supports using a NamedList to model
  Explanation objects in its responses instead of
  Explanation.toString  (hossman)

* SOLR-2448: Search results clustering updates: bisecting k-means
  clustering algorithm added, loading of Carrot2 stop words from
  <solr.home>/conf/carrot2 (SOLR-2449), using Solr's stopwords.txt
  for clustering (SOLR-2450), output of cluster scores (SOLR-2505)
  (Stanislaw Osinski, Dawid Weiss).

* SOLR-2503: extend UIMAUpdateRequestProcessorFactory mapping function to
  map feature value to dynamicField. (koji)

* SOLR-2512: add ignoreErrors flag to UIMAUpdateRequestProcessorFactory so
  that users can ignore exceptions in AE. (Tommaso Teofili, koji)

Optimizations
----------------------

Bug Fixes
----------------------

* SOLR-2445: Change the default qt to blank in form.jsp, because there is no "standard"
  request handler unless you have it in your solrconfig.xml explicitly. (koji)

* SOLR-2455: Prevent double submit of forms in admin interface.
  (Jeffrey Chang via uschindler)

* SOLR-2464: Fix potential slowness in QueryValueSource (the query() function) when
  the query is very sparse and may not match any documents in a segment. (yonik)

* SOLR-2469: When using java replication with replicateAfter=startup, the first
  commit point on server startup is never removed. (yonik)

* SOLR-2466: SolrJ's CommonsHttpSolrServer would retry requests on failure, regardless
  of the configured maxRetries, due to HttpClient having its own retry mechanism
  by default.  The retryCount of HttpClient is now set to 0, and SolrJ does
  the retry.  (yonik)

* SOLR-2409: edismax parser - treat the text of a fielded query as a literal if the
  fieldname does not exist.  For example Mission: Impossible should not search on
  the "Mission" field unless it's a valid field in the schema.  (Ryan McKinley, yonik)

* SOLR-2403: facet.sort=index reported incorrect results for distributed search
  in a number of scenarios when facet.mincount>0.  This patch also adds some
  performance/algorithmic improvements when (facet.sort=count && facet.mincount=1
  && facet.limit=-1) and when (facet.sort=index && facet.mincount>0)  (yonik)

* SOLR-2333: The "rename" core admin action does not persist the new name to solr.xml
  (Rasmus Hahn, Paul R. Brown via Mark Miller)

* SOLR-2390: Performance of usePhraseHighlighter is terrible on very large Documents,
  regardless of hl.maxDocCharsToAnalyze. (Mark Miller)

* SOLR-2474: The helper TokenStreams in analysis.jsp and AnalysisRequestHandlerBase
  did not clear all attributes so they displayed incorrect attribute values for tokens
  in later filter stages. (uschindler, rmuir, yonik)

* SOLR-2467: Fix <analyzer class="..." /> initialization so any errors
  are logged properly.  (hossman)

* SOLR-2493: SolrQueryParser was fixed to not parse the SolrConfig DOM tree on each
  instantiation which is a huge slowdown.  (Stephane Bailliez via uschindler)

* SOLR-2495: The JSON parser could hang on corrupted input and could fail
  to detect numbers that were too large to fit in a long.  (yonik)

* SOLR-2520: Make JSON response format escape \u2029 as well as \u2028
  in strings since those characters are not valid in javascript strings
  (although they are valid in JSON strings).  (yonik)

* SOLR-2536: Add ReloadCacheRequestHandler to fix ExternalFileField bug (if reopenReaders
  set to true and no index segments have been changed, commit cannot trigger reload
  external file). (koji)

* SOLR-2539: VectorValueSource.floatVal incorrectly used byteVal on sub-sources.
  (Tom Liu via yonik)

* SOLR-2554: RandomSortField didn't work when used in a function query. (yonik)


Other Changes
----------------------

* SOLR-2061: Pull base tests out into a new Solr Test Framework module,
  and publish binary, javadoc, and source test-framework jars.
  (Drew Farris, Robert Muir, Steve Rowe)

* SOLR-2105: Rename RequestHandler param 'update.processor' to 'update.chain'.
  (Jan Høydahl via Mark Miller)

* SOLR-2485: Deprecate BaseResponseWriter, GenericBinaryResponseWriter, and
  GenericTextResponseWriter.  These classes will be removed in 4.0.  (ryan)

* SOLR-2451: Enhance assertJQ to allow individual tests to specify the
  tolerance delta used in numeric equalities.  This allows for slight
  variance in asserting score comparisons in unit tests.
  (David Smiley, Chris Hostetter)

* SOLR-2528: Remove default="true" from HtmlEncoder in example solrconfig.xml,
  because html encoding confuses non-ascii users. (koji)

* SOLR-2387: add mock annotators for improved testing in contrib/uima,
  (Tommaso Teofili via rmuir)

* SOLR-2436: move uimaConfig to under the uima's update processor in
  solrconfig.xml.  (Tommaso Teofili, koji)

Build
----------------------

* LUCENE-3006: Building javadocs will fail on warnings by default.  Override with -Dfailonjavadocwarning=false (sarowe, gsingers)


Documentation
----------------------


==================  3.1.0 ==================
Versions of Major Components
---------------------
Apache Lucene 3.1.0
Apache Tika 0.8
Carrot2 3.4.2
Velocity 1.6.1 and Velocity Tools 2.0-beta3
Apache UIMA 2.3.1-SNAPSHOT


Upgrading from Solr 1.4
----------------------

* The Lucene index format has changed and as a result, once you upgrade,
  previous versions of Solr will no longer be able to read your indices.
  In a master/slave configuration, all searchers/slaves should be upgraded
  before the master.  If the master were to be updated first, the older
  searchers would not be able to read the new index format.

* The Solr JavaBin format has changed as of Solr 3.1. If you are using the
  JavaBin format, you will need to upgrade your SolrJ client. (SOLR-2034)

* The experimental ALIAS command has been removed (SOLR-1637)

* Using solr.xml is recommended for single cores also (SOLR-1621)

* Old syntax of <highlighting> configuration in solrconfig.xml
  is deprecated (SOLR-1696)

* The deprecated HTMLStripReader, HTMLStripWhitespaceTokenizerFactory and
  HTMLStripStandardTokenizerFactory were removed. To strip HTML tags,
  HTMLStripCharFilter should be used instead, and it works with any
  Tokenizer of your choice.  (SOLR-1657)

* Field compression is no longer supported. Fields that were formerly
  compressed will be uncompressed as index segments are merged. For
  shorter fields, this may actually be an improvement, as the compression
  used was not very good for short text. Some indexes may get larger though.

* SOLR-1845: The TermsComponent response format was changed so that the
  "terms" container is a map instead of a named list.  This affects
   response formats like JSON, but not XML. (yonik)

* SOLR-1876: All Analyzers and TokenStreams are now final to enforce
  the decorator pattern.  (rmuir, uschindler)

* LUCENE-2608: Added the ability to specify the accuracy on a per request basis.
  It is recommended that implementations of SolrSpellChecker should change over to the new SolrSpellChecker
  methods using the new SpellingOptions class, but are not required to.  While this change is
  backward compatible, the trunk version of Solr has already dropped support for all but the SpellingOptions method. (gsingers)

* readercycle script was removed. (SOLR-2046)

* In previous releases, sorting or evaluating function queries on
  fields that were "multiValued" (either by explicit declaration in
  schema.xml or by implict behavior because the "version" attribute on
  the schema was less then 1.2) did not generally work, but it would
  sometimes silently act as if it succeeded and order the docs
  arbitrarily.  Solr will now fail on any attempt to sort, or apply a
  function to, multi-valued fields

* The DataImportHandler jars are no longer included in the solr
  WAR and should be added in Solr's lib directory, or referenced
  via the <lib> directive in solrconfig.xml.


Detailed Change List
----------------------

New Features
----------------------

* SOLR-1302: Added several new distance based functions, including
  Great Circle (haversine), Manhattan, Euclidean and String (using the
  StringDistance methods in the Lucene spellchecker).
  Also added geohash(), deg() and rad() convenience functions.
  See https://lucene.apache.org/solr/guide/function-queries.html (gsingers)

* SOLR-1553: New dismax parser implementation (accessible as "edismax")
  that supports full lucene syntax, improved reserved char escaping,
  fielded queries, improved proximity boosting, and improved stopword
  handling. Note: status is experimental for now. (yonik)

* SOLR-1574: Add many new functions from java Math (e.g. sin, cos) (yonik)

* SOLR-1569: Allow functions to take in literal strings by modifying the
  FunctionQParser and adding LiteralValueSource (gsingers)

* SOLR-1571: Added unicode collation support though Lucene's CollationKeyFilter
  (Robert Muir via shalin)

* SOLR-785: Distributed Search support for SpellCheckComponent
  (Matthew Woytowitz, shalin)

* SOLR-1625: Add regexp support for TermsComponent (Uri Boness via noble)

* SOLR-1297: Add sort by Function capability (gsingers, yonik)

* SOLR-1139: Add TermsComponent Query and Response Support in SolrJ (Matt Weber via shalin)

* SOLR-1177: Distributed Search support for TermsComponent (Matt Weber via shalin)

* SOLR-1621, SOLR-1722: Allow current single core deployments to be specified by solr.xml (Mark Miller , noble)

* SOLR-1532: Allow StreamingUpdateSolrServer to use a provided HttpClient (Gabriele Renzi via shalin)

* SOLR-1653: Add PatternReplaceCharFilter (koji)

* SOLR-1131: FieldTypes can now output multiple Fields per Type and still be searched.  This can be handy for hiding the details of a particular
  implementation such as in the spatial case. (Chris Mattmann, shalin, noble, gsingers, yonik)

* SOLR-1586: Add support for Geohash and Spatial Tile FieldType (Chris Mattmann, gsingers)

* SOLR-1697: PluginInfo should load plugins w/o class attribute also (noble)

* SOLR-1268: Incorporate FastVectorHighlighter (koji)

* SOLR-1750: SolrInfoMBeanHandler added for simpler programmatic access
  to info currently available from registry.jsp and stats.jsp
  (ehatcher, hossman)

* SOLR-1815: SolrJ now preserves the order of facet queries. (yonik)

* SOLR-1677: Add support for choosing the Lucene Version for Lucene components within
  Solr. (Uwe Schindler, Mark Miller)

* SOLR-1379: Add RAMDirectoryFactory for non-persistent in memory index storage.
  (Alex Baranov via yonik)

* SOLR-1857: Synced Solr analysis with Lucene 3.1. Added KeywordMarkerFilterFactory
  and StemmerOverrideFilterFactory, which can be used to tune stemming algorithms.
  Added factories for Bulgarian, Czech, Hindi, Turkish, and Wikipedia analysis. Improved the
  performance of SnowballPorterFilterFactory.  (rmuir)

* SOLR-1657: Converted remaining TokenStreams to the Attributes-based API. All Solr
  TokenFilters now support custom Attributes, and some have improved performance:
  especially WordDelimiterFilter and CommonGramsFilter.  (rmuir, cmale, uschindler)

* SOLR-1740: ShingleFilterFactory supports the "minShingleSize" and "tokenSeparator"
  parameters for controlling the minimum shingle size produced by the filter, and
  the separator string that it uses, respectively.  (Steven Rowe via rmuir)

* SOLR-744: ShingleFilterFactory supports the "outputUnigramsIfNoShingles"
  parameter, to output unigrams if the number of input tokens is fewer than
  minShingleSize, and no shingles can be generated.
  (Chris Harris via Steven Rowe)

* SOLR-1923: PhoneticFilterFactory now has support for the
  Caverphone algorithm. (rmuir)

* SOLR-1957: The VelocityResponseWriter contrib moved to core.
       Example search UI now available at http://localhost:8983/solr/browse
       (ehatcher)

* SOLR-1974: Add LimitTokenCountFilterFactory. (koji)

* SOLR-1966: QueryElevationComponent can now return just the included results in the elevation file (gsingers, yonik)

* SOLR-1556: TermVectorComponent now supports per field overrides.  Also, it now throws an error
 if passed in fields do not exist and warnings
  if fields that do not have term vector options (termVectors, offsets, positions)
   that align with the schema declaration. It also
    will now return warnings about (gsingers)

* SOLR-1985: FastVectorHighlighter: add wrapper class for Lucene's SingleFragListBuilder (koji)

* SOLR-1984: Add HyphenationCompoundWordTokenFilterFactory. (PB via rmuir)

* SOLR-397: Date Faceting now supports a "facet.date.include" param
  for specifying when the upper & lower end points of computed date
  ranges should be included in the range.  Legal values are: "all",
  "lower", "upper", "edge", and "outer".  For backwards compatibility
  the default value is the set: [lower,upper,edge], so that all ranges
  between start and end are inclusive of their endpoints, but the
  "before" and "after" ranges are not.

* SOLR-945: JSON update handler that accepts add, delete, commit
  commands in JSON format. (Ryan McKinley, yonik)

* SOLR-2015: Add a boolean attribute autoGeneratePhraseQueries to TextField.
  autoGeneratePhraseQueries="true" (the default) causes the query parser to
  generate phrase queries if multiple tokens are generated from a single
  non-quoted analysis string.  For example WordDelimiterFilter splitting text:pdp-11
  will cause the parser to generate text:"pdp 11" rather than (text:PDP OR text:11).
  Note that autoGeneratePhraseQueries="true" tends to not work well for non whitespace
  delimited languages. (yonik)

* SOLR-1925: Add CSVResponseWriter (use wt=csv) that returns the list of documents
  in CSV format. (Chris Mattmann, yonik)

* SOLR-1240: "Range Faceting" has been added.  This is a generalization
  of the existing "Date Faceting" logic so that it now supports any
  all stock numeric field types that support range queries in addition
  to dates. facet.date is now deprecated in favor of this generalized mechanism.
  (Gijs Kunze, hossman)

* SOLR-2021: Add SolrEncoder plugin to Highlighter. (koji)

* SOLR-2030: Make FastVectorHighlighter use of SolrEncoder. (koji)

* SOLR-2053: Add support for custom comparators in Solr spellchecker, per LUCENE-2479 (gsingers)

* SOLR-2049: Add hl.multiValuedSeparatorChar for FastVectorHighlighter, per LUCENE-2603. (koji)

* SOLR-2059: Add "types" attribute to WordDelimiterFilterFactory, which
  allows you to customize how WordDelimiterFilter tokenizes text with
  a configuration file.  (Peter Karich, rmuir)

* SOLR-2099: Add ability to throttle rsync based replication using rsync option --bwlimit.
  (Brandon Evans via koji)

* SOLR-1316: Create autosuggest component.
   (Ankul Garg, Jason Rutherglen, Shalin Shekhar Mangar, Grant Ingersoll, Robert Muir, ab)

* SOLR-1568: Added "native" filtering support for PointType, GeohashField.  Added LatLonType with filtering support too.  See
  http://wiki.apache.org/solr/SpatialSearch and the example.  Refactored some items in Lucene spatial.
  Removed SpatialTileField as the underlying CartesianTier is broken beyond repair and is going to be moved. (gsingers)

* SOLR-2128: Full parameter substitution for function queries.
  Example: q=add($v1,$v2)&v1=mul(popularity,5)&v2=20.0
  (yonik)

* SOLR-2133: Function query parser can now parse multiple comma separated
  value sources.  It also now fails if there is extra unexpected text
  after parsing the functions, instead of silently ignoring it.
  This allows expressions like q=dist(2,vector(1,2),$pt)&pt=3,4   (yonik)

* SOLR-2157: Suggester should return alpha-sorted results when onlyMorePopular=false (ab)

* SOLR-2010: Added ability to verify that spell checking collations have
   actual results in the index.  (James Dyer via gsingers)

* SOLR-2188: Added "maxTokenLength" argument to the factories for ClassicTokenizer,
  StandardTokenizer, and UAX29URLEmailTokenizer. (Steven Rowe)

* SOLR-2129: Added a Solr module for dynamic metadata extraction/indexing with Apache UIMA.
  See contrib/uima/README.txt for more information.  (Tommaso Teofili via rmuir)

* SOLR-2325: Allow tagging and exclusion of main query for faceting. (yonik)

* SOLR-2263: Add ability for RawResponseWriter to stream binary files as well as
  text files.  (Eric Pugh via yonik)

* SOLR-860: Add debug output for MoreLikeThis. (koji)

* SOLR-1057: Add PathHierarchyTokenizerFactory. (ryan, koji)

* SOLR-1804: Re-enabled clustering component on trunk, updated to latest
  version of Carrot2.  No more LGPL run-time dependencies.  This release of
  C2 also does not have a specific Lucene dependency.
  (Stanislaw Osinski, gsingers)

* SOLR-2282: Add distributed search support for search result clustering.
  (Brad Giaccio, Dawid Weiss, Stanislaw Osinski, rmuir, koji)

* SOLR-2210: Add icu-based tokenizer and filters to contrib/analysis-extras (rmuir)

* SOLR-1336: Add SmartChinese (word segmentation for Simplified Chinese)
  tokenizer and filters to contrib/analysis-extras (rmuir)

* SOLR-2211,LUCENE-2763: Added UAX29URLEmailTokenizerFactory, which implements
  UAX#29, a unicode algorithm with good results for most languages, as well as
  URL and E-mail tokenization according to the relevant RFCs.
  (Tom Burton-West via rmuir)

* SOLR-2237: Added StempelPolishStemFilterFactory to contrib/analysis-extras (rmuir)

* SOLR-1525: allow DIH to refer to core properties (noble)

* SOLR-1547: DIH TemplateTransformer copy objects more intelligently when the
  template is a single variable (noble)

* SOLR-1627: DIH VariableResolver should be fetched just in time (noble)

* SOLR-1583: DIH Create DataSources that return InputStream (noble)

* SOLR-1358: Integration of Tika and DataImportHandler (Akshay Ukey, noble)

* SOLR-1654: TikaEntityProcessor example added DIHExample
  (Akshay Ukey via noble)

* SOLR-1678: Move onError handling to DIH framework (noble)

* SOLR-1352: Multi-threaded implementation of DIH (noble)

* SOLR-1721: Add explicit option to run DataImportHandler in synchronous mode
  (Alexey Serba via noble)

* SOLR-1737: Added FieldStreamDataSource (noble)


Optimizations
----------------------

* SOLR-1679: Don't build up string messages in SolrCore.execute unless they
  are necessary for the current log level.
  (Fuad Efendi and hossman)

* SOLR-1874: Optimize PatternReplaceFilter for better performance. (rmuir, uschindler)

* SOLR-1968: speed up initial filter cache population for facet.method=enum and
  also big terms for multi-valued facet.method=fc.  The resulting speedup
  for the first facet request is anywhere from 30% to 32x, depending on how many
  terms are in the field and how many documents match per term.  (yonik)

* SOLR-2089: Speed up UnInvertedField faceting (facet.method=fc for
  multi-valued fields) when facet.limit is both high, and a high enough
  percentage of the number of unique terms in the field.  Extreme cases
  yield speedups over 3x. (yonik)

* SOLR-2046: add common functions to scripts-util. (koji)

* SOLR-1684: Switch clustering component to use the
  SolrIndexSearcher.doc(int, Set<String>) method b/c it can use the document
  cache (gsingers)

* SOLR-2200: Improve the performance of DataImportHandler for large
  delta-import updates. (Mark Waddle via rmuir)

Bug Fixes
----------------------
* SOLR-1769: Solr 1.4 Replication - Repeater throwing NullPointerException (Jörgen Rydenius via noble)

* SOLR-1432: Make the new ValueSource.getValues(context,reader) delegate
  to the original ValueSource.getValues(reader) so custom sources
  will work. (yonik)

* SOLR-1572: FastLRUCache correctly implemented the LRU policy only
  for the first 2B accesses. (yonik)

* SOLR-1582: copyField was ignored for BinaryField types (gsingers)

* SOLR-1563: Binary fields, including trie-based numeric fields, caused null
  pointer exceptions in the luke request handler. (yonik)

* SOLR-1577: The example solrconfig.xml defaulted to a solr data dir
  relative to the current working directory, even if a different solr home
  was being used.  The new behavior changes the default to a zero length
  string, which is treated the same as if no dataDir had been specified,
  hence the "data" directory under the solr home will be used.  (yonik)

* SOLR-1584: SolrJ - SolrQuery.setIncludeScore() incorrectly added
  fl=score to the parameter list instead of appending score to the
  existing field list. (yonik)

* SOLR-1580: Solr Configuration ignores 'mergeFactor' parameter, always
  uses Lucene default. (Lance Norskog via Mark Miller)

* SOLR-1593: ReverseWildcardFilter didn't work for surrogate pairs
  (i.e. code points outside of the BMP), resulting in incorrect
  matching.  This change requires reindexing for any content with
  such characters.  (Robert Muir, yonik)

* SOLR-1596: A rollback operation followed by the shutdown of Solr
  or the close of a core resulted in a warning:
  "SEVERE: SolrIndexWriter was not closed prior to finalize()" although
  there were no other consequences. (yonik)

* SOLR-1595: StreamingUpdateSolrServer used the platform default character
  set when streaming updates, rather than using UTF-8 as the HTTP headers
  indicated, leading to an encoding mismatch. (hossman, yonik)

* SOLR-1587: A distributed search request with fl=score, didn't match
  the behavior of a non-distributed request since it only returned
  the id,score fields instead of all fields in addition to score. (yonik)

* SOLR-1601: Schema browser does not indicate presence of charFilter. (koji)

* SOLR-1615: Backslash escaping did not work in quoted strings
  for local param arguments. (Wojtek Piaseczny, yonik)

* SOLR-1628: log contains incorrect number of adds and deletes.
  (Thijs Vonk via yonik)

* SOLR-343: Date faceting now respects facet.mincount limiting
  (Uri Boness, Raiko Eckstein via hossman)

* SOLR-1624: Highlighter only highlights values from the first field  value
  in a multivalued field when term positions (term vectors) are stored.
  (Chris Harris via yonik)

* SOLR-1635: Fixed error message when numeric values can't be parsed by
  DOMUtils - notably for plugin init params in solrconfig.xml.
  (hossman)

* SOLR-1651: Fixed Incorrect dataimport handler package name in SolrResourceLoader
  (Akshay Ukey via shalin)

* SOLR-1660: CapitalizationFilter crashes if you use the maxWordCountOption
  (Robert Muir via shalin)

* SOLR-1667: PatternTokenizer does not reset attributes such as positionIncrementGap
  (Robert Muir via shalin)

* SOLR-1711: SolrJ - StreamingUpdateSolrServer had a race condition that
  could halt the streaming of documents. The original patch to fix this
  (never officially released) introduced another hanging bug due to
  connections not being released.
  (Attila Babo, Erik Hetzner, Johannes Tuchscherer via yonik)

* SOLR-1748, SOLR-1747, SOLR-1746, SOLR-1745, SOLR-1744: Streams and Readers
  retrieved from ContentStreams are not closed in various places, resulting
  in file descriptor leaks.
  (Christoff Brill, Mark Miller)

* SOLR-1753: StatsComponent throws NPE when getting statistics for facets in distributed search
  (Janne Majaranta via koji)

* SOLR-1736:In the slave , If 'mov'ing file does not succeed , copy the file (noble)

* SOLR-1579: Fixes to XML escaping in stats.jsp
  (David Bowen and hossman)

* SOLR-1777: fieldTypes with sortMissingLast=true or sortMissingFirst=true can
  result in incorrectly sorted results.  (yonik)

* SOLR-1798: Small memory leak (~100 bytes) in fastLRUCache for every
  commit. (yonik)

* SOLR-1823: Fixed XMLResponseWriter (via XMLWriter) so it no longer throws
  a ClassCastException when a Map containing a non-String key is used.
  (Frank Wesemann, hossman)

* SOLR-1797: fix ConcurrentModificationException and potential memory
  leaks in ResourceLoader. (yonik)

* SOLR-1850: change KeepWordFilter so a new word set is not created for
  each instance (John Wang via yonik)

* SOLR-1706: fixed WordDelimiterFilter for certain combinations of options
  where it would output incorrect tokens. (Robert Muir, Chris Male)

* SOLR-1936: The JSON response format needed to escape unicode code point
  U+2028 - 'LINE SEPARATOR' (Robert Hofstra, yonik)

* SOLR-1914: Change the JSON response format to output float/double
  values of NaN,Infinity,-Infinity as strings. (yonik)

* SOLR-1948: PatternTokenizerFactory should use parent's args (koji)

* SOLR-1870: Indexing documents using the 'javabin' format no longer
  fails with a ClassCastException whenSolrInputDocuments contain field
  values which are Collections or other classes that implement
  Iterable. (noble, hossman)

* SOLR-1981: Solr will now fail correctly if solr.xml attempts to
  specify multiple cores that have the same name (hossman)

* SOLR-1791: Fix messed up core names on admin gui (yonik via koji)

* SOLR-1995: Change date format from "hour in am/pm" to "hour in day"
  in CoreContainer and SnapShooter. (Hayato Ito, koji)

* SOLR-2008: avoid possible RejectedExecutionException w/autoCommit
  by making SolreCore close the UpdateHandler before closing the
  SearchExecutor.  (NarasimhaRaju, hossman)

* SOLR-2036: Avoid expensive fieldCache ram estimation for the
  admin stats page. (yonik)

* SOLR-2047: ReplicationHandler should accept bool type for enable flag. (koji)

* SOLR-1630: Fix spell checking collation issue related to token positions (rmuir, gsingers)

* SOLR-2100: The replication handler backup command didn't save the commit
  point and hence could fail when a newer commit caused the older commit point
  to be removed before it was finished being copied.  This did not affect
  normal master/slave replication.  (Peter Sturge via yonik)

* SOLR-2114: Fixed parsing error in hsin function.  The function signature has changed slightly. (gsingers)

* SOLR-2083: SpellCheckComponent misreports suggestions when distributed (James Dyer via gsingers)

* SOLR-2111: Change exception handling in distributed faceting to work more
  like non-distributed faceting, change facet_counts/exception from a String
  to a List<String> to enable listing all exceptions that happened, and
  prevent an exception in one facet command from affecting another
  facet command. (yonik)

* SOLR-2110: Remove the restriction on names for local params
  substitution/dereferencing.  Properly encode local params in
  distributed faceting.  (yonik)

* SOLR-2135: Fix behavior of ConcurrentLRUCache when asking for
  getLatestAccessedItems(0) or getOldestAccessedItems(0).
  (David Smiley via hossman)

* SOLR-2148: Highlighter doesn't support q.alt. (koji)

* SOLR-2180: It was possible for EmbeddedSolrServer to leave searchers
  open if a request threw an exception. (yonik)

* SOLR-2173: Suggester should always rebuild Lookup data if Lookup.load fails. (ab)

* SOLR-2081: BaseResponseWriter.isStreamingDocs causes
  SingleResponseWriter.end to be called 2x
  (Chris A. Mattmann via hossman)

* SOLR-2219: The init() method of every SolrRequestHandler was being
  called twice. (ambikeshwar singh and hossman)

* SOLR-2285: duplicate SolrEventListeners no longer created (hossman)

* SOLR-1993: fix String cast assumption in JavaBinCodec - specific
  addresses "commitWithin" option on Update requests.
  (noble, hossman, and Maxim Valyanskiy)

* SOLR-2261: fix velocity template layout.vm that referred to an older
  version of jquery.  (Eric Pugh via rmuir)

* SOLR-2307: fix bug in PHPSerializedResponseWriter (wt=phps) when
  dealing with SolrDocumentList objects -- ie: sharded queries.
  (Antonio Verni via hossman)

* SOLR-2127: Fixed serialization of default core and indentation of solr.xml when serializing.
  (Ephraim Ofir, Mark Miller)

* SOLR-2320: Fixed ReplicationHandler detail reporting for masters
  (hossman)

* SOLR-482: Provide more exception handling in CSVLoader (gsingers)

* SOLR-1283: HTMLStripCharFilter sometimes threw a "Mark Invalid" exception.
  (Julien Coloos, hossman, yonik)

* SOLR-2085: Improve SolrJ behavior when FacetComponent comes before
  QueryComponent (Tomas Salfischberger via hossman)

* SOLR-1940: Fix SolrDispatchFilter behavior when Content-Type is
  unknown (Lance Norskog and hossman)

* SOLR-1983: snappuller fails when modifiedConfFiles is not empty and
  full copy of index is needed. (Alexander Kanarsky via yonik)

* SOLR-2156: SnapPuller fails to clean Old Index Directories on Full Copy
  (Jayendra Patil via yonik)

* SOLR-96: Fix XML parsing in XMLUpdateRequestHandler and
  DocumentAnalysisRequestHandler to respect charset from XML file and only
  use HTTP header's "Content-Type" as a "hint". (uschindler)

* SOLR-2339: Fix sorting to explicitly generate an error if you
  attempt to sort on a multiValued field. (hossman)

* SOLR-2348: Fix field types to explicitly generate an error if you
  attempt to get a ValueSource for a multiValued field. (hossman)

* SOLR-2380: Distributed faceting could miss values when facet.sort=index
  and when facet.offset was greater than 0. (yonik)

* SOLR-1656: XIncludes and other HREFs in XML files loaded by ResourceLoader
  are fixed to be resolved using the URI standard (RFC 2396). The system
  identifier is no longer a plain filename with path, it gets initialized
  using a custom URI scheme "solrres:". This scheme is resolved using a
  EntityResolver that utilizes ResourceLoader
  (org.apache.solr.common.util.SystemIdResolver). This makes all relative
  pathes in Solr's config files behave like expected. This change
  introduces some backwards breaks in the API: Some config classes
  (Config, SolrConfig, IndexSchema) were changed to take
  org.xml.sax.InputSource instead of InputStream. There may also be some
  backwards breaks in existing config files, it is recommended to check
  your config files / XSLTs and replace all XIncludes/HREFs that were
  hacked to use absolute paths to use relative ones. (uschindler)

* SOLR-309: Fix FieldType so setting an analyzer on a FieldType that
  doesn't expect it will generate an error.  Practically speaking this
  means that Solr will now correctly generate an error on
  initialization if the schema.xml contains an analyzer configuration
  for a fieldType that does not use TextField.  (hossman)

* SOLR-2192: StreamingUpdateSolrServer.blockUntilFinished was not
  thread safe and could throw an exception. (yonik)

* SOLR-1692: Fix bug in clustering component relating to carrot.produceSummary
  option (gsingers)

* SOLR-1756: The date.format setting for extraction request handler causes
  ClassCastException when enabled and the config code that parses this setting
  does not properly use the same iterator instance.
  (Christoph Brill, Mark Miller)

* SOLR-1638: Fixed NullPointerException during DIH import if uniqueKey is not
  specified in schema (Akshay Ukey via shalin)

* SOLR-1639: Fixed misleading error message when dataimport.properties is not
  writable (shalin)

* SOLR-1598: DIH: Reader used in PlainTextEntityProcessor is not explicitly
  closed (Sascha Szott via noble)

* SOLR-1759: DIH: $skipDoc was not working correctly
  (Gian Marco Tagliani via noble)

* SOLR-1762: DIH: DateFormatTransformer does not work correctly with
  non-default locale dates (tommy chheng via noble)

* SOLR-1757: DIH multithreading sometimes throws NPE (noble)

* SOLR-1766: DIH with threads enabled doesn't respond to the abort command
  (Michael Henson via noble)

* SOLR-1767: dataimporter.functions.escapeSql() does not escape backslash
  character (Sean Timm via noble)

* SOLR-1811: formatDate should use the current NOW value always
  (Sean Timm via noble)

* SOLR-1794: Dataimport of CLOB fields fails when getCharacterStream() is
  defined in a superclass. (Gunnar Gauslaa Bergem via rmuir)

* SOLR-2057: DataImportHandler never calls UpdateRequestProcessor.finish()
  (Drew Farris via koji)

* SOLR-1973: Empty fields in XML update messages confuse DataImportHandler.
  (koji)

* SOLR-2221: Use StrUtils.parseBool() to get values of boolean options in DIH.
  true/on/yes (for TRUE) and false/off/no (for FALSE) can be used for
  sub-options (debug, verbose, synchronous, commit, clean, optimize) for
  full/delta-import commands. (koji)

* SOLR-2310: DIH: getTimeElapsedSince() returns incorrect hour value when
  the elapse is over 60 hours (tom liu via koji)

* SOLR-2252: DIH: When a child entity in nested entities is rootEntity="true",
  delta-import doesn't work. (koji)

* SOLR-2330: solrconfig.xml files in example-DIH are broken. (Matt Parker, koji)

* SOLR-1191: resolve DataImportHandler deltaQuery column against pk when pk
  has a prefix (e.g. pk="book.id" deltaQuery="select id from ..."). More
  useful error reporting when no match found (previously failed with a
  NullPointerException in log and no clear user feedback). (gthb via yonik)

* SOLR-2116: Fix TikaConfig classloader bug in TikaEntityProcessor
  (Martijn van Groningen via hossman)

Other Changes
----------------------

* SOLR-1602: Refactor SOLR package structure to include o.a.solr.response
  and move QueryResponseWriters in there
  (Chris A. Mattmann, ryan, hoss)

* SOLR-1516: Addition of an abstract BaseResponseWriter class to simplify the
  development of QueryResponseWriter implementations.
  (Chris A. Mattmann via noble)

* SOLR-1592: Refactor XMLWriter startTag to allow arbitrary attributes to be written
  (Chris A. Mattmann via noble)

* SOLR-1561: Added Lucene 2.9.1 spatial contrib jar to lib. (gsingers)

* SOLR-1570: Log warnings if uniqueKey is multi-valued or not stored (hossman, shalin)

* SOLR-1558: QueryElevationComponent only works if the uniqueKey field is
  implemented using StrField.  In previous versions of Solr no warning or
  error would be generated if you attempted to use QueryElevationComponent,
  it would just fail in unexpected ways.  This has been changed so that it
  will fail with a clear error message on initialization. (hossman)

* SOLR-1611: Added Lucene 2.9.1 collation contrib jar to lib (shalin)

* SOLR-1608: Extract base class from TestDistributedSearch to make
  it easy to write test cases for other distributed components. (shalin)

* Upgraded to Lucene 2.9-dev r888785 (shalin)

* SOLR-1610: Generify SolrCache (Jason Rutherglen via shalin)

* SOLR-1637: Remove ALIAS command

* SOLR-1662: Added Javadocs in BufferedTokenStream and fixed incorrect cloning
  in TestBufferedTokenStream (Robert Muir, Uwe Schindler via shalin)

* SOLR-1674: Improve analysis tests and cut over to new TokenStream API.
  (Robert Muir via Mark Miller)

* SOLR-1661: Remove adminCore from CoreContainer . removed deprecated methods setAdminCore(), getAdminCore() (noble)

* SOLR-1704: Google collections moved from clustering to core (noble)

* SOLR-1268: Add Lucene 2.9-dev r888785 FastVectorHighlighter contrib jar to lib. (koji)

* SOLR-1538: Reordering of object allocations in ConcurrentLRUCache to eliminate
  (an extremely small) potential for deadlock.
  (gabriele renzi via hossman)

* SOLR-1588: Removed some very old dead code.
  (Chris A. Mattmann via hossman)

* SOLR-1696 : Deprecate old <highlighting> syntax and move configuration to HighlightComponent (noble)

* SOLR-1727: SolrEventListener should extend NamedListInitializedPlugin (noble)

* SOLR-1771: Improved error message when StringIndex cannot be initialized
  for a function query (hossman)

* SOLR-1695: Improved error messages when adding a document that does not
  contain exactly one value for the uniqueKey field (hossman)

* SOLR-1776: DismaxQParser and ExtendedDismaxQParser now use the schema.xml
  "defaultSearchField" as the default value for the "qf" param instead of failing
  with an error when "qf" is not specified.  (hossman)

* SOLR-1851: luceneAutoCommit no longer has any effect - it has been remove (Mark Miller)

* SOLR-1865: SolrResourceLoader.getLines ignores Byte Order Markers (BOMs) at the
  beginning of input files, these are often created by editors such as Windows
  Notepad.  (rmuir, hossman)

* SOLR-1938: ElisionFilterFactory will use a default set of French contractions
  if you do not supply a custom articles file.  (rmuir)

* SOLR-2003: SolrResourceLoader will report any encoding errors, rather than
  silently using replacement characters for invalid inputs (blargy via rmuir)

* SOLR-1804: Google collections updated to Google Guava (which is a superset of collections and contains bug fixes) (gsingers)

* SOLR-2034: Switch to JavaBin codec version 2. Strings are now serialized
  as the number of UTF-8 bytes, followed by the bytes in UTF-8. Previously
  Strings were serialized as the number of UTF-16 chars, followed by the
  bytes in Modified UTF-8. (hossman, yonik, rmuir)

* SOLR-2013: Add mapping-FoldToASCII.txt to example conf directory.
  (Steven Rowe via koji)

* SOLR-2213: Upgrade to jQuery 1.4.3 (Erick Erickson via ryan)

* SOLR-1826: Add unit tests for highlighting with termOffsets=true
  and overlapping tokens. (Stefan Oestreicher via rmuir)

* SOLR-2340: Add version infos to message in JavaBinCodec when throwing
  exception. (koji)

* SOLR-2350: Since Solr no longer requires XML files to be in UTF-8
  (see SOLR-96) SimplePostTool (aka: post.jar) has been improved to
  work with files of any mime-type or charset. (hossman)

* SOLR-2365: Move DIH jars out of solr.war (David Smiley via yonik)

* SOLR-2381: Include a patched version of Jetty (6.1.26 + JETTY-1340)
  to fix problematic UTF-8 handling for supplementary characters.
  (Bernd Fehling, uschindler, yonik, rmuir)

* SOLR-2391: The preferred Content-Type for XML was changed to
  application/xml. XMLResponseWriter now only delivers using this
  type; updating documents and analyzing documents is still supported
  using text/xml as Content-Type, too. If you have clients that are
  hardcoded on text/xml as Content-Type, you have to change them.
  (uschindler, rmuir)

* SOLR-2414: All ResponseWriters now use only ServletOutputStreams
  and wrap their own Writer around it when serializing. This fixes
  the bug in PHPSerializedResponseWriter that produced wrong string
  length if the servlet container had a broken UTF-8 encoding that was
  in fact CESU-8 (see SOLR-1091). The system property to enable the
  CESU-8 byte counting in PHPSerializesResponseWriters for broken
  servlet containers was therefore removed and is now ignored if set.
  Output is always UTF-8.  (uschindler, yonik, rmuir)

* SOLR-141: Errors and Exceptions are formated by ResponseWriter.
  (Mike Sokolov, Rich Cariens, Daniel Naber, ryan)

* SOLR-1902: Upgraded to Tika 0.8 and changed deprecated parse call

* SOLR-1813: Add ICU4j to contrib/extraction libs and add tests for Arabic
  extraction (Robert Muir via gsingers)

* SOLR-1821: Fix TimeZone-dependent test failure in TestEvaluatorBag.
  (Chris Male via rmuir)

* SOLR-2367: Reduced noise in test output by ensuring the properties file
  can be written. (Gunnlaugur Thor Briem via rmuir)

Build
----------------------

* SOLR-1522: Automated release signing process. (gsingers)

* SOLR-1891: Make lucene-jars-to-solr fail if copying any of the jars fails, and
  update clean to remove the jars in that directory (Mark Miller)

* LUCENE-2466: Commons-Codec was upgraded from 1.3 to 1.4. (rmuir)

* SOLR-2042: Fixed some Maven deps (Drew Farris via gsingers)

* LUCENE-2657: Switch from using Maven POM templates to full POMs when
  generating Maven artifacts (Steven Rowe)

Documentation
----------------------

* SOLR-1590: Javadoc for XMLWriter#startTag
  (Chris A. Mattmann via hossman)

* SOLR-1792: Documented peculiar behavior of TestHarness.LocalRequestFactory
  (hossman)

================== Release 1.4.1 ==================
Release Date:  See http://lucene.apache.org/solr for the official release date.

Upgrading from Solr 1.4
-----------------------

This is a bug fix release - no changes are required when upgrading from Solr 1.4.
However, a reindex is needed for some of the analysis fixes to take effect.

Versions of Major Components
----------------------------
Apache Lucene 2.9.3
Apache Tika 0.4
Carrot2 3.1.0

Lucene Information
----------------

Since Solr is built on top of Lucene, many people add customizations to Solr
that are dependent on Lucene.  Please see http://lucene.apache.org/java/2_9_3/,
especially http://lucene.apache.org/java/2_9_3/changes/Changes.html for more
information on the version of Lucene used in Solr.

Bug Fixes
----------------------

* SOLR-1934: Upgrade to Apache Lucene 2.9.3 to obtain several bug
  fixes from the previous 2.9.1.  See the Lucene 2.9.3 release notes
  for details.  (hossman, Mark Miller)

* SOLR-1432: Make the new ValueSource.getValues(context,reader) delegate
  to the original ValueSource.getValues(reader) so custom sources
  will work. (yonik)

* SOLR-1572: FastLRUCache correctly implemented the LRU policy only
  for the first 2B accesses. (yonik)

* SOLR-1595: StreamingUpdateSolrServer used the platform default character
  set when streaming updates, rather than using UTF-8 as the HTTP headers
  indicated, leading to an encoding mismatch. (hossman, yonik)

* SOLR-1660: CapitalizationFilter crashes if you use the maxWordCountOption
  (Robert Muir via shalin)

* SOLR-1662: Added Javadocs in BufferedTokenStream and fixed incorrect cloning
  in TestBufferedTokenStream (Robert Muir, Uwe Schindler via shalin)

* SOLR-1711: SolrJ - StreamingUpdateSolrServer had a race condition that
  could halt the streaming of documents. The original patch to fix this
  (never officially released) introduced another hanging bug due to
  connections not being released.  (Attila Babo, Erik Hetzner via yonik)

* SOLR-1748, SOLR-1747, SOLR-1746, SOLR-1745, SOLR-1744: Streams and Readers
  retrieved from ContentStreams are not closed in various places, resulting
  in file descriptor leaks.
  (Christoff Brill, Mark Miller)

* SOLR-1580: Solr Configuration ignores 'mergeFactor' parameter, always
  uses Lucene default. (Lance Norskog via Mark Miller)

* SOLR-1777: fieldTypes with sortMissingLast=true or sortMissingFirst=true can
  result in incorrectly sorted results.  (yonik)

* SOLR-1797: fix ConcurrentModificationException and potential memory
  leaks in ResourceLoader. (yonik)

* SOLR-1798: Small memory leak (~100 bytes) in fastLRUCache for every
  commit. (yonik)

* SOLR-1522: Show proper message if <script> tag is missing for DIH
  ScriptTransformer (noble)

* SOLR-1538: Reordering of object allocations in ConcurrentLRUCache to eliminate
  (an extremely small) potential for deadlock.
  (gabriele renzi via hossman)

* SOLR-1558: QueryElevationComponent only works if the uniqueKey field is
  implemented using StrField.  In previous versions of Solr no warning or
  error would be generated if you attempted to use QueryElevationComponent,
  it would just fail in unexpected ways.  This has been changed so that it
  will fail with a clear error message on initialization. (hossman)

* SOLR-1563: Binary fields, including trie-based numeric fields, caused null
  pointer exceptions in the luke request handler. (yonik)

* SOLR-1579: Fixes to XML escaping in stats.jsp
  (David Bowen and hossman)

* SOLR-1582: copyField was ignored for BinaryField types (gsingers)

* SOLR-1596: A rollback operation followed by the shutdown of Solr
  or the close of a core resulted in a warning:
  "SEVERE: SolrIndexWriter was not closed prior to finalize()" although
  there were no other consequences. (yonik)

* SOLR-1651: Fixed Incorrect dataimport handler package name in SolrResourceLoader
  (Akshay Ukey via shalin)

* SOLR-1936: The JSON response format needed to escape unicode code point
  U+2028 - 'LINE SEPARATOR' (Robert Hofstra, yonik)

* SOLR-1852: Fix WordDelimiterFilterFactory bug where position increments
  were not being applied properly to subwords.  (Peter Wolanin via Robert Muir)

* SOLR-1706: fixed WordDelimiterFilter for certain combinations of options
  where it would output incorrect tokens. (Robert Muir, Chris Male)

* SOLR-1948: PatternTokenizerFactory should use parent's args (koji)

* SOLR-1870: Indexing documents using the 'javabin' format no longer
  fails with a ClassCastException whenSolrInputDocuments contain field
  values which are Collections or other classes that implement
  Iterable. (noble, hossman)

* SOLR-1769 Solr 1.4 Replication - Repeater throwing NullPointerException (noble)

================== Release 1.4.0 ==================
Release Date:  See http://lucene.apache.org/solr for the official release date.

Upgrading from Solr 1.3
-----------------------

There is a new default faceting algorithm for multiVaued fields that should be
faster for most cases.  One can revert to the previous algorithm (which has
also been improved somewhat) by adding facet.method=enum to the request.

Searching and sorting is now done on a per-segment basis, meaning that
the FieldCache entries used for sorting and for function queries are
created and used per-segment and can be reused for segments that don't
change between index updates.  While generally beneficial, this can lead
to increased memory usage over 1.3 in certain scenarios:
  1) A single valued field that was used for both sorting and faceting
in 1.3 would have used the same top level FieldCache entry.  In 1.4,
sorting will use entries at the segment level while faceting will still
use entries at the top reader level, leading to increased memory usage.
  2) Certain function queries such as ord() and rord() require a top level
FieldCache instance and can thus lead to increased memory usage.  Consider
replacing ord() and rord() with alternatives, such as function queries
based on ms() for date boosting.

If you use custom Tokenizer or TokenFilter components in a chain specified in
schema.xml, they must support reusability.  If your Tokenizer or TokenFilter
maintains state, it should implement reset().  If your TokenFilteFactory does
not return a subclass of TokenFilter, then it should implement reset() and call
reset() on its input TokenStream.  TokenizerFactory implementations must
now return a Tokenizer rather than a TokenStream.

New users of Solr 1.4 will have omitTermFreqAndPositions enabled for non-text
indexed fields by default, which avoids indexing term frequency, positions, and
payloads, making the index smaller and faster.  If you are upgrading from an
earlier Solr release and want to enable omitTermFreqAndPositions by default,
change the schema version from 1.1 to 1.2 in schema.xml.  Remove any existing
index and restart Solr to ensure that omitTermFreqAndPositions completely takes
affect.

The default QParserPlugin used by the QueryComponent for parsing the "q" param
has been changed, to remove support for the deprecated use of ";" as a separator
between the query string and the sort options when no "sort" param was used.
Users who wish to continue using the semi-colon based method of specifying the
sort options should explicitly set the defType param to "lucenePlusSort" on all
requests. (The simplest way to do this is by specifying it as a default param
for your request handlers in solrconfig.xml, see the example solrconfig.xml for
sample syntax.)

If spellcheck.extendedResults=true, the response format for suggestions
has changed, see SOLR-1071.

Use of the "charset" option when configuring the following Analysis
Factories has been deprecated and will cause a warning to be logged.
In future versions of Solr attempting to use this option will cause an
error.  See SOLR-1410 for more information.
 - GreekLowerCaseFilterFactory
 - RussianStemFilterFactory
 - RussianLowerCaseFilterFactory
 - RussianLetterTokenizerFactory

DIH: Evaluator API has been changed in a non back-compatible way. Users who
have developed custom Evaluators will need to change their code according to
the new API for it to work. See SOLR-996 for details.

DIH: The formatDate evaluator's syntax has been changed. The new syntax is
formatDate(<variable>, '<format_string>'). For example,
formatDate(x.date, 'yyyy-MM-dd'). In the old syntax, the date string was
written without a single-quotes. The old syntax has been deprecated and will
be removed in 1.5, until then, using the old syntax will log a warning.

DIH: The Context API has been changed in a non back-compatible way. In
particular, the Context.currentProcess() method now returns a String
describing the type of the current import process instead of an int.
Similarily, the public constants in Context viz. FULL_DUMP, DELTA_DUMP and
FIND_DELTA are changed to a String type. See SOLR-969 for details.

DIH: The EntityProcessor API has been simplified by moving logic for applying
transformers and handling multi-row outputs from Transformers into an
EntityProcessorWrapper class. The EntityProcessor#destroy is now called once
per parent-row at the end of row (end of data). A new method
EntityProcessor#close is added which is called at the end of import.

DIH: In Solr 1.3, if the last_index_time was not available (first import) and
a delta-import was requested, a full-import was run instead. This is no longer
the case. In Solr 1.4 delta import is run with last_index_time as the epoch
date (January 1, 1970, 00:00:00 GMT) if last_index_time is not available.

Versions of Major Components
----------------------------
Apache Lucene 2.9.1  (r832363  on 2.9 branch)
Apache Tika 0.4
Carrot2 3.1.0

Lucene Information
----------------

Since Solr is built on top of Lucene, many people add customizations to Solr
that are dependent on Lucene.  Please see http://lucene.apache.org/java/2_9_0/,
especially http://lucene.apache.org/java/2_9_0/changes/Changes.html for more
information on the version of Lucene used in Solr.

Detailed Change List
----------------------

New Features
----------------------
 1. SOLR-560: Use SLF4J logging API rather then JDK logging.  The packaged .war file is
    shipped with a JDK logging implementation, so logging configuration for the .war should
    be identical to solr 1.3.  However, if you are using the .jar file, you can select
    which logging implementation to use by dropping a different binding.
    See: http://www.slf4j.org/  (ryan)

 2. SOLR-617: Allow configurable index deletion policy and provide a default implementation which
    allows deletion of commit points on various criteria such as number of commits, age of commit
    point and optimized status.
    See http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/index/IndexDeletionPolicy.html
    (yonik, Noble Paul, Akshay Ukey via shalin)

 3. SOLR-658: Allow Solr to load index from arbitrary directory in dataDir
    (Noble Paul, Akshay Ukey via shalin)

 4. SOLR-793: Add 'commitWithin' argument to the update add command.  This behaves
    similar to the global autoCommit maxTime argument except that it is set for
    each request.  (ryan)

 5. SOLR-670: Add support for rollbacks in UpdateHandler. This allows user to rollback all changes
    since the last commit. (Noble Paul, koji via shalin)

 6. SOLR-813: Adding DoubleMetaphone Filter and Factory.  Similar to the PhoneticFilter,
    but this uses DoubleMetaphone specific calls (including alternate encoding)
    (Todd Feak via ryan)

 7. SOLR-680: Add StatsComponent. This gets simple statistics on matched numeric fields,
    including: min, max, mean, median, stddev.  (koji, ryan)

    - SOLR-1380: Added support for multi-valued fields (Harish Agarwal via gsingers)

 8. SOLR-561: Added Replication implemented in Java as a request handler. Supports index replication
    as well as configuration replication and exposes detailed statistics and progress information
    on the Admin page. Works on all platforms. (Noble Paul, yonik, Akshay Ukey, shalin)

 9. SOLR-746: Added "omitHeader" request parameter to omit the header from the response.
    (Noble Paul via shalin)

10. SOLR-651: Added TermVectorComponent for serving up term vector information, plus IDF.
    See http://wiki.apache.org/solr/TermVectorComponent (gsingers, Vaijanath N. Rao, Noble Paul)

12. SOLR-795: SpellCheckComponent supports building indices on optimize if configured in solrconfig.xml
    (Jason Rennie, shalin)

13. SOLR-667: A LRU cache implementation based upon ConcurrentHashMap and other techniques to reduce
    contention and synchronization overhead, to utilize multiple CPU cores more effectively.
    (Fuad Efendi, Noble Paul, yonik via shalin)

14. SOLR-465: Add configurable DirectoryProvider so that alternate Directory
    implementations can be specified via solrconfig.xml.  The default
    DirectoryProvider will use NIOFSDirectory for better concurrency
    on non Windows platforms.  (Mark Miller, TJ Laurenzo via yonik)

15. SOLR-822: Add CharFilter so that characters can be filtered (e.g. character normalization)
    before Tokenizer/TokenFilters. (koji)

16. SOLR-829: Allow slaves to request compressed files from master during replication
    (Simon Collins, Noble Paul, Akshay Ukey via shalin)

17. SOLR-877: Added TermsComponent for accessing Lucene's TermEnum capabilities.
    Useful for auto suggest and possibly distributed search.  Not distributed search compliant.  (gsingers)
    - Added mincount and maxcount options (Khee Chin via gsingers)

18. SOLR-538: Add maxChars attribute for copyField function so that the length limit for destination
    can be specified.
    (Georgios Stamatis, Lars Kotthoff, Chris Harris via koji)

19. SOLR-284: Added support for extracting content from binary documents like MS Word and PDF using Apache Tika.  See also contrib/extraction/CHANGES.txt (Eric Pugh, Chris Harris, yonik, gsingers)

20. SOLR-819: Added factories for Arabic support (gsingers)

21. SOLR-781: Distributed search ability to sort field.facet values
    lexicographically.  facet.sort values "true" and "false" are
    also deprecated and replaced with "count" and "lex".
    (Lars Kotthoff via yonik)

22. SOLR-821: Add support for replication to copy conf file to slave with a different name. This allows replication
    of solrconfig.xml
    (Noble Paul, Akshay Ukey via shalin)

23. SOLR-911: Add support for multi-select faceting by allowing filters to be
    tagged and facet commands to exclude certain filters.  This patch also
    added the ability to change the output key for facets in the response, and
    optimized distributed faceting refinement by lowering parsing overhead and
    by making requests and responses smaller.

24. SOLR-876: WordDelimiterFilter now supports a splitOnNumerics
    option, as well as a list of protected terms.
    (Dan Rosher via hossman)

25. SOLR-928: SolrDocument and SolrInputDocument now implement the Map<String,?>
    interface.  This should make plugging into other standard tools easier. (ryan)

26. SOLR-847: Enhance the snappull command in ReplicationHandler to accept masterUrl.
    (Noble Paul, Preetam Rao via shalin)

27. SOLR-540: Add support for globbing in field names to highlight.
    For example, hl.fl=*_text will highlight all fieldnames ending with
    _text.  (Lars Kotthoff via yonik)

28. SOLR-906: Adding a StreamingUpdateSolrServer that writes update commands to
    an open HTTP connection.  If you are using solrj for bulk update requests
    you should consider switching to this implementaion.  However, note that
    the error handling is not immediate as it is with the standard SolrServer.
    (ryan)

29. SOLR-865: Adding support for document updates in binary format and corresponding support in Solrj client.
    (Noble Paul via shalin)

30. SOLR-763: Add support for Lucene's PositionFilter (Mck SembWever via shalin)

31. SOLR-966: Enhance the map() function query to take in an optional default value (Noble Paul, shalin)

32. SOLR-820: Support replication on startup of master with new index. (Noble Paul, Akshay Ukey via shalin)

33. SOLR-943: Make it possible to specify dataDir in solr.xml and accept the dataDir as a request parameter for
    the CoreAdmin create command. (Noble Paul via shalin)

34. SOLR-850: Addition of timeouts for distributed searching. Configurable through 'shard-socket-timeout' and
    'shard-connection-timeout' parameters in SearchHandler. (Patrick O'Leary via shalin)

35. SOLR-799: Add support for hash based exact/near duplicate document
    handling. (Mark Miller, yonik)

36. SOLR-1026: Add protected words support to SnowballPorterFilterFactory (ehatcher)

37. SOLR-739: Add support for OmitTf (Mark Miller via yonik)

38. SOLR-1046: Nested query support for the function query parser
    and lucene query parser (the latter existed as an undocumented
    feature in 1.3) (yonik)

39. SOLR-940: Add support for Lucene's Trie Range Queries by providing new FieldTypes in
    schema for int, float, long, double and date.  Single-valued Trie based
    fields with a precisionStep will index multiple precisions and enable
    faster range queries.  (Uwe Schindler, yonik, shalin)

40. SOLR-1038: Enhance CommonsHttpSolrServer to add docs in batch using an iterator API (Noble Paul via shalin)

41. SOLR-844: A SolrServer implementation to front-end multiple solr servers and provides load balancing and failover
    support (Noble Paul, Mark Miller, hossman via shalin)

42. SOLR-939: ValueSourceRangeFilter/Query - filter based on values in a FieldCache entry or on any arbitrary function of field values. (yonik)

43. SOLR-1095: Fixed performance problem in the StopFilterFactory and simplified code.  Added tests as well.  (gsingers)

44. SOLR-1096: Introduced httpConnTimeout and httpReadTimeout in replication slave configuration to avoid stalled
    replication. (Jeff Newburn, Noble Paul, shalin)

45. SOLR-1115: <bool>on</bool> and <bool>yes</bool> work as expected in solrconfig.xml. (koji)

46. SOLR-1099:  A FieldAnalysisRequestHandler which provides the analysis functionality of the web admin page as
    a service. The AnalysisRequestHandler is renamed to DocumentAnalysisRequestHandler which is enhanced with
    query analysis and showMatch support. AnalysisRequestHandler is now deprecated. Support for both
    FieldAnalysisRequestHandler and DocumentAnalysisRequestHandler is also provided in the Solrj client.
    (Uri Boness, shalin)

47. SOLR-1106: Made CoreAdminHandler Actions pluggable so that additional actions may be plugged in or the existing
    ones can be overridden if needed. (Kay Kay, Noble Paul, shalin)

48. SOLR-1124: Add a top() function query that causes its argument to
    have its values derived from the top level IndexReader, even when
    invoked from a sub-reader.  top() is implicitly used for the
    ord() and rord() functions.  (yonik)

49. SOLR-1110: Support sorting on trie fields with Distributed Search. (Mark Miller, Uwe Schindler via shalin)

50. SOLR-1121: CoreAdminhandler should not need a core  . This makes it possible to start a Solr server w/o a core .(noble)

51. SOLR-769: Added support for clustering in contrib/clustering.  See http://wiki.apache.org/solr/ClusteringComponent for more info.  (gsingers, Stanislaw Osinski)

52. SOLR-1175: disable/enable replication on master side. added two commands 'enableReplication' and 'disableReplication' (noble)

53. SOLR-1179: DocSets can now be used as Lucene Filters via
    DocSet.getTopFilter() (yonik)

54. SOLR-1116: Add a Binary FieldType (noble)

55. SOLR-1051: Support the merge of multiple indexes as a CoreAdmin and an update command (Ning Li via shalin)

56. SOLR-1152: Snapshoot on ReplicationHandler should accept location as a request parameter (shalin)

57. SOLR-1204: Enhance SpellingQueryConverter to handle UTF-8 instead of ASCII only.
    Use the NMTOKEN syntax for matching field names.
    (Michael Ludwig, shalin)

58. SOLR-1189: Support providing username and password for basic HTTP authentication in Java replication
    (Matthew Gregg, shalin)

59. SOLR-243: Add configurable IndexReaderFactory so that alternate IndexReader implementations
    can be specified via solrconfig.xml. Note that using a custom IndexReader may be incompatible
    with ReplicationHandler (see comments in SOLR-1366). This should be treated as an experimental feature.
    (Andrzej Bialecki, hossman, Mark Miller, John Wang)

60. SOLR-1214: differentiate between solr home and instanceDir .deprecates the method SolrResourceLoader#locateInstanceDir()
    and it is renamed to locateSolrHome (noble)

61. SOLR-1216 :  disambiguate the replication command names. 'snappull' becomes 'fetchindex' 'abortsnappull' becomes 'abortfetch' (noble)

62. SOLR-1145: Add capability to specify an infoStream log file for the underlying Lucene IndexWriter in solrconfig.xml.
    This is an advanced debug log file that can be used to aid developers in fixing IndexWriter bugs. See the commented
    out example in the example solrconfig.xml under the indexDefaults section.
    (Chris Harris, Mark Miller)

63. SOLR-1256: Show the output of CharFilters in analysis.jsp. (koji)

64. SOLR-1266: Added stemEnglishPossessive option (default=true) to WordDelimiterFilter
    that allows disabling of english possessive stemming (removal of trailing 's from tokens)
    (Robert Muir via yonik)

65. SOLR-1237: firstSearcher and newSearcher can now be identified via the CommonParams.EVENT (evt) parameter
    in a request.  This allows a RequestHandler or SearchComponent to know when a newSearcher or firstSearcher
    event happened.  QuerySenderListender is the only implementation in Solr that implements this, but outside
    implementations may wish to.  See the AbstractSolrEventListener for a helper method. (gsingers)

66. SOLR-1343: Added HTMLStripCharFilter and marked HTMLStripReader, HTMLStripWhitespaceTokenizerFactory and
    HTMLStripStandardTokenizerFactory deprecated. To strip HTML tags, HTMLStripCharFilter can be used
    with an arbitrary Tokenizer. (koji)

67. SOLR-1275: Add expungeDeletes to DirectUpdateHandler2 (noble)

68. SOLR-1372: Enhance FieldAnalysisRequestHandler to accept field value from content stream (ehatcher)

69. SOLR-1370: Show the output of CharFilters in FieldAnalysisRequestHandler (koji)

70. SOLR-1373: Add Filter query to admin/form.jsp
    (Jason Rutherglen via hossman)

71. SOLR-1368: Add ms() function query for getting milliseconds from dates and for
    high precision date subtraction, add sub() for subtracting other arguments.
    (yonik)

72. SOLR-1156: Sort TermsComponent results by frequency (Matt Weber via yonik)

73. SOLR-1335 : load core properties from a properties file (noble)

74. SOLR-1385 : Add an 'enable' attribute to all plugins  (noble)

75. SOLR-1414 : implicit core properties are not set for single core  (noble)

76. SOLR-659 : Adds shards.start and shards.rows to distributed search
    to allow more efficient bulk queries (those that retrieve many or all
    documents).  (Brian Whitman via yonik)

77. SOLR-1321: Add better support for efficient wildcard handling (Andrzej Bialecki, Robert Muir, gsingers)

78. SOLR-1326 : New interface PluginInfoInitialized for all types of plugin (noble)

79. SOLR-1447 : Simple property injection. <mergePolicy> & <mergeScheduler> syntaxes are now deprecated
    (Jason Rutherglen, noble)

80. SOLR-908 : CommonGramsFilterFactory/CommonGramsQueryFilterFactory for
    speeding up phrase queries containing common words by indexing
    n-grams and using them at query time.
    (Tom Burton-West, Jason Rutherglen via yonik)

81. SOLR-1292: Add FieldCache introspection to stats.jsp and JMX Monitoring via
    a new SolrFieldCacheMBean.  (hossman)

82. SOLR-1167: Solr Config now supports XInclude for XML engines that can support it. (Bryan Talbot via gsingers)

83. SOLR-1478: Enable sort by Lucene docid.  (ehatcher)

84. SOLR-1449: Add <lib> elements to solrconfig.xml to specifying additional
    classpath directories and regular expressions. (hossman via yonik)

85. SOLR-1128: Added metadata output to extraction request handler "extract
    only" option.  (gsingers)

86. SOLR-1274: Added text serialization output for extractOnly
    (Peter Wolanin, gsingers)

87. SOLR-768: DIH: Set last_index_time variable in full-import command.
    (Wojtek Piaseczny, Noble Paul via shalin)

88. SOLR-811: Allow a "deltaImportQuery" attribute in SqlEntityProcessor
    which is used for delta imports instead of DataImportHandler manipulating
    the SQL itself. (Noble Paul via shalin)

89. SOLR-842:  Better error handling in DataImportHandler with options to
    abort, skip and continue imports. (Noble Paul, shalin)

90. SOLR-833: DIH: A DataSource to read data from a field as a reader. This
    can be used, for example, to read XMLs residing as CLOBs or BLOBs in
    databases. (Noble Paul via shalin)

91. SOLR-887: A DIH Transformer to strip HTML tags. (Ahmed Hammad via shalin)

92. SOLR-886: DataImportHandler should rollback when an import fails or it is
    aborted (shalin)

93. SOLR-891: A DIH Transformer to read strings from Clob type.
    (Noble Paul via shalin)

94. SOLR-812: Configurable JDBC settings in JdbcDataSource including optimized
    defaults for read only mode. (David Smiley, Glen Newton, shalin)

95. SOLR-910: Add a few utility commands to the DIH admin page such as full
    import, delta import, status, reload config. (Ahmed Hammad via shalin)

96. SOLR-938: Add event listener API for DIH import start and end.
    (Kay Kay, Noble Paul via shalin)

97. SOLR-801: DIH: Add support for configurable pre-import and post-import
    delete query per root-entity. (Noble Paul via shalin)

98. SOLR-988: Add a new scope for session data stored in Context to store
    objects across imports. (Noble Paul via shalin)

99. SOLR-980: A PlainTextEntityProcessor which can read from any
    DataSource<Reader> and output a String.
    (Nathan Adams, Noble Paul via shalin)

100.SOLR-1003: XPathEntityprocessor must allow slurping all text from a given
    xml node and its children. (Noble Paul via shalin)

101.SOLR-1001: Allow variables in various attributes of RegexTransformer,
    HTMLStripTransformer and NumberFormatTransformer.
    (Fergus McMenemie, Noble Paul, shalin)

102.SOLR-989: DIH: Expose running statistics from the Context API.
    (Noble Paul, shalin)

103.SOLR-996: DIH: Expose Context to Evaluators. (Noble Paul, shalin)

104.SOLR-783: DIH: Enhance delta-imports by maintaining separate
    last_index_time for each entity. (Jon Baer, Noble Paul via shalin)

105.SOLR-1033: Current entity's namespace is made available to all DIH
    Transformers. This allows one to use an output field of TemplateTransformer
    in other transformers, among other things.
    (Fergus McMenemie, Noble Paul via shalin)

106.SOLR-1066: New methods in DIH Context to expose Script details.
    ScriptTransformer changed to read scripts through the new API methods.
    (Noble Paul via shalin)

107.SOLR-1062: A DIH LogTransformer which can log data in a given template
    format. (Jon Baer, Noble Paul via shalin)

108.SOLR-1065: A DIH ContentStreamDataSource which can accept HTTP POST data
    in a content stream. This can be used to push data to Solr instead of
    just pulling it from DB/Files/URLs. (Noble Paul via shalin)

109.SOLR-1061: Improve DIH RegexTransformer to create multiple columns from
    regex groups. (Noble Paul via shalin)

110.SOLR-1059: Special DIH flags introduced for deleting documents by query or
    id, skipping rows and stopping further transforms. Use $deleteDocById,
    $deleteDocByQuery for deleting by id and query respectively.  Use $skipRow
    to skip the current row but continue with the document. Use $stopTransform
    to stop further transformers. New methods are introduced in Context for
    deleting by id and query. (Noble Paul, Fergus McMenemie, shalin)

111.SOLR-1076: JdbcDataSource should resolve DIH variables in all its
    configuration parameters. (shalin)

112.SOLR-1055: Make DIH JdbcDataSource easily extensible by making the
    createConnectionFactory method protected and return a
    Callable<Connection> object. (Noble Paul, shalin)

113.SOLR-1058: DIH: JdbcDataSource can lookup javax.sql.DataSource using JNDI.
    Use a jndiName attribute to specify the location of the data source.
    (Jason Shepherd, Noble Paul via shalin)

114.SOLR-1083: A DIH Evaluator for escaping query characters.
    (Noble Paul, shalin)

115.SOLR-934: A MailEntityProcessor to enable indexing mails from
    POP/IMAP sources into a solr index. (Preetam Rao, shalin)

116.SOLR-1060: A DIH LineEntityProcessor which can stream lines of text from a
    given file to be indexed directly or for processing with transformers and
    child entities.
    (Fergus McMenemie, Noble Paul, shalin)

117.SOLR-1127: Add support for DIH field name to be templatized.
    (Noble Paul, shalin)

118.SOLR-1092: Added a new DIH command named 'import' which does not
    automatically clean the index. This is useful and more appropriate when one
    needs to import only some of the entities.
    (Noble Paul via shalin)

119.SOLR-1153: DIH 'deltaImportQuery' is honored on child entities as well
    (noble)

120.SOLR-1230: Enhanced dataimport.jsp to work with all DataImportHandler
    request handler configurations, rather than just a hardcoded /dataimport
    handler. (ehatcher)

121.SOLR-1235: disallow period (.) in DIH entity names (noble)

122.SOLR-1234: Multiple DIH does not work because all of them write to
    dataimport.properties. Use the handler name as the properties file name
    (noble)

123.SOLR-1348: Support binary field type in convertType logic in DIH
    JdbcDataSource (shalin)

124.SOLR-1406: DIH: Make FileDataSource and FileListEntityProcessor to be more
    extensible (Luke Forehand, shalin)

125.SOLR-1437: DIH: XPathEntityProcessor can deal with xpath syntaxes such as
    //tagname , /root//tagname (Fergus McMenemie via noble)


Optimizations
----------------------
 1. SOLR-374: Use IndexReader.reopen to save resources by re-using parts of the
    index that haven't changed. (Mark Miller via yonik)

 2. SOLR-808: Write string keys in Maps as extern strings in the javabin format. (Noble Paul via shalin)

 3. SOLR-475: New faceting method with better performance and smaller memory usage for
    multi-valued fields with many unique values but relatively few values per document.
    Controllable via the facet.method parameter - "fc" is the new default method and "enum"
    is the original method.  (yonik)

 4. SOLR-970: Use an ArrayList in SolrPluginUtils.parseQueryStrings
    since we know exactly how long the List will be in advance.
    (Kay Kay via hossman)

 5. SOLR-1002: Change SolrIndexSearcher to use insertWithOverflow
    with reusable priority queue entries to reduce the amount of
    generated garbage during searching.  (Mark Miller via yonik)

 6. SOLR-971: Replace StringBuffer with StringBuilder for instances that do not require thread-safety.
    (Kay Kay via shalin)

 7. SOLR-921: SolrResourceLoader must cache short class name vs fully qualified classname
    (Noble Paul, hossman via shalin)

 8. SOLR-973: CommonsHttpSolrServer writes the xml directly to the server.
    (Noble Paul via shalin)

 9. SOLR-1108: Remove un-needed synchronization in SolrCore constructor.
    (Noble Paul via shalin)

10. SOLR-1166: Speed up docset/filter generation by avoiding top-level
    score() call and iterating over leaf readers with TermDocs. (yonik)

11. SOLR-1169: SortedIntDocSet - a new small set implementation
    that saves memory over HashDocSet, is faster to construct,
    is ordered for easier implementation of skipTo, and is faster
    in the general case. (yonik)

12. SOLR-1165: Use Lucene Filters and pass them down to the Lucene
    search methods to filter earlier and improve performance. (yonik)

13. SOLR-1111: Use per-segment sorting to share fieldcache elements
    across unchanged segments.  This saves memory and reduces
    commit times for incremental updates to the index. (yonik)

14. SOLR-1188: Minor efficiency improvement in TermVectorComponent related to ignoring positions or offsets (gsingers)

15. SOLR-1150: Load Documents for Highlighting one at a time rather than
    all at once to avoid OOM with many large Documents. (Siddharth Gargate via Mark Miller)

16. SOLR-1353: Implement and use reusable token streams for analysis. (Robert Muir, yonik)

17. SOLR-1296: Enables setting IndexReader's termInfosIndexDivisor via a new attribute to StandardIndexReaderFactory.  Enables
    setting termIndexInterval to IndexWriter via SolrIndexConfig. (Jason Rutherglen, hossman, gsingers)

18. SOLR-846: DIH: Reduce memory consumption during delta import by removing
    keys when used (Ricky Leung, Noble Paul via shalin)

19. SOLR-974: DataImportHandler skips commit if no data has been updated.
    (Wojtek Piaseczny, shalin)

20. SOLR-1004: DIH: Check for abort more frequently during delta-imports.
    (Marc Sturlese, shalin)

21. SOLR-1098: DIH DateFormatTransformer can cache the format objects.
    (Noble Paul via shalin)

22. SOLR-1465: Replaced string concatenations with StringBuilder append
    calls in DIH XPathRecordReader. (Mark Miller, shalin)

Bug Fixes
----------------------
 1. SOLR-774: Fixed logging level display (Sean Timm via Otis Gospodnetic)

 2. SOLR-771: CoreAdminHandler STATUS should display 'normalized' paths (koji, hossman, shalin)

 3. SOLR-532: WordDelimiterFilter now respects payloads and other attributes of the original Token by
    using Token.clone() (Tricia Williams, gsingers)

 4. SOLR-805: DisMax queries are not being cached in QueryResultCache (Todd Feak via koji)

 5. SOLR-751: WordDelimiterFilter didn't adjust the start offset of single
    tokens that started with delimiters, leading to incorrect highlighting.
    (Stefan Oestreicher via yonik)

 7. SOLR-843: SynonymFilterFactory cannot handle multiple synonym files correctly (koji)

 8. SOLR-840: BinaryResponseWriter does not handle incompatible data in fields (Noble Paul via shalin)

 9. SOLR-803: CoreAdminRequest.createCore fails because name parameter isn't set (Sean Colombo via ryan)

10. SOLR-869: Fix file descriptor leak in SolrResourceLoader#getLines (Mark Miller, shalin)

11. SOLR-872: Better error message for incorrect copyField destination (Noble Paul via shalin)

12. SOLR-879: Enable position increments in the query parser and fix the
    example schema to enable position increments for the stop filter in
    both the index and query analyzers to fix the bug with phrase queries
    with stopwords. (yonik)

13. SOLR-836: Add missing "a" to the example stopwords.txt (yonik)

14. SOLR-892: Fix serialization of booleans for PHPSerializedResponseWriter
    (yonik)

15. SOLR-898: Fix null pointer exception for the JSON response writer
    based formats when nl.json=arrarr with null keys.  (yonik)

16. SOLR-901: FastOutputStream ignores write(byte[]) call.  (Noble Paul via shalin)

17. SOLR-807: BinaryResponseWriter writes fieldType.toExternal if it is not a supported type,
    otherwise it writes fieldType.toObject. This fixes the bug with encoding/decoding UUIDField.
    (koji, Noble Paul, shalin)

18. SOLR-863: SolrCore.initIndex should close the directory it gets for clearing the lock and
    use the DirectoryFactory. (Mark Miller via shalin)

19. SOLR-802: Fix a potential null pointer error in the distributed FacetComponent
    (David Bowen via ryan)

20. SOLR-346: Use perl regex to improve accuracy of finding latest snapshot in snapinstaller (billa)

21. SOLR-830: Use perl regex to improve accuracy of finding latest snapshot in snappuller (billa)

22. SOLR-897: Fixed Argument list too long error when there are lots of snapshots/backups (Dan Rosher via billa)

23. SOLR-925: Fixed highlighting on fields with multiValued="true" and termOffsets="true" (koji)

24. SOLR-902: FastInputStream#read(byte b[], int off, int len) gives incorrect results when amount left to read is less
    than buffer size (Noble Paul via shalin)

25. SOLR-978: Old files are not removed from slaves after replication (Jaco, Noble Paul, shalin)

26. SOLR-883: Implicit properties are not set for Cores created through CoreAdmin (Noble Paul via shalin)

27. SOLR-991: Better error message when parsing solrconfig.xml fails due to malformed XML. Error message notes the name
    of the file being parsed. (Michael Henson via shalin)

28. SOLR-1008: Fix stats.jsp XML encoding for <stat> item entries with ampersands in their names.  (ehatcher)

29. SOLR-976: deleteByQuery is ignored when deleteById is placed prior to deleteByQuery in a <delete>.
    Now both delete by id and delete by query can be specified at the same time as follows.
      <delete>
        <id>05991</id><id>06000</id>
        <query>office:Bridgewater</query><query>office:Osaka</query>
      </delete>
    (koji)

30. SOLR-1016: HTTP 503 error changes 500 in SolrCore (koji)

31. SOLR-1015: Incomplete information in replication admin page and http command response when server
    is both master and slave i.e. when server is a repeater (Akshay Ukey via shalin)

32. SOLR-1018: Slave is unable to replicate when server acts as repeater (as both master and slave)
    (Akshay Ukey, Noble Paul via shalin)

33. SOLR-1031: Fix XSS vulnerability in schema.jsp (Paul Lovvik via ehatcher)

34. SOLR-1064: registry.jsp incorrectly displaying info for last core initialized
    regardless of what the current core is. (hossman)

35. SOLR-1072: absolute paths used in sharedLib attribute were
    incorrectly treated as relative paths. (hossman)

36. SOLR-1104: Fix some rounding errors in LukeRequestHandler's histogram (hossman)

37. SOLR-1125: Use query analyzer rather than index analyzer for queryFieldType in QueryElevationComponent
    (koji)

38. SOLR-1126: Replicated files have incorrect timestamp (Jian Han Guo, Jeff Newburn, Noble Paul via shalin)

39. SOLR-1094: Incorrect value of correctlySpelled attribute in some cases (David Smiley, Mark Miller via shalin)

40. SOLR-965: Better error message when <pingQuery> is not configured.
    (Mark Miller via hossman)

41. SOLR-1135: Java replication creates Snapshot in the directory where Solr was launched (Jianhan Guo via shalin)

42. SOLR-1138: Query Elevation Component now gracefully handles missing queries. (gsingers)

43. SOLR-929: LukeRequestHandler should return "dynamicBase" only if the field is dynamic.
    (Peter Wolanin, koji)

44. SOLR-1141: NullPointerException during snapshoot command in java based replication (Jian Han Guo, shalin)

45. SOLR-1078: Fixes to WordDelimiterFilter to avoid splitting or dropping
    international non-letter characters such as non spacing marks. (yonik)

46. SOLR-825, SOLR-1221: Enables highlighting for range/wildcard/fuzzy/prefix queries if using hl.usePhraseHighlighter=true
    and hl.highlightMultiTerm=true. Also make both options default to true. (Mark Miller, yonik)

47. SOLR-1174: Fix Logging admin form submit url for multicore. (Jacob Singh via shalin)

48. SOLR-1182: Fix bug in OrdFieldSource#equals which could cause a bug with OrdFieldSource caching
               on OrdFieldSource#hashcode collisions. (Mark Miller)

49. SOLR-1207: equals method should compare this and other of DocList in DocSetBase (koji)

50. SOLR-1242: Human readable JVM info from system handler does integer cutoff rounding, even when dealing
               with GB. Fixed to round to one decimal place. (Jay Hill, Mark Miller)

51. SOLR-1243: Admin RequestHandlers should not be cached over HTTP. (Mark Miller)

52. SOLR-1260: Fix implementations of set operations for DocList subclasses
    and fix a bug in HashDocSet construction when offset != 0.  These bugs
    never manifested in normal Solr use and only potentially affect
    custom code. (yonik)

53. SOLR-1171: Fix LukeRequestHandler so it doesn't rely on SolrQueryParser
    and report incorrect stats when field names contain characters
    SolrQueryParser considers special.
    (hossman)

54. SOLR-1317: Fix CapitalizationFilterFactory to work when keep parameter is not specified.
    (ehatcher)

55. SOLR-1342: CapitalizationFilterFactory uses incorrect term length calculations.
    (Robert Muir via Mark Miller)

56. SOLR-1359: DoubleMetaphoneFilter didn't index original tokens if there was no
    alternative, and could incorrectly skip or reorder tokens.  (yonik)

57. SOLR-1360: Prevent PhoneticFilter from producing duplicate tokens. (yonik)

58. SOLR-1371: LukeRequestHandler/schema.jsp errored if schema had no
    uniqueKey field.  The new test for this also (hopefully) adds some
    future proofing against similar bugs in the future.  As a side
    effect QueryElevationComponentTest was refactored, and a bug in
    that test was found. (hossman)

59. SOLR-914: General finalize() improvements.  No finalizer delegates
    to the respective close/destroy method w/o first checking if it's
    already been closed/destroyed; if it hasn't a, SEVERE error is
    logged first.  (noble, hossman)

60. SOLR-1362: WordDelimiterFilter had inconsistent behavior when setting
    the position increment of tokens following a token consisting of all
    delimiters, and could additionally lose big position increments.
    (Robert Muir, yonik)

61. SOLR-1091: Jetty's use of CESU-8 for code points outside the BMP
    resulted in invalid output from the serialized PHP writer. (yonik)

62. SOLR-1103: LukeRequestHandler (and schema.jsp) have been fixed to
    include the "1" (ie: 2**0) bucket in the term histogram data.
    (hossman)

63. SOLR-1398: Add offset corrections in PatternTokenizerFactory.
    (Anders Melchiorsen, koji)

64. SOLR-1400: Properly handle zero-length tokens in TrimFilter.  This
    was not a bug in any released version. (Peter Wolanin, gsingers)

65. SOLR-1071: spellcheck.extendedResults returns an invalid JSON response
    when count > 1.  To fix, the extendedResults format was changed.
    (Uri Boness, yonik)

66. SOLR-1381: Fixed improper handling of fields that have only term positions and not term offsets during Highlighting (Thorsten Fischer, gsingers)

67. SOLR-1427: Fixed registry.jsp issue with MBeans (gsingers)

68. SOLR-1468: SolrJ's XML response parsing threw an exception for null
     names, such as those produced when facet.missing=true (yonik)

69. SOLR-1471: Fixed issue with calculating missing values for facets in single valued cases in Stats Component.
  This is not correctly calculated for the multivalued case. (James Miller, gsingers)

70. SOLR-1481: Fixed omitHeader parameter for PHP ResponseWriter.  (Jun Ohtani via billa)

71. SOLR-1448: Add weblogic.xml to solr webapp to enable correct operation in
    WebLogic. (Ilan Rabinovitch via yonik)

72. SOLR-1504: empty char mapping can cause ArrayIndexOutOfBoundsException in analysis.jsp and co.
    (koji)

73. SOLR-1394: HTMLStripCharFilter split tokens that contained entities and
    often calculated offsets incorrectly for entities.
    (Anders Melchiorsen via yonik)

74. SOLR-1517: Admin pages could stall waiting for localhost name resolution
    if reverse DNS wasn't configured; this was changed so the DNS resolution
    is attempted only once the first time an admin page is loaded.
    (hossman)

75. SOLR-1529: More than 8 deleteByQuery commands in a single request
    caused an error to be returned, although the deletes were
    still executed.  (asmodean via yonik)

76. SOLR-800: Deep copy collections to avoid ConcurrentModificationException
    in XPathEntityprocessor while streaming
    (Kyle Morrison, Noble Paul via shalin)

77. SOLR-823: Request parameter variables ${dataimporter.request.xxx} are not
    resolved in DIH (Mck SembWever, Noble Paul, shalin)

78. SOLR-728: Add synchronization to avoid race condition of multiple DIH
    imports working concurrently (Walter Ferrara, shalin)

79. SOLR-742: Add ability to create dynamic fields with custom
    DataImportHandler transformers (Wojtek Piaseczny, Noble Paul, shalin)

80. SOLR-832: Rows parameter is not honored in DIH non-debug mode and can
    abort a running import in debug mode. (Akshay Ukey, shalin)

81. SOLR-838: The DIH VariableResolver obtained from a DataSource's context
    does not have current data. (Noble Paul via shalin)

82. SOLR-864: DataImportHandler does not catch and log Errors (shalin)

83. SOLR-873: Fix case-sensitive field names and columns (Jon Baer, shalin)

84. SOLR-893: Unable to delete documents via SQL and deletedPkQuery with
    deltaimport (Dan Rosher via shalin)

85. SOLR-888: DIH DateFormatTransformer cannot convert non-string type
    (Amit Nithian via shalin)

86. SOLR-841: DataImportHandler should throw exception if a field does not
    have column attribute (Michael Henson, shalin)

87. SOLR-884: CachedSqlEntityProcessor should check if the cache key is
    present in the query results (Noble Paul via shalin)

88. SOLR-985: Fix thread-safety issue with DIH TemplateString for concurrent
    imports with multiple cores. (Ryuuichi Kumai via shalin)

89. SOLR-999: DIH XPathRecordReader fails on XMLs with nodes mixed with
    CDATA content. (Fergus McMenemie, Noble Paul via shalin)

90. SOLR-1000: DIH FileListEntityProcessor should not apply fileName filter to
    directory names. (Fergus McMenemie via shalin)

91. SOLR-1009: Repeated column names result in duplicate values.
    (Fergus McMenemie, Noble Paul via shalin)

92. SOLR-1017: Fix DIH thread-safety issue with last_index_time for concurrent
    imports in multiple cores due to unsafe usage of SimpleDateFormat by
    multiple threads. (Ryuuichi Kumai via shalin)

93. SOLR-1024: Calling abort on DataImportHandler import commits data instead
    of calling rollback. (shalin)

94. SOLR-1037: DIH should not add null values in a row returned by
    EntityProcessor to documents. (shalin)

95. SOLR-1040: DIH XPathEntityProcessor fails with an xpath like
    /feed/entry/link[@type='text/html']/@href (Noble Paul via shalin)

96. SOLR-1042: Fix memory leak in DIH by making TemplateString non-static
    member in VariableResolverImpl (Ryuuichi Kumai via shalin)

97. SOLR-1053: IndexOutOfBoundsException in DIH SolrWriter.getResourceAsString
    when size of data-config.xml is a multiple of 1024 bytes.
    (Herb Jiang via shalin)

98. SOLR-1077: IndexOutOfBoundsException with useSolrAddSchema in DIH
    XPathEntityProcessor. (Sam Keen, Noble Paul via shalin)

99. SOLR-1080: DIH RegexTransformer should not replace if regex is not matched.
    (Noble Paul, Fergus McMenemie via shalin)

100.SOLR-1090: DataImportHandler should load the data-config.xml using UTF-8
    encoding. (Rui Pereira, shalin)

101.SOLR-1146: ConcurrentModificationException in DataImporter.getStatusMessages
    (Walter Ferrara, Noble Paul via shalin)

102.SOLR-1229: Fixes for DIH deletedPkQuery, particularly when using
    transformed Solr unique id's
    (Lance Norskog, Noble Paul via ehatcher)

103.SOLR-1286: Fix the IH commit parameter always defaulting to "true" even
    if "false" is explicitly passed in. (Jay Hill, Noble Paul via ehatcher)

104.SOLR-1323: Reset XPathEntityProcessor's $hasMore/$nextUrl when fetching
    next URL (noble, ehatcher)

105.SOLR-1450: DIH: Jdbc connection properties such as batchSize are not
    applied if the driver jar is placed in solr_home/lib.
    (Steve Sun via shalin)

106.SOLR-1474: DIH Delta-import should run even if last_index_time is not set.
    (shalin)


Other Changes
----------------------
 1. Upgraded to Lucene 2.4.0 (yonik)

 2. SOLR-805: Upgraded to Lucene 2.9-dev (r707499) (koji)

 3. DumpRequestHandler (/debug/dump): changed 'fieldName' to 'sourceInfo'. (ehatcher)

 4. SOLR-852: Refactored common code in CSVRequestHandler and XMLUpdateRequestHandler (gsingers, ehatcher)

 5. SOLR-871: Removed dependency on stax-utils.jar.  If you using solr.jar and running
    java 6, you can also remove woodstox and geronimo.  (ryan)

 6. SOLR-465: Upgraded to Lucene 2.9-dev (r719351) (shalin)

 7. SOLR-889: Upgraded to commons-io-1.4.jar and commons-fileupload-1.2.1.jar (ryan)

 8. SOLR-875: Upgraded to Lucene 2.9-dev (r723985) and consolidated the BitSet implementations (Michael Busch, gsingers)

 9. SOLR-819: Upgraded to Lucene 2.9-dev (r724059) to get access to Arabic public constructors (gsingers)

10. SOLR-900: Moved solrj into /src/solrj.  The contents of solr-common.jar is now included
    in the solr-solrj.jar. (ryan)

11. SOLR-924: Code cleanup: make all existing finalize() methods call
    super.finalize() in a finally block.  All current instances extend
    Object, so this doesn't fix any bugs, but helps protect against
    future changes.  (Kay Kay via hossman)

12. SOLR-885: NamedListCodec is renamed to JavaBinCodec and returns Object instead of NamedList.
    (Noble Paul, yonik via shalin)

13. SOLR-84: Use new Solr logo in admin (Michiel via koji)

14. SOLR-981: groupId for Woodstox dependency in maven solrj changed to org.codehaus.woodstox (Tim Taranov via shalin)

15. Upgraded to Lucene 2.9-dev r738218 (yonik)

16. SOLR-959: Refactored TestReplicationHandler to remove hardcoded port numbers (hossman, Akshay Ukey via shalin)

17. Upgraded to Lucene 2.9-dev r742220 (yonik)

18. SOLR-1022: Better "ignored" field in example schema.xml (Peter Wolanin via hossman)

19. SOLR-967: New type-safe constructor for NamedList (Kay Kay via hossman)

20. SOLR-1036: Change default QParser from "lucenePlusSort" to "lucene" to
    reduce confusion of semicolon splitting behavior when no sort param is
    specified (hossman)

21. Upgraded to Lucene 2.9-dev r752164 (shalin)

22. SOLR-1068: Use fsync on replicated index and configuration files (yonik, Noble Paul, shalin)

23. SOLR-952: Cleanup duplicated code in deprecated HighlightingUtils (hossman)

24. Upgraded to Lucene 2.9-dev r764281 (shalin)

25. SOLR-1079:  Rename omitTf to omitTermFreqAndPositions (shalin)

26. SOLR-804: Added Lucene's misc contrib JAR (rev 764281). (gsingers)

27. Upgraded to Lucene 2.9-dev r768228 (shalin)

28. Upgraded to Lucene 2.9-dev r768336 (shalin)

29. SOLR-997: Wait for a longer time for slave to complete replication in TestReplicationHandler
    (Mark Miller via shalin)

30. SOLR-748: FacetComponent helper classes are made public as an experimental API.
    (Wojtek Piaseczny via shalin)

31. Upgraded to Lucene 2.9-dev 773862 (Mark Miller)

32. Upgraded to Lucene 2.9-dev r776177 (shalin)

33. SOLR-1149: Made QParserPlugin and related classes extendible as an experimental API.
    (Kaktu Chakarabati via shalin)

34. Upgraded to Lucene 2.9-dev r779312 (yonik)

35. SOLR-786: Refactor DisMaxQParser to allow overriding certain features of DisMaxQParser
    (Wojciech Biela via shalin)

36. SOLR-458: Add equals and hashCode methods to NamedList (Stefan Rinner, shalin)

37. SOLR-1184: Add option in solrconfig to open a new IndexReader rather than
    using reopen. Done mainly as a fail-safe in the case that a user runs into
    a reopen bug/issue.  (Mark Miller)

38. SOLR-1215 use double quotes to enclose attributes in solr.xml (noble)

39. SOLR-1151: add dynamic copy field and maxChars example to example schema.xml.
    (Peter Wolanin, Mark Miller)

40. SOLR-1233: remove /select?qt=/whatever restriction on /-prefixed request handlers.
    (ehatcher)

41. SOLR-1257: logging.jsp has been removed and now passes through to the
    hierarchical log level tool added in Solr 1.3.  Users still
    hitting "/admin/logging.jsp" should switch to "/admin/logging".
    (hossman)

42. Upgraded to Lucene 2.9-dev r794238. Other changes include:
    - LUCENE-1614 - Use Lucene's DocIdSetIterator.NO_MORE_DOCS as the sentinel value.
    - LUCENE-1630 - Add acceptsDocsOutOfOrder method to Collector implementations.
    - LUCENE-1673, LUCENE-1701 - Trie has moved to Lucene core and renamed to NumericRangeQuery.
    - LUCENE-1662, LUCENE-1687 - Replace usage of ExtendedFieldCache by FieldCache.
    (shalin)

42. SOLR-1241: Solr's CharFilter has been moved to Lucene. Remove CharFilter and related classes
    from Solr and use Lucene's corresponding code (koji via shalin)

43. SOLR-1261: Lucene trunk renamed RangeQuery & Co to TermRangeQuery (Uwe Schindler via shalin)

44. Upgraded to Lucene 2.9-dev r801856 (Mark Miller)

45. SOLR-1276: Added StatsComponentTest (Rafał Kuć, gsingers)

46. SOLR-1377:  The TokenizerFactory API has changed to explicitly return a Tokenizer
    rather then a TokenStream (that may be or may not be a Tokenizer).  This change
    is required to take advantage of the Token reuse improvements in lucene 2.9. (ryan)

47. SOLR-1410: Log a warning if the deprecated charset option is used
    on GreekLowerCaseFilterFactory, RussianStemFilterFactory,
    RussianLowerCaseFilterFactory or RussianLetterTokenizerFactory.
    (Robert Muir via hossman)

48. SOLR-1423: Due to LUCENE-1906, Solr's tokenizer should use Tokenizer.correctOffset() instead of CharStream.correctOffset().
    (Uwe Schindler via koji)

49. SOLR-1319, SOLR-1345: Upgrade Solr Highlighter classes to new Lucene Highlighter API. This upgrade has
    resulted in a back compat break in the DefaultSolrHighlighter class - getQueryScorer is no longer
    protected. If you happened to be overriding that method in custom code, overide getHighlighter instead.
    Also, HighlightingUtils#getQueryScorer has been removed as it was deprecated and backcompat has been
    broken with it anyway.  (Mark Miller)

50. SOLR-1357 SolrInputDocument cannot process dynamic fields (Lars Grote via noble)

51. SOLR-1075: Upgrade to Tika 0.3.  See http://www.apache.org/dist/lucene/tika/CHANGES-0.3.txt (gsingers)

52. SOLR-1310: Upgrade to Tika 0.4. Note there are some differences in
    detecting Languages now in extracting request handler.
    See http://www.lucidimagination.com/search/document/d6f1899a85b2a45c/vote_apache_tika_0_4_release_candidate_2#d6f1899a85b2a45c
    for discussion on language detection.
    See http://www.apache.org/dist/lucene/tika/CHANGES-0.4.txt. (gsingers)

53. SOLR-782: DIH: Refactored SolrWriter to make it a concrete class and
    removed wrappers over SolrInputDocument.  Refactored to load Evaluators
    lazily. Removed multiple document nodes in the configuration xml. Removed
    support for 'default' variables, they are automatically available as
    request parameters. (Noble Paul via shalin)

54. SOLR-964: DIH: XPathEntityProcessor now ignores DTD validations
    (Fergus McMenemie, Noble Paul via shalin)

55. SOLR-1029: DIH: Standardize Evaluator parameter parsing and added helper
    functions for parsing all evaluator parameters in a standard way.
    (Noble Paul, shalin)

56. SOLR-1081: Change DIH EventListener to be an interface so that components
    such as an EntityProcessor or a Transformer can act as an event listener.
    (Noble Paul, shalin)

57. SOLR-1027: DIH: Alias the 'dataimporter' namespace to a shorter name 'dih'.
    (Noble Paul via shalin)

58. SOLR-1084: Better error reporting when DIH entity name is a reserved word
    and data-config.xml root node is not <dataConfig>.
    (Noble Paul via shalin)

59. SOLR-1087: Deprecate 'where' attribute in CachedSqlEntityProcessor in
    favor of cacheKey and cacheLookup. (Noble Paul via shalin)

60. SOLR-969: Change the FULL_DUMP, DELTA_DUMP, FIND_DELTA constants in DIH
    Context to String.  Change Context.currentProcess() to return a string
    instead of an integer.  (Kay Kay, Noble Paul, shalin)

61. SOLR-1120: Simplified DIH EntityProcessor API by moving logic for applying
    transformers and handling multi-row outputs from Transformers into an
    EntityProcessorWrapper class. The behavior of the method
    EntityProcessor#destroy has been modified to be called once per parent-row
    at the end of row. A new method EntityProcessor#close is added which is
    called at the end of import. A new method
    Context#getResolvedEntityAttribute is added which returns the resolved
    value of an entity's attribute. Introduced a DocWrapper which takes care
    of maintaining document level session variables.
    (Noble Paul, shalin)

62. SOLR-1265: Add DIH variable resolving for URLDataSource properties like
    baseUrl.  (Chris Eldredge via ehatcher)

63. SOLR-1269: Better error messages from DIH JdbcDataSource when JDBC Driver
    name or SQL is incorrect. (ehatcher, shalin)


Build
----------------------
 1. SOLR-776: Added in ability to sign artifacts via Ant for releases (gsingers)

 2. SOLR-854: Added run-example target (Mark Miller via ehatcher)

 3. SOLR-1054:Fix dist-src target for DataImportHandler (Ryuuichi Kumai via shalin)

 4. SOLR-1219: Added proxy.setup target (koji)

 5. SOLR-1386: In build.xml, use longfile="gnu" in tar task to avoid warnings about long file names
    (Mark Miller via shalin)

 6. SOLR-1441: Make it possible to run all tests in a package (shalin)


Documentation
----------------------
 1. SOLR-789: The javadoc of RandomSortField is not readable (Nicolas Lalevée via koji)

 2. SOLR-962: Note about null handling in ModifiableSolrParams.add javadoc
    (Kay Kay via hossman)

 3. SOLR-1409: Added Solr Powered By Logos

 4. SOLR-1369: Add HSQLDB Jar to example-DIH, unzip database and update
    instructions.


================== Release 1.3.0 ==================

Upgrading from Solr 1.2
-----------------------
IMPORTANT UPGRADE NOTE: In a master/slave configuration, all searchers/slaves
should be upgraded before the master!  If the master were to be updated
first, the older searchers would not be able to read the new index format.

The Porter snowball based stemmers in Lucene were updated (LUCENE-1142),
and are not guaranteed to be backward compatible at the index level
(the stem of certain words may have changed).  Re-indexing is recommended.

Older Apache Solr installations can be upgraded by replacing
the relevant war file with the new version.  No changes to configuration
files should be needed.

This version of Solr contains a new version of Lucene implementing
an updated index format.  This version of Solr/Lucene can still read
and update indexes in the older formats, and will convert them to the new
format on the first index change.  Be sure to backup your index before
upgrading in case you need to downgrade.

Solr now recognizes HTTP Request headers related to HTTP Caching (see
RFC 2616 sec13) and will by default respond with "304 Not Modified"
when appropriate.  This should only affect users who access Solr via
an HTTP Cache, or via a Web-browser that has an internal cache, but if
you wish to suppress this behavior an '<httpCaching never304="true"/>'
option can be added to your solrconfig.xml.  See the wiki (or the
example solrconfig.xml) for more details...
   http://wiki.apache.org/solr/SolrConfigXml#HTTPCaching

In Solr 1.2, DateField did not enforce the canonical representation of
the ISO 8601 format when parsing incoming data, and did not generation
the canonical format when generating dates from "Date Math" strings
(particularly as it pertains to milliseconds ending in trailing zeros).
As a result equivalent dates could not always be compared properly.
This problem is corrected in Solr 1.3, but DateField users that might
have been affected by indexing inconsistent formats of equivalent
dates (ie: 1995-12-31T23:59:59Z vs 1995-12-31T23:59:59.000Z) may want
to consider reindexing to correct these inconsistencies.  Users who
depend on some of the the "broken" behavior of DateField in Solr 1.2
(specificly: accepting any input that ends in a 'Z') should consider
using the LegacyDateField class as a possible alternative.  Users that
desire 100% backwards compatibility should consider using the Solr 1.2
version of DateField.

Due to some changes in the lifecycle of TokenFilterFactories, users of
Solr 1.2 who have written Java code which constructs new instances of
StopFilterFactory, SynonymFilterFactory, or EnglishProterFilterFactory
will need to modify their code by adding a line like the following
prior to using the factory object...
  factory.inform(SolrCore.getSolrCore().getSolrConfig().getResourceLoader());
These lifecycle changes do not affect people who use Solr "out of the
box" or who have developed their own TokenFilterFactory plugins. More
info can be found in SOLR-594.

The python client that used to ship with Solr is no longer included in
the distribution (see client/python/README.txt).

Detailed Change List
--------------------

New Features
 1. SOLR-69: Adding MoreLikeThisHandler to search for similar documents using
    lucene contrib/queries MoreLikeThis.  MoreLikeThis is also available from
    the StandardRequestHandler using ?mlt=true. (bdelacretaz, ryan)

 2. SOLR-253: Adding KeepWordFilter and KeepWordFilterFactory.  A TokenFilter
    that keeps tokens with text in the registered keeplist.  This behaves like
    the inverse of StopFilter. (ryan)

 3. SOLR-257: WordDelimiterFilter has a new parameter splitOnCaseChange,
    which can be set to 0 to disable splitting "PowerShot" => "Power" "Shot".
    (klaas)

 4. SOLR-193: Adding SolrDocument and SolrInputDocument to represent documents
    outside of the lucene Document infrastructure.  This class will be used
    by clients and for processing documents. (ryan)

 5. SOLR-244: Added ModifiableSolrParams - a SolrParams implementation that
    help you change values after initialization. (ryan)

 6. SOLR-20: Added a java client interface with two implementations.  One
    implementation uses commons httpclient to connect to solr via HTTP.  The
    other connects to solr directly.  Check client/java/solrj.  This addition
    also includes tests that start jetty and test a connection using the full
    HTTP request cycle.  (Darren Erik Vengroff, Will Johnson, ryan)

 7. SOLR-133: Added StaxUpdateRequestHandler that uses StAX for XML parsing.
    This implementation has much better error checking and lets you configure
    a custom UpdateRequestProcessor that can selectively process update
    requests depending on the request attributes.  This class will likely
    replace XmlUpdateRequestHandler.  (Thorsten Scherler, ryan)

 8. SOLR-264: Added RandomSortField, a utility field with a random sort order.
    The seed is based on a hash of the field name, so a dynamic field
    of this type is useful for generating different random sequences.
    This field type should only be used for sorting or as a value source
    in a FunctionQuery (ryan, hossman, yonik)

 9. SOLR-266: Adding show=schema to LukeRequestHandler to show the parsed
    schema fields and field types.  (ryan)

10. SOLR-133: The UpdateRequestHandler now accepts multiple delete options
    within a single request.  For example, sending:
     <delete><id>1</id><id>2</id></delete> will delete both 1 and 2. (ryan)

11. SOLR-269: Added UpdateRequestProcessor plugin framework.  This provides
    a reasonable place to process documents after they are parsed and
    before they are committed to the index.  This is a good place for custom
    document manipulation or document based authorization. (yonik, ryan)

12. SOLR-260: Converting to a standard PluginLoader framework.  This reworks
    RequestHandlers, FieldTypes, and QueryResponseWriters to share the same
    base code for loading and initializing plugins.  This adds a new
    configuration option to define the default RequestHandler and
    QueryResponseWriter in XML using default="true".  (ryan)

13. SOLR-225: Enable pluggable highlighting classes.  Allow configurable
    highlighting formatters and Fragmenters.  (ryan)

14. SOLR-273/376/452/516: Added hl.maxAnalyzedChars highlighting parameter, defaulting
    to 50k, hl.alternateField, which allows the specification of a backup
    field to use as summary if no keywords are matched, and hl.mergeContiguous,
    which combines fragments if they are adjacent in the source document.
    (klaas, Grant Ingersoll, Koji Sekiguchi via klaas)

15. SOLR-291: Control maximum number of documents to cache for any entry
    in the queryResultCache via queryResultMaxDocsCached solrconfig.xml
    entry. (Koji Sekiguchi via yonik)

16. SOLR-240: New <lockType> configuration setting in <mainIndex> and
    <indexDefaults> blocks supports all Lucene builtin LockFactories.
    'single' is recommended setting, but 'simple' is default for total
    backwards compatibility.
    (Will Johnson via hossman)

17. SOLR-248: Added CapitalizationFilterFactory that creates tokens with
    normalized capitalization.  This filter is useful for facet display,
    but will not work with a prefix query.  (ryan)
    SOLR-468: Change to the semantics to keep the original token, not the
    token in the Map.  Also switched to use Lucene's new reusable token
    capabilities.  (gsingers)

18. SOLR-307: Added NGramFilterFactory and EdgeNGramFilterFactory.
    (Thomas Peuss via Otis Gospodnetic)

19. SOLR-305: analysis.jsp can be given a fieldtype instead of a field
    name.  (hossman)

20. SOLR-102: Added RegexFragmenter, which splits text for highlighting
    based on a given pattern.  (klaas)

21. SOLR-258: Date Faceting added to SimpleFacets.  Facet counts
    computed for ranges of size facet.date.gap (a DateMath expression)
    between facet.date.start and facet.date.end.  (hossman)

22. SOLR-196: A PHP serialized "phps" response writer that returns a
    serialized array that can be used with the PHP function unserialize,
    and a PHP response writer "php" that may be used by eval.
    (Nick Jenkin, Paul Borgermans, Pieter Berkel via yonik)

23. SOLR-308: A new UUIDField class which accepts UUID string values,
    as well as the special value of "NEW" which triggers generation of
    a new random UUID.
    (Thomas Peuss via hossman)

24. SOLR-349: New FunctionQuery functions: sum, product, div, pow, log,
    sqrt, abs, scale, map.  Constants may now be used as a value source.
    (yonik)

25. SOLR-359: Add field type className to Luke response, and enabled access
    to the detailed field information from the solrj client API.
    (Grant Ingersoll via ehatcher)

26. SOLR-334: Pluggable query parsers.  Allows specification of query
    type and arguments as a prefix on a query string. (yonik)

27. SOLR-351: External Value Source.  An external file may be used
     to specify the values of a field, currently usable as
     a ValueSource in a FunctionQuery. (yonik)

28. SOLR-395: Many new features for the spell checker implementation, including
    an extended response mode with much richer output, multi-word spell checking,
    and a bevy of new and renamed options (see the wiki).
    (Mike Krimerman, Scott Taber via klaas).

29. SOLR-408: Added PingRequestHandler and deprecated SolrCore.getPingQueryRequest().
    Ping requests should be configured using standard RequestHandler syntax in
    solrconfig.xml rather then using the <pingQuery></pingQuery> syntax.
    (Karsten Sperling via ryan)

30. SOLR-281: Added a 'Search Component' interface and converted StandardRequestHandler
    and DisMaxRequestHandler to use this framework.
    (Sharad Agarwal, Henri Biestro, yonik, ryan)

31. SOLR-176: Add detailed timing data to query response output.  The SearchHandler
    interface now returns how long each section takes.  (klaas)

32. SOLR-414: Plugin initialization now supports SolrCore and ResourceLoader "Aware"
    plugins.  Plugins that implement SolrCoreAware or ResourceLoaderAware are
    informed about the SolrCore/ResourceLoader. (Henri Biestro, ryan)

33. SOLR-350: Support multiple SolrCores running in the same solr instance and allows
    runtime runtime management for any running SolrCore.  If a solr.xml file exists
    in solr.home, this file is used to instanciate multiple cores and enables runtime
    core manipulation.  For more informaion see:  http://wiki.apache.org/solr/CoreAdmin
    (Henri Biestro, ryan)

34. SOLR-447: Added an single request handler that will automatically register all
    standard admin request handlers.  This replaces the need to register (and maintain)
    the set of admin request handlers.  Assuming solrconfig.xml includes:
     <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
    This will register: Luke/SystemInfo/PluginInfo/ThreadDump/PropertiesRequestHandler.
    (ryan)

35. SOLR-142: Added RawResponseWriter and ShowFileRequestHandler.  This returns config
    files directly.  If AdminHandlers are configured, this will be added automatically.
    The jsp files /admin/get-file.jsp and /admin/raw-schema.jsp have been deprecated.
    The deprecated <admin><gettableFiles> will be automatically registered with
    a ShowFileRequestHandler instance for backwards compatibility. (ryan)

36. SOLR-446: TextResponseWriter can write SolrDocuments and SolrDocumentLists the
    same way it writes Document and DocList.  (yonik, ryan)

37. SOLR-418: Adding a query elevation component.  This is an optional component to
    elevate some documents to the top positions (or exclude them) for a given query.
    (ryan)

38. SOLR-478: Added ability to get back unique key information from the LukeRequestHandler.
    (gsingers)

39. SOLR-127: HTTP Caching awareness.  Solr now recognizes HTTP Request
    headers related to HTTP Caching (see RFC 2616 sec13) and will respond
    with "304 Not Modified" when appropriate.  New options have been added
    to solrconfig.xml to influence this behavior.
    (Thomas Peuss via hossman)

40. SOLR-303: Distributed Search over HTTP.  Specification of shards
    argument causes Solr to query those shards and merge the results
    into a single response.  Querying, field faceting (sorted only),
    query faceting, highlighting, and debug information are supported
    in distributed mode.
    (Sharad Agarwal, Patrick O'Leary, Sabyasachi Dalal, Stu Hood,
     Jayson Minard, Lars Kotthoff, ryan, yonik)

41. SOLR-356: Pluggable functions (value sources) that allow
    registration of new functions via solrconfig.xml
    (Doug Daniels via yonik)

42. SOLR-494: Added cool admin Ajaxed schema explorer.
    (Greg Ludington via ehatcher)

43. SOLR-497: Added date faceting to the QueryResponse in SolrJ
    and QueryResponseTest (Shalin Shekhar Mangar via gsingers)

44. SOLR-486: Binary response format, faster and smaller
    than XML and JSON response formats (use wt=javabin).
    BinaryResponseParser for utilizing the binary format via SolrJ
    and is now the default.
    (Noble Paul, yonik)

45. SOLR-521: StopFilterFactory support for "enablePositionIncrements"
    (Walter Ferrara via hossman)

46. SOLR-557: Added SolrCore.getSearchComponents() to return an unmodifiable Map. (gsingers)

47. SOLR-516: Added hl.maxAlternateFieldLength parameter, to set max length for hl.alternateField
    (Koji Sekiguchi via klaas)

48. SOLR-319: Changed SynonymFilterFactory to "tokenize" synonyms file.
    To use a tokenizer, specify "tokenizerFactory" attribute in <filter>.
    For example:
    <tokenizer class="solr.CJKTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" expand="true"
      ignoreCase="true" tokenizerFactory="solr.CJKTokenizerFactory"/>
    (koji)

49. SOLR-515: Added SimilarityFactory capability to schema.xml,
    making config file parameters usable in the construction of
    the global Lucene Similarity implementation.
    (ehatcher)

50. SOLR-536: Add a DocumentObjectBinder to solrj that converts Objects to and
    from SolrDocuments.  (Noble Paul via ryan)

51. SOLR-595: Add support for Field level boosting in the MoreLikeThis Handler.
    (Tom Morton, gsingers)

52. SOLR-572: Added SpellCheckComponent and org.apache.solr.spelling package to support more spell
    checking functionality.  Also includes ability to add your own SolrSpellChecker implementation that
    plugs in.  See http://wiki.apache.org/solr/SpellCheckComponent for more details
    (Shalin Shekhar Mangar, Bojan Smid, gsingers)

53. SOLR-679: Added accessor methods to Lucene based spell checkers (gsingers)

54. SOLR-423: Added Request Handler close hook notification so that RequestHandlers can be notified
    when a core is closing.  (gsingers, ryan)

55. SOLR-603: Added ability to partially optimize. (gsingers)

56. SOLR-483: Add byte/short sorting support (gsingers)

57. SOLR-14: Add preserveOriginal flag to WordDelimiterFilter
    (Geoffrey Young, Trey Hyde, Ankur Madnani, yonik)

58. SOLR-502: Add search timeout support. (Sean Timm via yonik)

59. SOLR-605: Add the ability to register callbacks programatically (ryan, Noble Paul)

60. SOLR-610: hl.maxAnalyzedChars can be -1 to highlight everything (Lars Kotthoff via klaas)

61. SOLR-522: Make analysis.jsp show payloads. (Tricia Williams via yonik)

62. SOLR-611: Expose sort_values returned by QueryComponent in SolrJ's QueryResponse
    (Dan Rosher via shalin)

63. SOLR-256: Support exposing Solr statistics through JMX (Sharad Agrawal, shalin)

64. SOLR-666: Expose warmup time in statistics for SolrIndexSearcher and LRUCache (shalin)

65. SOLR-663: Allow multiple files for stopwords, keepwords, protwords and synonyms
    (Otis Gospodnetic, shalin)

66. SOLR-469: Added DataImportHandler as a contrib project which makes indexing data from Databases,
    XML files and HTTP data sources into Solr quick and easy. Includes API and implementations for
    supporting multiple data sources, processors and transformers for importing data. Supports full
    data imports as well as incremental (delta) indexing. See http://wiki.apache.org/solr/DataImportHandler
    for more details. (Noble Paul, shalin)

67. SOLR-622: SpellCheckComponent supports auto-loading indices on startup and optionally, (re)builds
    indices on newSearcher event, if configured in solrconfig.xml (shalin)

68. SOLR-554: Hierarchical JDK log level selector for SOLR Admin replaces logging.jsp
    (Sean Timm via shalin)

69. SOLR-506: Emitting HTTP Cache headers can be enabled or disabled through configuration on a
    per-handler basis (shalin)

70. SOLR-716: Added support for properties in configuration files. Properties can be specified in
    solr.xml and can be used in solrconfig.xml and schema.xml (Henri Biestro, hossman, ryan, shalin)

71. SOLR-1129 : Support binding dynamic fields to beans in SolrJ (Avlesh Singh , noble)

72. SOLR-920 : Cache and reuse IndexSchema . A new attribute added in solr.xml called 'shareSchema' (noble)

73. SOLR-700: DIH: Allow configurable locales through a locale attribute in
    fields for NumberFormatTransformer. (Stefan Oestreicher, shalin)

Changes in runtime behavior
 1. SOLR-559: use Lucene updateDocument, deleteDocuments methods.  This
    removes the maxBufferedDeletes parameter added by SOLR-310 as Lucene
    now manages the deletes.  This provides slightly better indexing
    performance and makes overwrites atomic, eliminating the possibility of
    a crash causing duplicates. (yonik)

 2. SOLR-689 / SOLR-695: If you have used "MultiCore" functionality in an unreleased
    version of 1.3-dev, many classes and configs have been renamed for the official
    1.3 release.  Speciffically, solr.xml has replaced multicore.xml, and uses a slightly
    different syntax.  The solrj classes: MultiCore{Request/Response/Params} have been
    renamed:  CoreAdmin{Request/Response/Params}  (hossman, ryan, Henri Biestro)

 3. SOLR-647: reference count the SolrCore uses to prevent a premature
    close while a core is still in use.  (Henri Biestro, Noble Paul, yonik)

 4. SOLR-737: SolrQueryParser now uses a ConstantScoreQuery for wildcard
    queries that prevent an exception from being thrown when the number
    of matching terms exceeds the BooleanQuery clause limit.  (yonik)

Optimizations
 1. SOLR-276: improve JSON writer speed. (yonik)

 2. SOLR-310: bound and reduce memory usage by providing <maxBufferedDeletes> parameter,
    which flushes deleted without forcing the user to use <commit/> for this purpose.
    (klaas)

 3. SOLR-348: short-circuit faceting if less than mincount docs match. (yonik)

 4. SOLR-354: Optimize removing all documents.  Now when a delete by query
    of *:* is issued, the current index is removed. (yonik)

 5. SOLR-377: Speed up response writers. (yonik)

 6. SOLR-342:  Added support into the SolrIndexWriter for using several new features of the new
    LuceneIndexWriter, including: setRAMBufferSizeMB(), setMergePolicy(), setMergeScheduler.
    Also, added support to specify Lucene's autoCommit functionality (not to be confused with Solr's
    similarily named autoCommit functionality) via the <luceneAutoCommit> config. item.  See the test
    and example solrconfig.xml <indexDefaults> section for usage.  Performance during indexing should
    be significantly increased by moving up to 2.3 due to Lucene's new indexing capabilities.
    Furthermore, the setRAMBufferSizeMB makes it more logical to decide on tuning factors related to
    indexing.  For best performance, leave the mergePolicy and mergeScheduler as the defaults and set
    ramBufferSizeMB instead of maxBufferedDocs.  The best value for this depends on the types of
    documents in use.  32 should be a good starting point, but reports have shown up to 48 MB provides
    good results. Note, it is acceptable to set both ramBufferSizeMB and maxBufferedDocs, and Lucene
    will flush based on whichever limit is reached first. (gsingers)

 7. SOLR-330: Converted TokenStreams to use Lucene's new char array based
    capabilities. (gsingers)

 8. SOLR-624: Only take snapshots if there are differences to the index (Richard Trey Hyde via gsingers)

 9. SOLR-587: Delete by Query performance greatly improved by using
    new underlying Lucene IndexWriter implementation.  (yonik)

10. SOLR-730: Use read-only IndexReaders that don't synchronize
    isDeleted().  This will speed up function queries and *:* queries
    as well as improve their scalability on multi-CPU systems.
    (Mark Miller via yonik)

Bug Fixes
 1. Make TextField respect sortMissingFirst and sortMissingLast fields.
    (J.J. Larrea via yonik)

 2. autoCommit/maxDocs was not working properly when large autoCommit/maxTime
    was specified (klaas)

 3. SOLR-283: autoCommit was not working after delete. (ryan)

 4. SOLR-286: ContentStreamBase was not using default encoding for getBytes()
    (Toru Matsuzawa via ryan)

 5. SOLR-292: Fix MoreLikeThis facet counting. (Pieter Berkel via ryan)

 6. SOLR-297: Fix bug in RequiredSolrParams where requiring a field
    specific param would fail if a general default value had been supplied.
    (hossman)

 7. SOLR-331: Fix WordDelimiterFilter handling of offsets for synonyms or
    other injected tokens that can break highlighting. (yonik)

 8. SOLR-282: Snapshooter does not work on Solaris and OS X since the cp command
    there does not have the -l option.  Also updated commit/optimize related
    scripts to handle both old and new response format.  (bill)

 9. SOLR-294: Logging of elapsed time broken on Solaris because the date command
    there does not support the %s output format.  (bill)

10. SOLR-136: Snappuller - "date -d" and locales don't mix.  (Jürgen Hermann via bill)

11. SOLR-333: Changed distributiondump.jsp to use Solr HOME instead of CWD to set path.

12. SOLR-393: Removed duplicate contentType from raw-schema.jsp. (bill)

13. SOLR-413: Requesting a large numbers of documents to be returned (limit)
    can result in an out-of-memory exception, even for a small index. (yonik)

14. The CSV loader incorrectly threw an exception when given
    header=true (the default).  (ryan, yonik)

15. SOLR-449: the python and ruby response writers are now able to correctly
    output NaN and Infinity in their respective languages.  (klaas)

16. SOLR-42: HTMLStripReader tokenizers now preserve correct source
    offsets for highlighting.  (Grant Ingersoll via yonik)

17. SOLR-481: Handle UnknownHostException in _info.jsp (gsingers)

18. SOLR-324: Add proper support for Long and Doubles in sorting, etc. (gsingers)

19. SOLR-496: Cache-Control max-age changed to Long so Expires
    calculation won't cause overflow.  (Thomas Peuss via hossman)

20. SOLR-535: Fixed typo (Tokenzied -> Tokenized) in schema.jsp (Thomas Peuss via billa)

21. SOLR-529: Better error messages from SolrQueryParser when field isn't
    specified and there is no defaultSearchField in schema.xml
    (Lars Kotthoff via hossman)

22. SOLR-530: Better error messages/warnings when parsing schema.xml:
    field using bogus fieldtype and multiple copyFields to a non-multiValue
    field.  (Shalin Shekhar Mangar via hossman)

23. SOLR-528: Better error message when defaultSearchField is bogus or not
    indexed.  (Lars Kotthoff via hossman)

24. SOLR-533: Fixed tests so they don't use hardcoded port numbers.
    (hossman)

25. SOLR-400: SolrExceptionTest should now handle using OpenDNS as a DNS provider (gsingers)

26. SOLR-541: Legacy XML update support (provided by SolrUpdateServlet
    when no RequestHandler is mapped to "/update") now logs error correctly.
    (hossman)

27. SOLR-267: Changed logging to report number of hits, and also provide a mechanism to add log
    messages to be output by the SolrCore via a NamedList toLog member variable.
    (Will Johnson, yseeley, gsingers)

    - SOLR-267: Removed adding values to the HTTP headers in SolrDispatchFilter (gsingers)

28. SOLR-509: Moved firstSearcher event notification to the end of the SolrCore constructor
    (Koji Sekiguchi via gsingers)

29. SOLR-470, SOLR-552, SOLR-544, SOLR-701: Multiple fixes to DateField
    regarding lenient parsing of optional milliseconds, and correct
    formating using the canonical representation.  LegacyDateField has
    been added for people who have come to depend on the existing
    broken behavior. (hossman, Stefan Oestreicher)

30. SOLR-539: Fix for non-atomic long counters and a cast fix to avoid divide
    by zero. (Sean Timm via Otis Gospodnetic)

31. SOLR-514: Added explicit media-type with UTF* charset to *.xsl files that
    don't already have one. (hossman)

32. SOLR-505: Give RequestHandlers the possiblity to suppress the generation
    of HTTP caching headers.  (Thomas Peuss via Otis Gospodnetic)

33. SOLR-553: Handle highlighting of phrase terms better when
    hl.usePhraseHighligher=true URL param is used.
    (Bojan Smid via Otis Gospodnetic)

34. SOLR-590: Limitation in pgrep on Linux platform breaks script-utils fixUser.
    (Hannes Schmidt via billa)

35. SOLR-597: SolrServlet no longer "caches" SolrCore.  This was causing
    problems in Resin, and could potentially cause problems for customized
    usages of SolrServlet.

36. SOLR-585: Now sets the QParser on the ResponseBuilder (gsingers)

37. SOLR-604: If the spellchecking path is relative, make it relative to the Solr Data Directory.
    (Shalin Shekhar Mangar via gsingers)

38. SOLR-584: Make stats.jsp and stats.xsl more robust.
    (Yousef Ourabi and hossman)

39. SOLR-443: SolrJ: Declare UTF-8 charset on POSTed parameters
    to avoid problems with servlet containers that default to latin-1
    and allow switching of the exact POST mechanism for parameters
    via useMultiPartPost in CommonsHttpSolrServer.
    (Lars Kotthoff, Andrew Schurman, ryan, yonik)

40. SOLR-556: multi-valued fields always highlighted in disparate snippets
    (Lars Kotthoff via klaas)

41. SOLR-501: Fix admin/analysis.jsp UTF-8 input for some other servlet
    containers such as Tomcat. (Hiroaki Kawai, Lars Kotthoff via yonik)

42. SOLR-616: SpellChecker accuracy configuration is not applied for FileBasedSpellChecker.
    Apply it for FileBasedSpellChecker and IndexBasedSpellChecker both.
    (shalin)

43. SOLR-648: SpellCheckComponent throws NullPointerException on using spellcheck.q request
    parameter after restarting Solr, if reload is called but build is not called.
    (Jonathan Lee, shalin)

44. SOLR-598: DebugComponent now always occurs last in the SearchHandler list unless the
    components are explicitly declared. (gsingers)

45. SOLR-676: DataImportHandler should use UpdateRequestProcessor API instead of directly
    using UpdateHandler. (shalin)

46. SOLR-696: Fixed bug in NamedListCodec in regards to serializing Iterable objects.  (gsingers)

47. SOLR-669: snappuler fix for FreeBSD/Darwin (Richard "Trey" Hyde via Otis Gospodnetic)

48. SOLR-606: Fixed spell check collation offset issue. (Stefan Oestreicher , Geoffrey Young, gsingers)

49. SOLR-589: Improved handling of badly formated query strings (Sean Timm via Otis Gospodnetic)

50. SOLR-749: Allow QParser and ValueSourceParsers to be extended with same name (hossman, gsingers)

51. SOLR-704: DIH NumberFormatTransformer can silently ignore part of the
    string while parsing. Now it tries to use the complete string for parsing.
    Failure to do so will result in an exception.
    (Stefan Oestreicher via shalin)

52. SOLR-729: DIH Context.getDataSource(String) gives current entity's
    DataSource instance regardless of argument. (Noble Paul, shalin)

53. SOLR-726: DIH: Jdbc Drivers and DataSources fail to load if placed in
    multicore sharedLib or core's lib directory.
    (Walter Ferrara, Noble Paul, shalin)

Other Changes
 1. SOLR-135: Moved common classes to org.apache.solr.common and altered the
    build scripts to make two jars: apache-solr-1.3.jar and
    apache-solr-1.3-common.jar.  This common.jar can be used in client code;
    It does not have lucene or junit dependencies.  The original classes
    have been replaced with a @Deprecated extended class and are scheduled
    to be removed in a later release.  While this change does not affect API
    compatibility, it is recommended to update references to these
    deprecated classes.  (ryan)

 2. SOLR-268: Tweaks to post.jar so it prints the error message from Solr.
    (Brian Whitman via hossman)

 3. Upgraded to Lucene 2.2.0; June 18, 2007.

 4. SOLR-215: Static access to SolrCore.getSolrCore() and SolrConfig.config
    have been deprecated in order to support multiple loaded cores.
    (Henri Biestro via ryan)

 5. SOLR-367: The create method in all TokenFilter and Tokenizer Factories
    provided by Solr now declare their specific return types instead of just
    using "TokenStream" (hossman)

 6. SOLR-396: Hooks add to build system for automatic generation of (stub)
    Tokenizer and TokenFilter Factories.
    Also: new Factories for all Tokenizers and TokenFilters provided by the
    lucene-analyzers-2.2.0.jar -- includes support for German, Chinese,
    Russan, Dutch, Greek, Brazilian, Thai, and French.   (hossman)

 7. Upgraded to commons-CSV r609327, which fixes escaping bugs and
    introduces new escaping and whitespace handling options to
    increase compatibility with different formats.  (yonik)

 8. Upgraded to Lucene 2.3.0; Jan 23, 2008.

 9. SOLR-451: Changed analysis.jsp to use POST instead of GET, also made the input area a
    bit bigger (gsingers)

10. Upgrade to Lucene 2.3.1

11. SOLR-531: Different exit code for rsyncd-start and snappuller if disabled (Thomas Peuss via billa)

12. SOLR-550: Clarified DocumentBuilder addField javadocs (gsingers)

13. Upgrade to Lucene 2.3.2

14. SOLR-518: Changed luke.xsl to use divs w/css for generating histograms
    instead of SVG  (Thomas Peuss via hossman)

15. SOLR-592: Added ShardParams interface and changed several string literals
    to references to constants in CommonParams.
    (Lars Kotthoff via Otis Gospodnetic)

16. SOLR-520: Deprecated unused LengthFilter since already core in
    Lucene-Java (hossman)

17. SOLR-645: Refactored SimpleFacetsTest (Lars Kotthoff via hossman)

18. SOLR-591: Changed Solrj default value for facet.sort to true (Lars Kotthoff via Shalin)

19. Upgraded to Lucene 2.4-dev (r669476) to support SOLR-572 (gsingers)

20. SOLR-636: Improve/simplify example configs; and make index.jsp
    links more resilient to configs loaded via an InputStream
    (Lars Kotthoff, hossman)

21. SOLR-682: Scripts now support FreeBSD (Richard Trey Hyde via gsingers)

22. SOLR-489: Added in deprecation comments.  (Sean Timm, Lars Kothoff via gsingers)

23. SOLR-692: Migrated to stable released builds of StAX API 1.0.1 and StAX 1.2.0 (shalin)
24. Upgraded to Lucene 2.4-dev (r686801) (yonik)
25. Upgraded to Lucene 2.4-dev (r688745) 27-Aug-2008 (yonik)
26. Upgraded to Lucene 2.4-dev (r691741) 03-Sep-2008 (yonik)
27. Replaced the StAX reference implementation with the geronimo
    StAX API jar, and the Woodstox StAX implementation. (yonik)

Build
 1. SOLR-411.  Changed the names of the Solr JARs to use the defacto standard JAR names based on
    project-name-version.jar.  This yields, for example:
      apache-solr-common-1.3-dev.jar
      apache-solr-solrj-1.3-dev.jar
      apache-solr-1.3-dev.jar

 2. SOLR-479: Added clover code coverage targets for committers and the nightly build.  Requires
    the Clover library, as licensed to Apache and only available privately.  To run:
          ant -Drun.clover=true clean clover test generate-clover-reports

 3. SOLR-510: Nightly release includes client sources. (koji)

 4. SOLR-563: Modified the build process to build contrib projects
    (Shalin Shekhar Mangar via Otis Gospodnetic)

 5. SOLR-673: Modify build file to create javadocs for core, solrj, contrib and "all inclusive" (shalin)

 6. SOLR-672: Nightly release includes contrib sources. (Jeremy Hinegardner, shalin)

 7. SOLR-586: Added ant target and POM files for building maven artifacts of the Solr core, common,
              client and contrib. The target can publish artifacts with source and javadocs.
              (Spencer Crissman, Craig McClanahan, shalin)

================== Release 1.2 ==================

Upgrading from Solr 1.1
-------------------------------------
IMPORTANT UPGRADE NOTE: In a master/slave configuration, all searchers/slaves
should be upgraded before the master!  If the master were to be updated
first, the older searchers would not be able to read the new index format.

Older Apache Solr installations can be upgraded by replacing
the relevant war file with the new version.  No changes to configuration
files should be needed.

This version of Solr contains a new version of Lucene implementing
an updated index format.  This version of Solr/Lucene can still read
and update indexes in the older formats, and will convert them to the new
format on the first index change.  One change in the new index format
is that all "norms" are kept in a single file, greatly reducing the number
of files per segment. Users of compound file indexes will want to consider
converting to the non-compound format for faster indexing and slightly better
search concurrency.

The JSON response format for facets has changed to make it easier for
clients to retain sorted order.  Use json.nl=map explicitly in clients
to get the old behavior, or add it as a default to the request handler
in solrconfig.xml

The Lucene based Solr query syntax is slightly more strict.
A ':' in a field value must be escaped or the whole value must be quoted.

The Solr "Request Handler" framework has been updated in two key ways:
First, if a Request Handler is registered in solrconfig.xml with a name
starting with "/" then it can be accessed using path-based URL, instead of
using the legacy "/select?qt=name" URL structure.  Second, the Request
Handler framework has been extended making it possible to write Request
Handlers that process streams of data for doing updates, and there is a
new-style Request Handler for XML updates given the name of "/update" in
the example solrconfig.xml.  Existing installations without this "/update"
handler will continue to use the old update servlet and should see no
changes in behavior.  For new-style update handlers, errors are now
reflected in the HTTP status code, Content-type checking is more strict,
and the response format has changed and is controllable via the wt
parameter.



Detailed Change List
--------------------

New Features
 1. SOLR-82: Default field values can be specified in the schema.xml.
    (Ryan McKinley via hossman)

 2. SOLR-89: Two new TokenFilters with corresponding Factories...
    * TrimFilter - Trims leading and trailing whitespace from Tokens
    * PatternReplaceFilter - applies a Pattern to each token in the
      stream, replacing match occurances with a specified replacement.
    (hossman)

 3. SOLR-91: allow configuration of a limit of the number of searchers
    that can be warming in the background.  This can be used to avoid
    out-of-memory errors, or contention caused by more and more searchers
    warming in the background.  An error is thrown if the limit specified
    by maxWarmingSearchers in solrconfig.xml is exceeded. (yonik)

 4. SOLR-106: New faceting parameters that allow specification of a
    minimum count for returned facets (facet.mincount), paging through facets
    (facet.offset, facet.limit), and explicit sorting (facet.sort).
    facet.zeros is now deprecated.  (yonik)

 5. SOLR-80: Negative queries are now allowed everywhere.  Negative queries
    are generated and cached as their positive counterpart, speeding
    generation and generally resulting in smaller sets to cache.
    Set intersections in SolrIndexSearcher are more efficient,
    starting with the smallest positive set, subtracting all negative
    sets, then intersecting with all other positive sets.  (yonik)

 6. SOLR-117: Limit a field faceting to constraints with a prefix specified
    by facet.prefix or f.<field>.facet.prefix. (yonik)

 7. SOLR-107: JAVA API: Change NamedList to use Java5 generics
    and implement Iterable<Map.Entry> (Ryan McKinley via yonik)

 8. SOLR-104: Support for "Update Plugins" -- RequestHandlers that want
    access to streams of data for doing updates.  ContentStreams can come
    from the raw POST body, multi-part form data, or remote URLs.
    Included in this change is a new SolrDispatchFilter that allows
    RequestHandlers registered with names that begin with a "/" to be
    accessed using a URL structure based on that name.
    (Ryan McKinley via hossman)

 9. SOLR-126: DirectUpdateHandler2 supports autocommitting after a specified time
    (in ms), using <autoCommit><maxTime>10000</maxTime></autoCommit>.
    (Ryan McKinley via klaas).

10. SOLR-116: IndexInfoRequestHandler added. (Erik Hatcher)

11. SOLR-79: Add system property ${<sys.prop>[:<default>]} substitution for
    configuration files loaded, including schema.xml and solrconfig.xml.
    (Erik Hatcher with inspiration from Andrew Saar)

12. SOLR-149: Changes to make Solr more easily embeddable, in addition
    to logging which request handler handled each request.
    (Ryan McKinley via yonik)

13. SOLR-86: Added standalone Java-based command-line updater.
    (Erik Hatcher via Bertrand Delecretaz)

14. SOLR-152: DisMaxRequestHandler now supports configurable alternate
    behavior when q is not specified.  A "q.alt" param can be specified
    using SolrQueryParser syntax as a mechanism for specifying what query
    the dismax handler should execute if the main user query (q) is blank.
    (Ryan McKinley via hossman)

15. SOLR-158: new "qs" (Query Slop) param for DisMaxRequestHandler
    allows for specifying the amount of default slop to use when parsing
    explicit phrase queries from the user.
    (Adam Hiatt via hossman)

16. SOLR-81: SpellCheckerRequestHandler that uses the SpellChecker from
    the Lucene contrib.
    (Otis Gospodnetic and Adam Hiatt)

17. SOLR-182: allow lazy loading of request handlers on first request.
    (Ryan McKinley via yonik)

18. SOLR-81: More SpellCheckerRequestHandler enhancements, inlcluding
    support for relative or absolute directory path configurations, as
    well as RAM based directory. (hossman)

19. SOLR-197: New parameters for input: stream.contentType for specifying
    or overriding the content type of input, and stream.file for reading
    local files. (Ryan McKinley via yonik)

20. SOLR-66: CSV data format for document additions and updates. (yonik)

21. SOLR-184: add echoHandler=true to responseHeader, support echoParams=all
    (Ryan McKinley via ehatcher)

22. SOLR-211: Added a regex PatternTokenizerFactory.  This extracts tokens
    from the input string using a regex Pattern. (Ryan McKinley)

23. SOLR-162: Added a "Luke" request handler and other admin helpers.
    This exposes the system status through the standard requestHandler
    framework. (ryan)

24. SOLR-212: Added a DirectSolrConnection class.  This lets you access
    solr using the standard request/response formats, but does not require
    an HTTP connection.  It is designed for embedded applications. (ryan)

25. SOLR-204: The request dispatcher (added in SOLR-104) can handle
    calls to /select.  This offers uniform error handling for /update and
    /select.  To enable this behavior, you must add:
      <requestDispatcher handleSelect="true" > to your solrconfig.xml
    See the example solrconfig.xml for details.  (ryan)

26. SOLR-170: StandardRequestHandler now supports a "sort" parameter.
    Using the ';' syntax is still supported, but it is recommended to
    transition to the new syntax. (ryan)

27. SOLR-181: The index schema now supports "required" fields.  Attempts
    to add a document without a required field will fail, returning a
    descriptive error message.  By default, the uniqueKey field is
    a required field.  This can be disabled by setting required=false
    in schema.xml.  (Greg Ludington via ryan)

28. SOLR-217: Fields configured in the schema to be neither indexed or
    stored will now be quietly ignored by Solr when Documents are added.
    The example schema has a comment explaining how this can be used to
    ignore any "unknown" fields.
    (Will Johnson via hossman)

29. SOLR-227: If schema.xml defines multiple fieldTypes, fields, or
    dynamicFields with the same name, a severe error will be logged rather
    then quietly continuing. Depending on the <abortOnConfigurationError>
    settings, this may halt the server.  Likewise, if solrconfig.xml
    defines multiple RequestHandlers with the same name it will also add
    an error.  (ryan)

30. SOLR-226: Added support for dynamic field as the destination of a
    copyField using glob (*) replacement. (ryan)

31. SOLR-224: Adding a PhoneticFilterFactory that uses apache commons codec
    language encoders to build phonetically similar tokens.  This currently
    supports: DoubleMetaphone, Metaphone, Soundex, and RefinedSoundex (ryan)

32. SOLR-199: new n-gram tokenizers available via NGramTokenizerFactory
    and EdgeNGramTokenizerFactory. (Adam Hiatt via yonik)

33. SOLR-234: TrimFilter can update the Token's startOffset and endOffset
    if updateOffsets="true".  By default the Token offsets are unchanged.
    (ryan)

34. SOLR-208: new example_rss.xsl and example_atom.xsl to provide more
    examples for people about the Solr XML response format and how they
    can transform it to suit different needs.
    (Brian Whitman via hossman)

35. SOLR-249: Deprecated SolrException( int, ... ) constructors in favor
    of constructors that takes an ErrorCode enum.  This will ensure that
    all SolrExceptions use a valid HTTP status code. (ryan)

36. SOLR-386: Abstracted SolrHighlighter and moved existing implementation
    to DefaultSolrHighlighter.  Adjusted SolrCore and solrconfig.xml so
    that highlighter is configurable via a class attribute.  Allows users
    to use their own highlighter implementation. (Tricia Williams via klaas)

Changes in runtime behavior
 1. Highlighting using DisMax will only pick up terms from the main
    user query, not boost or filter queries (klaas).

 2. SOLR-125: Change default of json.nl to flat, change so that
    json.nl only affects items where order matters (facet constraint
    listings).  Fix JSON output bug for null values.  Internal JAVA API:
    change most uses of NamedList to SimpleOrderedMap. (yonik)

 3. A new method "getSolrQueryParser" has been added to the IndexSchema
    class for retrieving a new SolrQueryParser instance with all options
    specified in the schema.xml's <solrQueryParser> block set.  The
    documentation for the SolrQueryParser constructor and its use of
    IndexSchema have also been clarified.
    (Erik Hatcher and hossman)

 4. DisMaxRequestHandler's bq, bf, qf, and pf parameters can now accept
    multiple values (klaas).

 5. Query are re-written before highlighting is performed.  This enables
    proper highlighting of prefix and wildcard queries (klaas).

 6. A meaningful exception is raised when attempting to add a doc missing
    a unique id if it is declared in the schema and allowDups=false.
    (ryan via klaas)

 7. SOLR-183: Exceptions with error code 400 are raised when
    numeric argument parsing fails.  RequiredSolrParams class added
    to facilitate checking for parameters that must be present.
    (Ryan McKinley, J.J. Larrea via yonik)

 8. SOLR-179: By default, solr will abort after any severe initialization
    errors.  This behavior can be disabled by setting:
    <abortOnConfigurationError>false</abortOnConfigurationError>
    in solrconfig.xml (ryan)

 9. The example solrconfig.xml maps /update to XmlUpdateRequestHandler using
    the new request dispatcher (SOLR-104).  This requires posted content to
    have a valid contentType: curl -H 'Content-type:text/xml; charset=utf-8'
    The response format matches that of /select and returns standard error
    codes.  To enable solr1.1 style /update, do not map "/update" to any
    handler in solrconfig.xml (ryan)

10. SOLR-231: If a charset is not specified in the contentType,
    ContentStream.getReader() will use UTF-8 encoding.  (ryan)

11. SOLR-230: More options for post.jar to support stdin, xml on the
    commandline, and defering commits.  Tutorial modified to take
    advantage of these options so there is no need for curl.
    (hossman)

12. SOLR-128: Upgraded Jetty to the latest stable release 6.1.3 (ryan)

Optimizations
 1. SOLR-114: HashDocSet specific implementations of union() and andNot()
    for a 20x performance improvement for those set operations, and a new
    hash algorithm speeds up exists() by 10% and intersectionSize() by 8%.
    (yonik)

 2. SOLR-115: Solr now uses BooleanQuery.clauses() instead of
    BooleanQuery.getClauses() in any situation where there is no risk of
    modifying the original query.
    (hossman)

 3. SOLR-221: Speed up sorted faceting on multivalued fields by ~60%
    when the base set consists of a relatively large portion of the
    index. (yonik)

 4. SOLR-221: Added a facet.enum.cache.minDf parameter which avoids
    using the filterCache for terms that match few documents, trading
    decreased memory usage for increased query time. (yonik)

Bug Fixes
 1. SOLR-87: Parsing of synonym files did not correctly handle escaped
    whitespace such as \r\n\t\b\f. (yonik)

 2. SOLR-92: DOMUtils.getText (used when parsing config files) did not
    work properly with many DOM implementations when dealing with
    "Attributes". (Ryan McKinley via hossman)

 3. SOLR-9,SOLR-99: Tighten up sort specification error checking, throw
    exceptions for missing sort specifications or a sort on a non-indexed
    field. (Ryan McKinley via yonik)

 4. SOLR-145: Fix for bug introduced in SOLR-104 where some Exceptions
    were being ignored by all "out of the box" RequestHandlers. (hossman)

 5. SOLR-166: JNDI solr.home code refactoring.  SOLR-104 moved
    some JNDI related code to the init method of a Servlet Filter -
    according to the Servlet Spec, all Filter's should be initialized
    prior to initializing any Servlets, but this is not the case in at
    least one Servlet Container (Resin).  This "bug fix" refactors
    this JNDI code so that it should be executed the first time any
    attempt is made to use the solr.home dir.
    (Ryan McKinley via hossman)

 6. SOLR-173: Bug fix to SolrDispatchFilter to reduce "too many open
    files" problem was that SolrDispatchFilter was not closing requests
    when finished.  Also modified ResponseWriters to only fetch a Searcher
    reference if necessary for writing out DocLists.
    (Ryan McKinley via hossman)

 7. SOLR-168: Fix display positioning of multiple tokens at the same
    position in analysis.jsp (yonik)

 8. SOLR-167: The SynonymFilter sometimes generated incorrect offsets when
    multi token synonyms were mached in the source text. (yonik)

 9. SOLR-188: bin scripts do not support non-default webapp names.  Added "-U"
    option to specify a full path to the update url, overriding the
    "-h" (hostname), "-p" (port) and "-w" (webapp name) parameters.
    (Jeff Rodenburg via billa)

10. SOLR-198: RunExecutableListener always waited for the process to
    finish, even when wait="false" was set. (Koji Sekiguchi via yonik)

11. SOLR-207: Changed distribution scripts to remove recursive find
    and avoid use of "find -maxdepth" on platforms where it is not
    supported. (yonik)

12. SOLR-222: Changing writeLockTimeout in solrconfig.xml did not
    change the effective timeout. (Koji Sekiguchi via yonik)

13. Changed the SOLR-104 RequestDispatcher so that /select?qt=xxx can not
    access handlers that start with "/".  This makes path based authentication
    possible for path based request handlers.  (ryan)

14. SOLR-214: Some servlet containers (including Tomcat and Resin) do not
    obey the specified charset.  Rather then letting the the container handle
    it solr now uses the charset from the header contentType to decode posted
    content.  Using the contentType: "text/xml; charset=utf-8" will force
    utf-8 encoding.  If you do not specify a contentType, it will use the
    platform default.  (Koji Sekiguchi via ryan)

15. SOLR-241: Undefined system properties used in configuration files now
    cause a clear message to be logged rather than an obscure exception thrown.
    (Koji Sekiguchi via ehatcher)

Other Changes
 1. Updated to Lucene 2.1

 2. Updated to Lucene 2007-05-20_00-04-53

================== Release 1.1.0 ==================

Status
------
This is the first release since Solr joined the Incubator, and brings many
new features and performance optimizations including highlighting,
faceted browsing, and JSON/Python/Ruby response formats.


Upgrading from previous Solr versions
-------------------------------------
Older Apache Solr installations can be upgraded by replacing
the relevant war file with the new version.  No changes to configuration
files are needed and the index format has not changed.

The default version of the Solr XML response syntax has been changed to 2.2.
Behavior can be preserved for those clients not explicitly specifying a
version by adding a default to the request handler in solrconfig.xml

By default, Solr will no longer use a searcher that has not fully warmed,
and requests will block in the meantime.  To change back to the previous
behavior of using a cold searcher in the event there is no other
warm searcher, see the useColdSearcher config item in solrconfig.xml

The XML response format when adding multiple documents to the collection
in a single <add> command has changed to return a single <result>.


Detailed Change List
--------------------

New Features
 1. added support for setting Lucene's positionIncrementGap
 2. Admin: new statistics for SolrIndexSearcher
 3. Admin: caches now show config params on stats page
 3. max() function added to FunctionQuery suite
 4. postOptimize hook, mirroring the functionallity of the postCommit hook,
    but only called on an index optimize.
 5. Ability to HTTP POST query requests to /select in addition to HTTP-GET
 6. The default search field may now be overridden by requests to the
    standard request handler using the df query parameter. (Erik Hatcher)
 7. Added DisMaxRequestHandler and SolrPluginUtils. (Chris Hostetter)
 8. Support for customizing the QueryResponseWriter per request
    (Mike Baranczak / SOLR-16 / hossman)
 9. Added KeywordTokenizerFactory (hossman)
10. copyField accepts dynamicfield-like names as the source.
    (Darren Erik Vengroff via yonik, SOLR-21)
11. new DocSet.andNot(), DocSet.andNotSize() (yonik)
12. Ability to store term vectors for fields. (Mike Klaas via yonik, SOLR-23)
13. New abstract BufferedTokenStream for people who want to write
    Tokenizers or TokenFilters that require arbitrary buffering of the
    stream. (SOLR-11 / yonik, hossman)
14. New RemoveDuplicatesToken - useful in situations where
    synonyms, stemming, or word-deliminater-ing produce identical tokens at
    the same position. (SOLR-11 / yonik, hossman)
15. Added highlighting to SolrPluginUtils and implemented in StandardRequestHandler
    and DisMaxRequestHandler (SOLR-24 / Mike Klaas via hossman,yonik)
16. SnowballPorterFilterFactory language is configurable via the "language"
    attribute, with the default being "English".  (Bertrand Delacretaz via yonik, SOLR-27)
17. ISOLatin1AccentFilterFactory, instantiates ISOLatin1AccentFilter to remove accents.
    (Bertrand Delacretaz via yonik, SOLR-28)
18. JSON, Python, Ruby QueryResponseWriters: use wt="json", "python" or "ruby"
    (yonik, SOLR-31)
19. Make web admin pages return UTF-8, change Content-type declaration to include a
    space between the mime-type and charset (Philip Jacob, SOLR-35)
20. Made query parser default operator configurable via schema.xml:
         <solrQueryParser defaultOperator="AND|OR"/>
    The default operator remains "OR".
21. JAVA API: new version of SolrIndexSearcher.getDocListAndSet() which takes
    flags (Greg Ludington via yonik, SOLR-39)
22. A HyphenatedWordsFilter, a text analysis filter used during indexing to rejoin
    words that were hyphenated and split by a newline. (Boris Vitez via yonik, SOLR-41)
23. Added a CompressableField base class which allows fields of derived types to
    be compressed using the compress=true setting.  The field type also gains the
    ability to specify a size threshold at which field data is compressed.
    (klaas, SOLR-45)
24. Simple faceted search support for fields (enumerating terms)
    and arbitrary queries added to both StandardRequestHandler and
    DisMaxRequestHandler. (hossman, SOLR-44)
25. In addition to specifying default RequestHandler params in the
    solrconfig.xml, support has been added for configuring values to be
    appended to the multi-val request params, as well as for configuring
    invariant params that can not overridden in the query. (hossman, SOLR-46)
26. Default operator for query parsing can now be specified with q.op=AND|OR
    from the client request, overriding the schema value. (ehatcher)
27. New XSLTResponseWriter does server side XSLT processing of XML Response.
    In the process, an init(NamedList) method was added to QueryResponseWriter
    which works the same way as SolrRequestHandler.
    (Bertrand Delacretaz / SOLR-49 / hossman)
28. json.wrf parameter adds a wrapper-function around the JSON response,
    useful in AJAX with dynamic script tags for specifying a JavaScript
    callback function. (Bertrand Delacretaz via yonik, SOLR-56)
29. autoCommit can be specified every so many documents added (klaas, SOLR-65)
30. ${solr.home}/lib directory can now be used for specifying "plugin" jars
    (hossman, SOLR-68)
31. Support for "Date Math" relative "NOW" when specifying values of a
    DateField in a query -- or when adding a document.
    (hossman, SOLR-71)
32. useColdSearcher control in solrconfig.xml prevents the first searcher
    from being used before it's done warming.  This can help prevent
    thrashing on startup when multiple requests hit a cold searcher.
    The default is "false", preventing use before warm. (yonik, SOLR-77)

Changes in runtime behavior
 1. classes reorganized into different packages, package names changed to Apache
 2. force read of document stored fields in QuerySenderListener
 3. Solr now looks in ./solr/conf for config, ./solr/data for data
    configurable via solr.solr.home system property
 4. Highlighter params changed to be prefixed with "hl."; allow fragmentsize
    customization and per-field overrides on many options
    (Andrew May via klaas, SOLR-37)
 5. Default param values for DisMaxRequestHandler should now be specified
    using a '<lst name="defaults">...</lst>' init param, for backwards
    compatability all init prams will be used as defaults if an init param
    with that name does not exist. (hossman, SOLR-43)
 6. The DisMaxRequestHandler now supports multiple occurances of the "fq"
    param. (hossman, SOLR-44)
 7. FunctionQuery.explain now uses ComplexExplanation to provide more
    accurate score explanations when composed in a BooleanQuery.
    (hossman, SOLR-25)
 8. Document update handling locking is much sparser, allowing performance gains
    through multiple threads.  Large commits also might be faster (klaas, SOLR-65)
 9. Lazy field loading can be enabled via a solrconfig directive.  This will be faster when
    not all stored fields are needed from a document (klaas, SOLR-52)
10. Made admin JSPs return XML and transform them with new XSL stylesheets
    (Otis Gospodnetic, SOLR-58)
11. If the "echoParams=explicit" request parameter is set, request parameters are copied
    to the output. In an XML output, they appear in new <lst name="params"> list inside
    the new <lst name="responseHeader"> element, which replaces the old <responseHeader>.
    Adding a version=2.1 parameter to the request produces the old format, for backwards
    compatibility (bdelacretaz and yonik, SOLR-59).

Optimizations
 1. getDocListAndSet can now generate both a DocList and a DocSet from a
    single lucene query.
 2. BitDocSet.intersectionSize(HashDocSet) no longer generates an intermediate
    set
 3. OpenBitSet completed, replaces BitSet as the implementation for BitDocSet.
    Iteration is faster, and BitDocSet.intersectionSize(BitDocSet) and unionSize
    is between 3 and 4 times faster. (yonik, SOLR-15)
 4. much faster unionSize when one of the sets is a HashDocSet: O(smaller_set_size)
 5. Optimized getDocSet() for term queries resulting in a 36% speedup of facet.field
    queries where DocSets aren't cached (for example, if the number of terms in the field
    is larger than the filter cache.) (yonik)
 6. Optimized facet.field faceting by as much as 500 times when the field has
    a single token per document (not multiValued & not tokenized) by using the
    Lucene FieldCache entry for that field to tally term counts.  The first request
    utilizing the FieldCache will take longer than subsequent ones.

Bug Fixes
 1. Fixed delete-by-id for field types who's indexed form is different
    from the printable form (mainly sortable numeric types).
 2. Added escaping of attribute values in the XML response (Erik Hatcher)
 3. Added empty extractTerms() to FunctionQuery to enable use in
    a MultiSearcher (Yonik)
 4. WordDelimiterFilter sometimes lost token positionIncrement information
 5. Fix reverse sorting for fields were sortMissingFirst=true
    (Rob Staveley, yonik)
 6. Worked around a Jetty bug that caused invalid XML responses for fields
    containing non ASCII chars.  (Bertrand Delacretaz via yonik, SOLR-32)
 7. WordDelimiterFilter can throw exceptions if configured with both
    generate and catenate off.  (Mike Klaas via yonik, SOLR-34)
 8. Escape '>' in XML output (because ]]> is illegal in CharData)
 9. field boosts weren't being applied and doc boosts were being applied to fields (klaas)
10. Multiple-doc update generates well-formed xml (klaas, SOLR-65)
11. Better parsing of pingQuery from solrconfig.xml (hossman, SOLR-70)
12. Fixed bug with "Distribution" page introduced when Versions were
    added to "Info" page (hossman)
13. Fixed HTML escaping issues with user input to analysis.jsp and action.jsp
    (hossman, SOLR-74)

Other Changes
 1. Upgrade to Lucene 2.0 nightly build 2006-06-22, lucene SVN revision 416224,
    http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?view=markup&pathrev=416224
 2. Modified admin styles to improve display in Internet Explorer (Greg Ludington via billa, SOLR-6)
 3. Upgrade to Lucene 2.0 nightly build 2006-07-15, lucene SVN revision 422302,
 4. Included unique key field name/value (if available) in log message of add (billa, SOLR-18)
 5. Updated to Lucene 2.0 nightly build 2006-09-07, SVN revision 462111
 6. Added javascript to catch empty query in admin query forms (Tomislav Nakic-Alfirevic via billa, SOLR-48
 7. blackslash escape * in ssh command used in snappuller for zsh compatibility, SOLR-63
 8. check solr return code in admin scripts, SOLR-62
 9. Updated to Lucene 2.0 nightly build 2006-11-15, SVN revision 475069
10. Removed src/apps containing the legacy "SolrTest" app (hossman, SOLR-3)
11. Simplified index.jsp and form.jsp, primarily by removing/hiding XML
    specific params, and adding an option to pick the output type. (hossman)
12. Added new numeric build property "specversion" to allow clean
    MANIFEST.MF files (hossman)
13. Added Solr/Lucene versions to "Info" page (hossman)
14. Explicitly set mime-type of .xsl files in web.xml to
    application/xslt+xml (hossman)
15. Config parsing should now work useing DOM Level 2 parsers -- Solr
    previously relied on getTextContent which is a DOM Level 3 addition
    (Alexander Saar via hossman, SOLR-78)

2006/01/17 Solr open sourced, moves to Apache Incubator
