API
Tracker

(Lucene)




Changelog for 5.0.0 version



Lucene Change Log

For more information on past and future Lucene versions, please see:
http://s.apache.org/luceneversions

======================= Lucene 5.0.0 =======================

New Features

* LUCENE-5945: All file handling converted to NIO.2 apis. (Robert Muir)

* LUCENE-5946: SimpleFSDirectory now uses Files.newByteChannel, for 
  portability with custom FileSystemProviders. If you want the old
  non-interruptible behavior of RandomAccessFile, use RAFDirectory
  in the misc/ module. (Uwe Schindler, Robert Muir)

* SOLR-3359: Added analyzer attribute/property to SynonymFilterFactory.
  (Ryo Onodera via Koji Sekiguchi)

* LUCENE-5648: Index and search date ranges, particularly multi-valued ones. It's
  implemented in the spatial module as DateRangePrefixTree used with
  NumberRangePrefixTreeStrategy. (David Smiley)

* LUCENE-5895: Lucene now stores a unique id per-segment and per-commit to aid
  in accurate replication of index files (Robert Muir, Mike McCandless)

* LUCENE-5889: Add commit method to AnalyzingInfixSuggester, and allow just using .add
  to build up the suggester.  (Varun Thacker via Mike McCandless)

* LUCENE-5123: Add a "pull" option to the postings writing API, so
  that a PostingsFormat now receives a Fields instance and it is
  responsible for iterating through all fields, terms, documents and
  positions.  (Robert Muir, Mike McCandless)

* LUCENE-5268: Full cutover of all postings formats to the "pull"
  FieldsConsumer API, removing PushFieldsConsumer.  Added new
  PushPostingsWriterBase for single-pass push of docs/positions to the
  postings format.  (Mike McCandless)

* LUCENE-5906: Use Files.delete everywhere instead of File.delete, so that
  when things go wrong, you get a real exception message why.
  (Uwe Schindler, Robert Muir)

* LUCENE-5933: Added FilterSpans for easier wrapping of Spans instance. (Shai Erera)

* LUCENE-5925: Remove fallback logic from opening commits, instead use
  Directory.renameFile so that in-progress commits are never visible.
  (Robert Muir)

* LUCENE-5820: SuggestStopFilter should have a factory.
  (Varun Thacker via Steve Rowe)

* LUCENE-5949: Add Accountable.getChildResources(). (Robert Muir)

* SOLR-5986: Added ExitableDirectoryReader that extends FilterDirectoryReader and enables
  exiting requests that take too long to enumerate over terms. (Anshum Gupta, Steve Rowe,
  Robert Muir)

* LUCENE-5911: Add MemoryIndex.freeze() to allow thread-safe searching over a 
  MemoryIndex. (Alan Woodward, David Smiley, Robert Muir)

* LUCENE-5969: Lucene 5.0 has a new index format with mismatched file detection,
  improved exception handling, and indirect norms encoding for sparse fields.
  (Mike McCandless, Ryan Ernst, Robert Muir)

* LUCENE-6053: Add Serbian analyzer.  (Nikola Smolenski via Robert Muir, Mike McCandless)

* LUCENE-4400: Add support for new NYSIIS Apache commons phonetic
  codec (Thomas Neidhart via Mike McCandless)

* LUCENE-6059: Add Daitch-Mokotoff Soundex phonetic Apache commons
  phonetic codec, and upgrade to Apache commons codec 1.10. (Thomas
  Neidhart via Mike McCandless)

* LUCENE-6058: With the upgrade to Apache commons codec 1.10, the
  experimental BeiderMorseFilter has changed its behavior, so any
  index using it will need to be rebuilt.  (Thomas
  Neidhart via Mike McCandless)

* LUCENE-6050: Accept MUST and MUST_NOT (in addition to SHOULD) for
  each context passed to Analyzing/BlendedInfixSuggester (Arcadius
  Ahouansou, jane chang via Mike McCandless)

* LUCENE-5929: Also extract terms to highlight from block join
  queries. (Julie Tibshirani via Mike McCandless)

* LUCENE-6063: Allow overriding whether/how ConcurrentMergeScheduler
  stalls incoming threads when merges are falling behind (Mike
  McCandless)

* LUCENE-5833: DocumentDictionary now enumerates each value separately
  in a multi-valued field (not just the first value), so you can build
  suggesters from multi-valued fields.  (Varun Thacker via Mike
  McCandless)

* LUCENE-6077: Added a filter cache. (Adrien Grand, Robert Muir)

* LUCENE-6088: TermsFilter implements Accountable. (Adrien Grand)

* LUCENE-6034: The default highlighter when used with QueryScorer will highlight payload-sensitive
  queries provided that term vectors with positions, offsets, and payloads are present. This is the
  only highlighter that can highlight such queries accurately. (David Smiley)

* LUCENE-5914: Add an option to Lucene50Codec to support either BEST_SPEED
  or BEST_COMPRESSION for stored fields. (Adrien Grand, Robert Muir)

* LUCENE-6119: Add auto-IO-throttling to ConcurrentMergeScheduler, to
  rate limit IO writes for each merge depending on incoming merge
  rate.  (Mike McCandless)

* LUCENE-6155: Add payload support to MemoryIndex. The default highlighter's
  QueryScorer and WeighedSpanTermExtractor now have setUsePayloads(bool).
  (David Smiley)

* LUCENE-6166: Deletions (alone) can now trigger new merges.  (Mike McCandless)

* LUCENE-6177: Add CustomAnalyzer that allows to configure analyzers
  like you do in Solr's index schema. This class has a builder API to configure
  Tokenizers, TokenFilters, and CharFilters based on their SPI names
  and parameters as documented by the corresponding factories.
  (Uwe Schindler)

Optimizations

* LUCENE-5960: Use a more efficient bitset, not a Set<Integer>, to
  track visited states.  (Markus Heiden via Mike McCandless)

* LUCENE-5959: Don't allocate excess memory when building automaton in
  finish. (Markus Heiden via Mike McCandless)

* LUCENE-5963: Reduce memory allocations in
  AnalyzingSuggester. (Markus Heiden via Mike McCandless)

* LUCENE-5938: MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE is now faster on
  queries that match few documents by using a sparse bit set implementation.
  (Adrien Grand)

* LUCENE-5969: Refactor merging to be more efficient, checksum calculation is
  per-segment/per-producer, and norms and doc values merging no longer cause 
  RAM spikes for latent fields. (Mike McCandless, Robert Muir)

* LUCENE-5983: CachingWrapperFilter now uses a new DocIdSet implementation
  called RoaringDocIdSet instead of WAH8DocIdSet. (Adrien Grand)

* LUCENE-6022: DocValuesDocIdSet checks live docs before doc values.
  (Adrien Grand)

* LUCENE-6030: Add norms patched compression for a small number of common values
  (Ryan Ernst)

* LUCENE-6040: Speed up EliasFanoDocIdSet through broadword bit selection.
  (Paul Elschot)

* LUCENE-6033: CachingTokenFilter now uses ArrayList not LinkedList, and has new
  isCached() method. (David Smiley)

* LUCENE-6031: TokenSources (in the default highlighter) converts term vectors into a
  TokenStream much faster in linear time (not N*log(N) using less memory, and with reset()
  implemented.  Only one of offsets or positions are required of the term vector.
  (David Smiley)

* LUCENE-6089, LUCENE-6090: Tune CompressionMode.HIGH_COMPRESSION for 
  better compression and less cpu usage. (Adrien Grand, Robert Muir)

* LUCENE-6034: QueryScorer, used by the default highlighter, needn't re-index the provided
  TokenStream with MemoryIndex when it comes from TokenSources (term vectors) with offsets and
  positions. (David Smiley)

* LUCENE-5951: ConcurrentMergeScheduler detects whether the index is on SSD or not
  and does a better job defaulting its settings.  This only works on Linux for now;
  other OS's will continue to use the previous defaults (tuned for spinning disks).
  (Robert Muir, Uwe Schindler, hossman, Mike McCandless)

* LUCENE-6131: Optimize SortingMergePolicy. (Robert Muir)

* LUCENE-6133: Improve default StoredFieldsWriter.merge() to be more efficient. 
  (Robert Muir)

* LUCENE-6145: Make EarlyTerminatingSortingCollector able to early-terminate
  when the sort order is a prefix of the index-time order. (Adrien Grand)

* LUCENE-6178: Score boolean queries containing MUST_NOT clauses with BooleanScorer2,
  to use skip list data and avoid unnecessary scoring. (Adrien Grand, Robert Muir)

API Changes

* LUCENE-5900: Deprecated more constructors taking Version in *InfixSuggester and
  ICUCollationKeyAnalyzer, and removed TEST_VERSION_CURRENT from the test framework.
  (Ryan Ernst)

* LUCENE-4535: oal.util.FilterIterator is now an internal API.
  (Adrien Grand)

* LUCENE-4924: DocIdSetIterator.docID() must now return -1 when the iterator is
  not positioned. This change affects all classes that inherit from
  DocIdSetIterator, including DocsEnum and DocsAndPositionsEnum. (Adrien Grand)

* LUCENE-5127: Reduce RAM usage of FixedGapTermsIndex. Remove 
  IndexWriterConfig.setTermIndexInterval, IndexWriterConfig.setReaderTermsIndexDivisor,
  and termsIndexDivisor from StandardDirectoryReader. These options have been no-ops
  with the default codec since Lucene 4.0. If you want to configure the interval for
  this term index, pass it directly in your codec, where it can also be configured
  per-field. (Robert Muir)

* LUCENE-5388: Remove Reader from Tokenizer's constructor and from
  Analyzer's createComponents. TokenStreams now always get their input
  via setReader.  
  (Benson Margulies via Robert Muir - pull request #16)

* LUCENE-5527: The Collector API has been refactored to use a dedicated Collector
  per leaf. (Shikhar Bhushan, Adrien Grand)

* LUCENE-5702: The FieldComparator API has been refactor to a per-leaf API, just
  like Collectors. (Adrien Grand)

* LUCENE-4246: IndexWriter.close now always closes, even if it throws
  an exception.  The new IndexWriterConfig.setCommitOnClose (default
  true) determines whether close() should commit before closing.

* LUCENE-5608, LUCENE-5565: Refactor SpatialPrefixTree/Cell API. Doesn't use Strings
  as tokens anymore, and now iterates cells on-demand during indexing instead of
  building a collection.  RPT now has more setters. (David Smiley)

* LUCENE-5666: Change uninverted access (sorting, faceting, grouping, etc)
  to use the DocValues API instead of FieldCache. For FieldCache functionality,
  use UninvertingReader in lucene/misc (or implement your own FilterReader).
  UninvertingReader is more efficient: supports multi-valued numeric fields,
  detects when a multi-valued field is single-valued, reuses caches
  of compatible types (e.g. SORTED also supports BINARY and SORTED_SET access
  without insanity).  "Insanity" is no longer possible unless you explicitly want it. 
  Rename FieldCache* and DocTermOrds* classes in the search package to DocValues*. 
  Move SortedSetSortField to core and add SortedSetFieldSource to queries/, which
  takes the same selectors. Add helper methods to DocValues.java that are better 
  suited for search code (never return null, etc).  (Mike McCandless, Robert Muir)

* LUCENE-5871: Remove Version from IndexWriterConfig. Use
  IndexWriterConfig.setCommitOnClose to change the behavior of IndexWriter.close().
  The default has been changed to match that of 4.x.
  (Ryan Ernst, Mike McCandless)

* LUCENE-5965: CorruptIndexException requires a String or DataInput resource.
  (Robert Muir)

* LUCENE-5972: IndexFormatTooOldException and IndexFormatTooNewException now
               extend from IOException.
  (Ryan Ernst, Robert Muir)

* LUCENE-5569: *AtomicReader/AtomicReaderContext have been renamed to *LeafReader/LeafReaderContext.
  (Ryan Ernst)

* LUCENE-5938: Removed MultiTermQuery.ConstantScoreAutoRewrite as
  MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE is usually better. (Adrien Grand)

* LUCENE-5924: Rename CheckIndex -fix option to -exorcise. This option does not
  actually fix the index, it just drops data.  (Robert Muir)

* LUCENE-5969: Add Codec.compoundFormat, which handles the encoding of compound 
  files. Add getMergeInstance() to codec producer APIs, which can be overridden
  to return an instance optimized for merging instead of searching. Add 
  Terms.getStats() which can return additional codec-specific statistics about a field.
  Change instance method SegmentInfos.read() to two static methods: SegmentInfos.readCommit()
  and SegmentInfos.readLatestCommit().
  (Mike McCandless, Robert Muir)

* LUCENE-5992: Remove FieldInfos from SegmentInfosWriter.write API. (Robert Muir, Mike McCandless)

* LUCENE-5998: Simplify Field/SegmentInfoFormat to read+write methods.
  (Robert Muir)

* LUCENE-6000: Removed StandardTokenizerInterface.  Tokenizers now use
  their jflex impl directly.
  (Ryan Ernst)

* LUCENE-6006: Removed FieldInfo.normType since it's redundant: it
  will be DocValuesType.NUMERIC if the field indexed and does not omit
  norms, else null.  (Robert Muir, Mike McCandless)

* LUCENE-6013: Removed indexed boolean from IndexableFieldType and
  FieldInfo, since it's redundant with IndexOptions != null. (Robert
  Muir, Mike McCandless)

* LUCENE-6021: FixedBitSet.nextSetBit now returns DocIdSetIterator.NO_MORE_DOCS
  instead of -1 when there are no more bits which are set. (Adrien Grand)

* LUCENE-5953: Directory and LockFactory APIs were restructured: Locking is
  now under the responsibility of the Directory implementation. LockFactory is
  only used by subclasses of BaseDirectory to delegate locking to an impl
  class. LockFactories are now singletons and are responsible to create a Lock
  instance based on a Directory implementation passed to the factory method.
  See MIGRATE.txt for more details.  (Uwe Schindler, Robert Muir)

* LUCENE-6062: Throw exception instead of silently doing nothing if you try to 
  sort/group/etc on a misconfigured field (e.g. no docvalues, no UninvertingReader, etc).  
  (Robert Muir)

* LUCENE-6068: LeafReader.fields() never returns null. (Robert Muir)

* LUCENE-6082: Remove abort() from codec apis. (Robert Muir)

* LUCENE-6084: IndexOutput's constructor now requires a String
  resourceDescription so its toString is sane (Robert Muir, Mike
  McCandless)

* LUCENE-6087: Allow passing custom DirectoryReader to SearcherManager
  (Mike McCandless)

* LUCENE-6085: Undeprecate SegmentInfo attributes, but add safety so they
  won't be trappy if codec tries to use them during docvalues updates.
  (Robert Muir)

* LUCENE-6097: Remove dangerous / overly expert
  IndexWriter.abortMerges and waitForMerges methods.  (Robert Muir,
  Mike McCandless)

* LUCENE-6099: Add FilterDirectory.unwrap and
  FilterDirectoryReader.unwrap (Simon Willnauer, Mike McCandless)

* LUCENE-6121: CachingTokenFilter.reset() now propagates to its input if called before
  incrementToken().  You must call reset() now on this filter instead of doing it a-priori on the
  input(), which previously didn't work.  (David Smiley, Robert Muir)

* LUCENE-6147: Make the core Accountables.namedAccountable function public
  (Ryan Ernst)

* LUCENE-6150: Remove staleFiles set and onIndexOutputClosed() from FSDirectory.
  (Uwe Schindler, Robert Muir, Mike McCandless)

* LUCENE-6146: Replaced Directory.copy() with Directory.copyFrom().
  (Robert Muir)

* LUCENE-6149: Infix suggesters' highlighting and allTermsRequired can
  be set at the constructor for non-contextual lookup.
  (Boon Low, Tomás Fernández Löbbe)

* LUCENE-6158, LUCENE-6165: IndexWriter.addIndexes(IndexReader...) changed to
  addIndexes(CodecReader...) (Robert Muir)

* LUCENE-6179: Out-of-order scoring is not allowed anymore, so
  Weight.scoresDocsOutOfOrder and LeafCollector.acceptsDocsOutOfOrder have been
  removed and boolean queries now always score in order.

* LUCENE-6212: IndexWriter no longer accepts per-document Analyzer to
  add/updateDocument.  These methods were trappy as they made it
  easy to accidentally index tokens that were not easily
  searchable. (Mike McCandless)

Bug Fixes

* LUCENE-5650: Enforce read-only access to any path outside the temporary
  folder via security manager, and make test temp dirs absolute.
  (Ryan Ernst, Dawid Weiss)

* LUCENE-5948: RateLimiter now fully inits itself on init.  (Varun
  Thacker via Mike McCandless)

* LUCENE-5981: CheckIndex obtains write.lock, since with some parameters it
  may modify the index, and to prevent false corruption reports, as it does
  not have the regular "spinlock" of DirectoryReader.open. It now implements
  Closeable and you must close it to release the lock.  (Mike McCandless, Robert Muir)

* LUCENE-6004: Don't highlight the LookupResult.key returned from
  AnalyzingInfixSuggester (Christian Reuschling, jane chang via Mike McCandless)

* LUCENE-5980: Don't let document length overflow. (Robert Muir)

* LUCENE-5999: Fix backcompat support for StandardTokenizer
  (Ryan Ernst)

* LUCENE-5961: Fix the exists() method for FunctionValues returned by many ValueSources to
  behave properly when wrapping other ValueSources which do not exist for the specified document
  (hossman)

* LUCENE-6039: Add IndexOptions.NONE and DocValuesType.NONE instead of
  using null to mean not index and no doc values, renamed
  IndexOptions.DOCS_ONLY to DOCS, and pulled IndexOptions and
  DocValues out of FieldInfo into their own classes in
  org.apache.lucene.index (Simon Willnauer, Robert Muir, Mike
  McCandless)

* LUCENE-6043: Fix backcompat support for UAX29URLEmailTokenizer
  (Ryan Ernst)

* LUCENE-6041: Remove sugar methods FieldInfo.isIndexed and
  FieldInfo.hasDocValues.  (Robert Muir, Mike McCandless)

* LUCENE-6044: Fix backcompat support for token filters with enablePositionIncrements=false.
  Also fixed backcompat for TrimFilter with updateOffsets=true.  These options
  are supported with a match version before 4.4, and no longer valid at all with 5.0.
  (Ryan Ernst) 

* LUCENE-6042: CustomScoreQuery explain was incorrect in some cases,
  such as when nested inside a boolean query. (Denis Lantsman via Robert Muir)

* LUCENE-6046: Add maxDeterminizedStates safety to determinize (which has
  an exponential worst case) so that if it would create too many states, it
  now throws an exception instead of exhausting CPU/RAM.  (Nik
  Everett via Mike McCandless)

* LUCENE-6054: Allow repeating the empty automaton (Nik Everett via
  Mike McCandless)

* LUCENE-6049: Don't throw cryptic exception writing a segment when
  the only docs in it had fields that hit non-aborting exceptions
  during indexing but also had doc values.  (Mike McCandless)

* LUCENE-6055: PayloadAttribute.clone() now does a deep clone of the underlying
  bytes. (Shai Erera)

* LUCENE-6060: Remove dangerous IndexWriter.unlock method (Simon
  Willnauer, Mike McCandless)

* LUCENE-6062: Pass correct fieldinfos to docvalues producer when the
  segment has updates. (Mike McCandless, Shai Erera, Robert Muir)

* LUCENE-6075: Don't overflow int in SimpleRateLimiter (Boaz Leskes
  via Mike McCandless)

* LUCENE-5987: IndexWriter will now forcefully close itself on
  aborting exception (an exception that would otherwise cause silent
  data loss).  (Robert Muir, Mike McCandless)

* LUCENE-6094: Allow IW.rollback to stop ConcurrentMergeScheduler even
  when it's stalling because there are too many merges. (Mike McCandless)

* LUCENE-6105: Don't cache FST root arcs if the number of root arcs is
  small, or if the cache would be > 20% of the size of the FST.
  (Robert Muir, Mike McCandless)

* LUCENE-6124: Fix double-close() problems in codec and store APIs.
  (Robert Muir)
  
* LUCENE-6152: Fix double close problems in OutputStreamIndexOutput.
  (Uwe Schindler)

* LUCENE-6139: Highlighter: TokenGroup start & end offset getters should have
  been returning the offsets of just the matching tokens in the group when
  there's a distinction. (David Smiley)
  
* LUCENE-6173: NumericTermAttribute and spatial/CellTokenStream do not clone
  their BytesRef(Builder)s. Also equals/hashCode was missing.  (Uwe Schindler)

* LUCENE-6205: Fixed intermittent concurrency issue that could cause
  FileNotFoundException when writing doc values updates at the same
  time that a merge kicks off.  (Mike McCandless)
  
* LUCENE-6192: Fix int overflow corruption case in skip data for
  high frequency terms in extremely large indices (Robert Muir, Mike
  McCandless)

* LUCENE-6093: Don't throw NullPointerException from
  BlendedInfixSuggester for lookups that do not end in a prefix
  token.  (jane chang via Mike McCandless)

* LUCENE-6214: Fixed IndexWriter deadlock when one thread is
  committing while another opens a near-real-time reader and an
  unrecoverable (tragic) exception is hit.  (Simon Willnauer, Mike
  McCandless)

Documentation

* LUCENE-5392: Add/improve analysis package documentation to reflect
  analysis API changes.  (Benson Margulies via Robert Muir - pull request #17)

* LUCENE-6057: Improve Sort(SortField) docs (Martin Braun via Mike McCandless)

* LUCENE-6112: Fix compile error in FST package example code
  (Tomoko Uchida via Koji Sekiguchi)

Tests

* LUCENE-5957: Add option for tests to not randomize codec
  (Ryan Ernst)

* LUCENE-5974: Add check that backcompat indexes use default codecs
  (Ryan Ernst)

* LUCENE-5971: Create addBackcompatIndexes.py script to build and add 
  backcompat test indexes for a given lucene version. Also renamed backcompat
  index files to use Version.toString() in filename.
  (Ryan Ernst)

* LUCENE-6002: Monster tests no longer fail.  Most of them now have an 80 hour
  timeout, effectively removing the timeout.  The tests that operate near the 2
  billion limit now use IndexWriter.MAX_DOCS instead of Integer.MAX_VALUE.
  Some of the slow Monster tests now explicitly choose the default codec.
  (Mike McCandless, Shawn Heisey)

* LUCENE-5968: Improve error message when 'ant beast' is run on top-level
  modules.  (Ramkumar Aiyengar, Uwe Schindler)

* LUCENE-6120: Fix MockDirectoryWrapper's close() handling.
  (Mike McCandless, Robert Muir)

Build

* LUCENE-5909: Smoke tester now has better command line parsing and
  optionally also runs on Java 8.  (Ryan Ernst, Uwe Schindler)

* LUCENE-5902: Add bumpVersion.py script to manage version increase after release branch is cut.

* LUCENE-5962: Rename diffSources.py to createPatch.py and make it work with all text file types.
  (Ryan Ernst)

* LUCENE-5995: Upgrade ICU to 54.1 (Robert Muir)

* LUCENE-6070: Upgrade forbidden-apis to 1.7 (Uwe Schindler)

Other

* LUCENE-5563: Removed sep layout: which has fallen behind on features and doesn't
  perform as well as other options.  (Robert Muir)

* LUCENE-4086: Removed support for Lucene 3.x indexes. See migration guide for
  more information.  (Robert Muir)

* LUCENE-5858: Moved Lucene 4 compatibility codecs to 'lucene-backward-codecs.jar'. 
  (Adrien Grand, Robert Muir)

* LUCENE-5915: Remove Pulsing postings format. (Robert Muir)

* LUCENE-6213: Add useful exception message when commit contains segments from legacy codecs.
  (Ryan Ernst)

======================= Lucene 4.10.4 ======================

* LUCENE-6207: Fixed consumption of several terms enums on the same
  sorted (set) doc values instance at the same time.
  (Tom Shally, Robert Muir, Adrien Grand)

======================= Lucene 4.10.3 ======================

Bug fixes

* LUCENE-3229: Overlapping ordered SpanNearQuery spans should not match.
  (Ludovic Boutros, Paul Elschot, Greg Dearing, ehatcher)


======================= Lucene 4.10.2 ======================

Bug fixes

* LUCENE-5977: Fix tokenstream safety checks in IndexWriter to properly
  work across multi-valued fields. Previously some cases across multi-valued
  fields would happily create a corrupt index. (Dawid Weiss, Robert Muir)

* LUCENE-6019: Detect when DocValuesType illegally changes for the
  same field name.  Also added -Dtests.asserts=true|false so we can
  run tests with and without assertions. (Simon Willnauer, Robert
  Muir, Mike McCandless).

======================= Lucene 4.10.1 ======================

Bug fixes

* LUCENE-5934: Fix backwards compatibility for 4.0 indexes.
  (Ian Lea, Uwe Schindler, Robert Muir, Ryan Ernst)

* LUCENE-5939: Regenerate old backcompat indexes to ensure they were built with
  the exact release
  (Ryan Ernst, Uwe Schindler)

* LUCENE-5952: Improve error messages when version cannot be parsed;
  don't check for too old or too new major version (it's too low level
  to enforce here); use simple string tokenizer.  (Ryan Ernst, Uwe Schindler,
  Robert Muir, Mike McCandless)

* LUCENE-5958: Don't let exceptions during checkpoint corrupt the index. 
  Refactor existing OOM handling too, so you don't need to handle OOM special
  for every IndexWriter method: instead such disasters will cause IW to close itself
  defensively. (Robert Muir, Mike McCandless)

* LUCENE-5904: Fixed a corruption case that can happen when 1)
  IndexWriter is uncleanly shut-down (OS crash, power loss, etc.), 2)
  on startup, when a new IndexWriter is created, a virus checker is
  holding some of the previously written but unused files open and
  preventing deletion, 3) IndexWriter writes these files again during
  the course of indexing, then the files can later be deleted, causing
  corruption.  This case was detected by adding evilness to
  MockDirectoryWrapper to have it simulate a virus checker holding a
  file open and preventing deletion (Robert Muir, Mike McCandless)

* LUCENE-5916: Stat
...