You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2013/04/02 16:36:32 UTC

svn commit: r1717 [4/9] - in /release/lucene: java/4.2.1/ java/4.2.1/changes/ solr/4.2.1/ solr/4.2.1/changes/

Added: release/lucene/java/4.2.1/changes/Changes.html
==============================================================================
--- release/lucene/java/4.2.1/changes/Changes.html (added)
+++ release/lucene/java/4.2.1/changes/Changes.html Tue Apr  2 14:35:39 2013
@@ -0,0 +1,8921 @@
+<!--
+**********************************************************
+** WARNING: This file is generated from CHANGES.txt by the 
+**          Perl script 'changes2html.pl'.
+**          Do *not* edit this file!
+**********************************************************
+          
+****************************************************************************
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+****************************************************************************
+-->
+<html>
+<head>
+  <title>Lucene Change Log</title>
+  <link rel="stylesheet" href="ChangesFancyStyle.css" title="Fancy">
+  <link rel="alternate stylesheet" href="ChangesSimpleStyle.css" title="Simple">
+  <link rel="alternate stylesheet" href="ChangesFixedWidthStyle.css" title="Fixed Width">
+  <META http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <SCRIPT>
+    function toggleList(id) {
+      listStyle = document.getElementById(id + '.list').style;
+      anchor = document.getElementById(id);
+      if (listStyle.display == 'none') {
+        listStyle.display = 'block';
+        anchor.title = 'Click to collapse';
+        location.href = '#' + id;
+      } else {
+        listStyle.display = 'none';
+        anchor.title = 'Click to expand';
+      }
+      var expandButton = document.getElementById('expand.button');
+      expandButton.disabled = false;
+      var collapseButton = document.getElementById('collapse.button');
+      collapseButton.disabled = false;
+    }
+
+    function collapseAll() {
+      var unorderedLists = document.getElementsByTagName("ul");
+      for (var i = 0; i < unorderedLists.length; i++) {
+        if (unorderedLists[i].className != 'bulleted-list')
+          unorderedLists[i].style.display = "none";
+        else
+          unorderedLists[i].style.display = "block";
+      }
+      var orderedLists = document.getElementsByTagName("ol");
+      for (var i = 0; i < orderedLists.length; i++)
+        orderedLists[i].style.display = "none"; 
+      var anchors = document.getElementsByTagName("a");
+      for (var i = 0 ; i < anchors.length; i++) {
+        if (anchors[i].id != '')
+          anchors[i].title = 'Click to expand';
+      }
+      var collapseButton = document.getElementById('collapse.button');
+      collapseButton.disabled = true;
+      var expandButton = document.getElementById('expand.button');
+      expandButton.disabled = false;
+    }
+
+    function expandAll() {
+      var unorderedLists = document.getElementsByTagName("ul");
+      for (var i = 0; i < unorderedLists.length; i++)
+        unorderedLists[i].style.display = "block";
+      var orderedLists = document.getElementsByTagName("ol");
+      for (var i = 0; i < orderedLists.length; i++)
+        orderedLists[i].style.display = "block"; 
+      var anchors = document.getElementsByTagName("a");
+      for (var i = 0 ; i < anchors.length; i++) {
+        if (anchors[i].id != '')
+          anchors[i].title = 'Click to collapse';
+      }
+      var expandButton = document.getElementById('expand.button');
+      expandButton.disabled = true;
+      var collapseButton = document.getElementById('collapse.button');
+      collapseButton.disabled = false;
+
+    }
+
+    var newerRegex = new RegExp("^(?:4\\\\.2\\\\.1|4\\\\.2\\\\.0)");
+    function isOlder(listId) {
+      return ! newerRegex.test(listId);
+    }
+
+    function escapeMeta(s) {
+      return s.replace(/(?=[.*+?^${}()|[\]\/\\])/g, '\\');
+    }
+
+    function shouldExpand(currentList, currentAnchor, listId) {
+      var listName = listId.substring(0, listId.length - 5);
+      var parentRegex = new RegExp("^" + escapeMeta(listName) + "\\.");
+      return currentList == listId
+             || (isOlder(currentAnchor) && listId == 'older.list')
+             || parentRegex.test(currentAnchor);
+    }
+
+    function collapse() {
+      /* Collapse all but the first and second releases. */
+      var unorderedLists = document.getElementsByTagName("ul");
+      var currentAnchor = location.hash.substring(1);
+      var currentList = currentAnchor + ".list";
+
+      for (var i = 0; i < unorderedLists.length; i++) {
+        var list = unorderedLists[i];
+        /* Collapse the current item, unless either the current item is one of
+         * the first two releases, or the current URL has a fragment and the
+         * fragment refers to the current item or one of its ancestors.
+         */
+        if (list.id != '4.2.1.list' 
+            && list.id != '4.2.0.list'
+            && list.className != 'bulleted-list'
+            && (currentAnchor == ''
+                || ! shouldExpand(currentList, currentAnchor, list.id))) {
+          list.style.display = "none";
+        }
+      }
+      var orderedLists = document.getElementsByTagName("ol");
+      for (var i = 0; i < orderedLists.length; i++) {
+        var list = orderedLists[i];
+        /* Collapse the current item, unless the current URL has a fragment
+         * and the fragment refers to the current item or one of its ancestors.
+         */
+        if (currentAnchor == ''
+            || ! shouldExpand(currentList, currentAnchor, list.id)) {
+          list.style.display = "none";
+        }
+      }
+      /* Add "Click to collapse/expand" tooltips to the release/section headings */
+      var anchors = document.getElementsByTagName("a");
+      for (var i = 0 ; i < anchors.length; i++) {
+        var anchor = anchors[i];
+        if (anchor.id != '') {
+          if (anchor.id == '4.2.1' || anchor.id == '4.2.0') {
+            anchor.title = 'Click to collapse';
+          } else {
+            anchor.title = 'Click to expand';
+          }
+        }
+      }
+
+      /* Insert "Expand All" and "Collapse All" buttons */
+      var buttonsParent = document.getElementById('buttons.parent');
+      var expandButton = document.createElement('button');
+      expandButton.appendChild(document.createTextNode('Expand All'));
+      expandButton.onclick = function() { expandAll(); }
+      expandButton.id = 'expand.button';
+      buttonsParent.appendChild(expandButton);
+      var collapseButton = document.createElement('button');
+      collapseButton.appendChild(document.createTextNode('Collapse All'));
+      collapseButton.onclick = function() { collapseAll(); }
+      collapseButton.id = 'collapse.button';
+      buttonsParent.appendChild(collapseButton);
+    }
+
+    window.onload = collapse;
+  </SCRIPT>
+</head>
+<body>
+
+<h1>Lucene Change Log</h1>
+
+<div id="buttons.parent"></div>
+
+      <p>For more information on past and future Lucene versions, please see:
+<a href="http://s.apache.org/luceneversions">http://s.apache.org/luceneversions</a>
+</p>
+<h2><a id="4.2.1" href="javascript:toggleList('4.2.1')">Release 4.2.1 </a></h2>
+<ul id="4.2.1.list">
+  <li><a id="4.2.1.bug_fixes" href="javascript:toggleList('4.2.1.bug_fixes')">Bug Fixes</a>&nbsp;&nbsp;&nbsp;(9)
+    <ol id="4.2.1.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4713">LUCENE-4713</a>: The SPI components used to load custom codecs or analysis
+components were fixed to also scan the Lucene ClassLoader in addition
+to the context ClassLoader, so Lucene is always able to find its own
+codecs. The special case of a null context ClassLoader is now also
+supported.
+<br /><span class="attrib">(Christian Kohlschütter, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4819">LUCENE-4819</a>: seekExact(BytesRef, boolean) did not work correctly with
+Sorted[Set]DocValuesTermsEnum.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4826">LUCENE-4826</a>: PostingsHighlighter was not returning the top N best
+scoring passages.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4854">LUCENE-4854</a>: Fix DocTermOrds.getOrdTermsEnum() to not return negative
+ord on initial next().
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4836">LUCENE-4836</a>: Fix SimpleRateLimiter#pause to return the actual time spent
+sleeping instead of the wakeup timestamp in nano seconds.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4828">LUCENE-4828</a>: BooleanQuery no longer extracts terms from its MUST_NOT
+clauses.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/SOLR-4589">SOLR-4589</a>: Fixed CPU spikes and poor performance in lazy field loading
+of multivalued fields.
+<br /><span class="attrib">(hossman)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4870">LUCENE-4870</a>: Fix bug where an entire index might be deleted by the IndexWriter
+due to false detection if an index exists in the directory when
+OpenMode.CREATE_OR_APPEND is used. This might also affect application that set
+the open mode manually using DirectoryReader#indexExists.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4878">LUCENE-4878</a>: Override getRegexpQuery in MultiFieldQueryParser to prefent
+NullPointerException when regular expression syntax is used with
+MultiFieldQueryParser.
+<br /><span class="attrib">(Simon Willnauer, Adam Rauch)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.2.1.optimizations" href="javascript:toggleList('4.2.1.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(3)
+    <ol id="4.2.1.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4819">LUCENE-4819</a>: Added Sorted[Set]DocValues.termsEnum(), and optimized the
+default codec for improved enumeration performance.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4854">LUCENE-4854</a>: Speed up TermsEnum of FieldCache.getDocTermOrds.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4857">LUCENE-4857</a>: Don't unnecessarily copy stem override map in
+StemmerOverrideFilter.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+    </ol>
+  </li>
+</ul>
+<h2><a id="4.2.0" href="javascript:toggleList('4.2.0')">Release 4.2.0  [2013-03-11]</a></h2>
+<ul id="4.2.0.list">
+  <li><a id="4.2.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('4.2.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(12)
+    <ol id="4.2.0.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4602">LUCENE-4602</a>: FacetFields now stores facet ordinals in a DocValues field,
+rather than a payload. This forces rebuilding existing indexes, or do a
+one time migration using FacetsPayloadMigratingReader. Since DocValues
+support in-memory caching, CategoryListCache was removed too.
+<br /><span class="attrib">(Shai Erera, Michael McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4697">LUCENE-4697</a>: FacetResultNode is now a concrete class with public members
+(instead of getter methods).
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4600">LUCENE-4600</a>: FacetsCollector is now an abstract class with two
+implementations: StandardFacetsCollector (the old version of
+FacetsCollector) and CountingFacetsCollector. FacetsCollector.create()
+returns the most optimized collector for the given parameters.
+<br /><span class="attrib">(Shai Erera, Michael McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4700">LUCENE-4700</a>: OrdinalPolicy is now per CategoryListParams, and is no longer
+an interface, but rather an enum with values NO_PARENTS and ALL_PARENTS.
+PathPolicy was removed, you should extend FacetFields and DrillDownStream
+to control which categories are added as drill-down terms.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4547">LUCENE-4547</a>: DocValues improvements:
+<ul class="bulleted-list">
+<li class="bulleted-list">
+Simplified codec API: codecs are now only responsible for encoding and
+  decoding docvalues, they do not need to do buffering or RAM accounting.
+</li>
+<li class="bulleted-list">
+Per-Field support: added PerFieldDocValuesFormat, which allows you to
+  use a different DocValuesFormat per field
+<br /><span class="attrib">(like postings)</span>.
+</li>
+<li class="bulleted-list">
+Unified with FieldCache api: DocValues can be accessed via FieldCache API,
+  so it works automatically with grouping/join/sort/function queries, etc.
+</li>
+<li class="bulleted-list">
+Simplified types: There are only 3 types (NUMERIC, BINARY, SORTED), so its
+  not necessary to specify for example that all of your binary values have
+  the same length. Instead its easy for the Codec API to optimize encoding
+  based on any properties of the content.
+<br /><span class="attrib">(Simon Willnauer, Adrien Grand, Mike McCandless, Robert Muir)</span></li>
+</ul>
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4757">LUCENE-4757</a>: Cleanup and refactoring of FacetsAccumulator, FacetRequest,
+FacetsAggregator and FacetResultsHandler API. If your application did
+FacetsCollector.create(), you should not be affected, but if you wrote
+an Aggregator, then you should migrate it to the per-segment
+FacetsAggregator. You can still use StandardFacetsAccumulator, which works
+with the old API (for now).
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4761">LUCENE-4761</a>: Facet packages reorganized. Should be easy to fix your import
+statements, if you use an IDE such as Eclipse.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4750">LUCENE-4750</a>: Convert DrillDown to DrillDownQuery, so you can initialize it
+and add drill-down categories to it.
+<br /><span class="attrib">(Michael McCandless, Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4759">LUCENE-4759</a>: remove FacetRequest.SortBy; result categories are always
+sorted by value, while ties are broken by category ordinal.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4772">LUCENE-4772</a>: Facet associations moved to new FacetsAggregator API. You
+should override FacetsAccumualtor and return the relevant aggregator,
+for aggregating the association values.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4748">LUCENE-4748</a>: A FacetRequest on a non-existent field now returns an
+empty FacetResult instead of skipping it.
+<br /><span class="attrib">(Shai Erera, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4806">LUCENE-4806</a>: The default category delimiter character was changed
+from U+F749 to U+001F, since the latter uses 1 byte vs 3 bytes for
+the former.  Existing facet indices must be reindexed.
+<br /><span class="attrib">(Robert
+Muir, Shai Erera, Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.2.0.optimizations" href="javascript:toggleList('4.2.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(11)
+    <ol id="4.2.0.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4687">LUCENE-4687</a>: BloomFilterPostingsFormat now lazily initializes delegate
+TermsEnum only if needed to do a seek or get a DocsEnum.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4677">LUCENE-4677</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4682">LUCENE-4682</a>: unpacked FSTs now use vInt to encode the node target,
+to reduce their size
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4678">LUCENE-4678</a>: FST now uses a paged byte[] structure instead of a
+single byte[] internally, to avoid large memory spikes during
+building
+<br /><span class="attrib">(James Dyer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3298">LUCENE-3298</a>: FST can now be larger than 2.1 GB / 2.1 B nodes.
+<br /><span class="attrib">(James Dyer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4690">LUCENE-4690</a>: Performance improvements and non-hashing versions
+of NumericUtils.*ToPrefixCoded()
+<br /><span class="attrib">(yonik)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4715">LUCENE-4715</a>: CategoryListParams.getOrdinalPolicy now allows to return a
+different OrdinalPolicy per dimension, to better tune how you index
+facets. Also added OrdinalPolicy.ALL_BUT_DIMENSION.
+<br /><span class="attrib">(Shai Erera, Michael McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4740">LUCENE-4740</a>: Don't track clones of MMapIndexInput if unmapping
+is disabled. This reduces GC overhead.
+<br /><span class="attrib">(Kristofer Karlsson, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4733">LUCENE-4733</a>: The default Lucene 4.2 codec now uses a more compact
+TermVectorsFormat (Lucene42TermVectorsFormat) based on
+CompressingTermVectorsFormat.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3729">LUCENE-3729</a>: The default Lucene 4.2 codec now uses a more compact
+DocValuesFormat (Lucene42DocValuesFormat). Sorted values are stored in an
+FST, Numerics and Ordinals use a number of strategies (delta-compression,
+table-compression, etc), and memory addresses use MonotonicBlockPackedWriter.
+<br /><span class="attrib">(Simon Willnauer, Adrien Grand, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4792">LUCENE-4792</a>: Reduction of the memory required to build the doc ID maps used
+when merging segments.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4794">LUCENE-4794</a>: Spatial RecursivePrefixTreeStrategy's search filter: Skip calls
+to termsEnum.seek() when the next term is known to follow the current cell.
+<br /><span class="attrib">(David Smiley)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.2.0.new_features" href="javascript:toggleList('4.2.0.new_features')">New Features</a>&nbsp;&nbsp;&nbsp;(16)
+    <ol id="4.2.0.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4686">LUCENE-4686</a>: New specialized DGapVInt8IntEncoder for facets (now the
+default).
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4703">LUCENE-4703</a>: Add simple PrintTaxonomyStats tool to see summary
+information about the facets taxonomy index.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4599">LUCENE-4599</a>: New oal.codecs.compressing.CompressingTermVectorsFormat which
+compresses term vectors into chunks of documents similarly to
+CompressingStoredFieldsFormat.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4695">LUCENE-4695</a>: Added LiveFieldValues utility class, for getting the
+current (live, real-time) value for any indexed doc/field.  The
+class buffers recently indexed doc/field values until a new
+near-real-time reader is opened that contains those changes.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4723">LUCENE-4723</a>: Add AnalyzerFactoryTask to benchmark, and enable analyzer
+creation via the resulting factories using NewAnalyzerTask.
+<br /><span class="attrib">(Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4728">LUCENE-4728</a>: Unknown and not explicitly mapped queries are now rewritten
+against the highlighting IndexReader to obtain primitive queries before
+discarding the query entirely. WeightedSpanTermExtractor now builds a
+MemoryIndex only once even if multiple fields are highlighted.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4035">LUCENE-4035</a>: Added ICUCollationDocValuesField, more efficient
+support for Locale-sensitive sort and range queries for
+single-valued fields.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4547">LUCENE-4547</a>: Added MonotonicBlockPacked(Reader/Writer), which provide
+efficient random access to large amounts of monotonically increasing
+positive values (e.g. file offsets). Each block stores the minimum value
+and the average gap, and values are encoded as signed deviations from
+the expected value.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4547">LUCENE-4547</a>: Added AppendingLongBuffer, an append-only buffer that packs
+signed long values in memory and provides an efficient iterator API.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4540">LUCENE-4540</a>: It is now possible for a codec to represent norms with
+less than 8 bits per value. For performance reasons this is not done
+by default, but you can customize your codec (e.g. pass PackedInts.DEFAULT
+to Lucene42DocValuesConsumer) if you want to make this tradeoff.
+<br /><span class="attrib">(Adrien Grand, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4764">LUCENE-4764</a>: A new Facet42Codec and Facet42DocValuesFormat provide
+faster but more RAM-consuming facet performance.
+<br /><span class="attrib">(Shai Erera, Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4769">LUCENE-4769</a>: Added OrdinalsCache and CachedOrdsCountingFacetsAggregator
+which uses the cache to obtain a document's ordinals. This aggregator
+is faster than others, however consumes much more RAM.
+<br /><span class="attrib">(Michael McCandless, Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4778">LUCENE-4778</a>: Add a getter for the delegate in RateLimitedDirectoryWrapper.
+<br /><span class="attrib">(Mark Miller)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4765">LUCENE-4765</a>: Add a multi-valued docvalues type (SORTED_SET). This is equivalent
+to building a FieldCache.getDocTermOrds at index-time.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4780">LUCENE-4780</a>: Add MonotonicAppendingLongBuffer: an append-only buffer for
+monotonically increasing values.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4748">LUCENE-4748</a>: Added DrillSideways utility class for computing both
+drill-down and drill-sideways counts for a DrillDownQuery.
+<br /><span class="attrib">(Mike
+McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.2.0.api_changes" href="javascript:toggleList('4.2.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(4)
+    <ol id="4.2.0.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4709">LUCENE-4709</a>: FacetResultNode no longer has a residue field.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4716">LUCENE-4716</a>: DrillDown.query now takes Occur, allowing to specify if
+categories should be OR'ed or AND'ed.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4695">LUCENE-4695</a>: ReferenceManager.RefreshListener.afterRefresh now takes
+a boolean indicating whether a new reference was in fact opened, and
+a new beforeRefresh method notifies you when a refresh attempt is
+starting.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4794">LUCENE-4794</a>: Spatial RecursivePrefixTreeFilter replaced by
+IntersectsPrefixTreeFilter and some extensible base classes.
+<br /><span class="attrib">(David Smiley)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.2.0.bug_fixes" href="javascript:toggleList('4.2.0.bug_fixes')">Bug Fixes</a>&nbsp;&nbsp;&nbsp;(17)
+    <ol id="4.2.0.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4705">LUCENE-4705</a>: Pass on FilterStrategy in FilteredQuery if the filtered query is
+rewritten.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4712">LUCENE-4712</a>: MemoryIndex#normValues() throws NPE if field doesn't exist.
+<br /><span class="attrib">(Simon Willnauer, Ricky Pritchett)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4550">LUCENE-4550</a>: Shapes wider than 180 degrees would use too much accuracy for the
+PrefixTree based SpatialStrategy. For a pathological case of nearly 360
+degrees and barely any height, it would generate so many indexed terms
+(&gt; 500k) that it could even cause an OutOfMemoryError. Fixed.
+<br /><span class="attrib">(David Smiley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4704">LUCENE-4704</a>: Make join queries override hashcode and equals methods.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4724">LUCENE-4724</a>: Fix bug in CategoryPath which allowed passing null or empty
+string components. This is forbidden now (throws an exception). Note that if
+you have a taxonomy index created with such strings, you should rebuild it.
+<br /><span class="attrib">(Michael McCandless, Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4732">LUCENE-4732</a>: Fixed TermsEnum.seekCeil/seekExact on term vectors.
+<br /><span class="attrib">(Adrien Grand, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4739">LUCENE-4739</a>: Fixed bugs that prevented FSTs more than ~1.1GB from
+being saved and loaded
+<br /><span class="attrib">(Adrien Grand, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4717">LUCENE-4717</a>: Fixed bug where Lucene40DocValuesFormat would sometimes write
+an extra unused ordinal for sorted types. The bug is detected and corrected
+on-the-fly for old indexes.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4547">LUCENE-4547</a>: Fixed bug where Lucene40DocValuesFormat was unable to encode
+segments that would exceed 2GB total data. This could happen in some surprising
+cases, for example if you had an index with more than 260M documents and a
+VAR_INT field.
+<br /><span class="attrib">(Simon Willnauer, Adrien Grand, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4775">LUCENE-4775</a>: Remove SegmentInfo.sizeInBytes() and make
+MergePolicy.OneMerge.totalBytesSize thread safe
+<br /><span class="attrib">(Josh Bronson via
+Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4770">LUCENE-4770</a>: If spatial's TermQueryPrefixTreeStrategy was used to search
+indexed non-point shapes, then there was an edge case where a query should
+find a shape but it didn't. The fix is the removal of an optimization that
+simplifies some leaf cells into a parent. The index data for such a field is
+now ~20% larger. This optimization is still done for the query shape, and for
+indexed data for RecursivePrefixTreeStrategy. Furthermore, this optimization
+is enhanced to roll up beyond the bottom cell level.
+<br /><span class="attrib">(David Smiley,
+Florian Schilling)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4790">LUCENE-4790</a>: Fix FieldCacheImpl.getDocTermOrds to not bake deletes into the
+cached datastructure. Otherwise this can cause inconsistencies with readers
+at different points in time.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4791">LUCENE-4791</a>: A conjunction of terms (ConjunctionTermScorer) scanned on
+the lowest frequency term instead of skipping, leading to potentially
+large performance impacts for many non-random or non-uniform
+term distributions.
+<br /><span class="attrib">(John Wang, yonik)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4798">LUCENE-4798</a>: PostingsHighlighter's formatter sometimes didn't highlight
+matched terms.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4796">LUCENE-4796</a>, <a href="http://issues.apache.org/jira/browse/SOLR-4373">SOLR-4373</a>: Fix concurrency issue in NamedSPILoader and
+AnalysisSPILoader when doing reload (e.g. from Solr).
+<br /><span class="attrib">(Uwe Schindler, Hossman)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4802">LUCENE-4802</a>: Don't compute norms for drill-down facet fields.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4804">LUCENE-4804</a>: PostingsHighlighter sometimes applied terms to the wrong passage,
+if they started exactly on a passage boundary.
+<br /><span class="attrib">(Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.2.0.documentation" href="javascript:toggleList('4.2.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="4.2.0.documentation.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4718">LUCENE-4718</a>: Fixed documentation of oal.queryparser.classic.
+<br /><span class="attrib">(Hayden Muhl via Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4784">LUCENE-4784</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4785">LUCENE-4785</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4786">LUCENE-4786</a>: Fixed references to deprecated classes
+SinkTokenizer, ValueSourceQuery and RangeQuery.
+<br /><span class="attrib">(Hao Zhong via Adrien Grand)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.2.0.build" href="javascript:toggleList('4.2.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(4)
+    <ol id="4.2.0.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4654">LUCENE-4654</a>: Test duration statistics from multiple test runs should be
+reused.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4636">LUCENE-4636</a>: Upgrade ivy to 2.3.0
+<br /><span class="attrib">(Shawn Heisey via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4570">LUCENE-4570</a>: Use the Policeman Forbidden API checker, released separately
+from Lucene and downloaded via Ivy.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4758">LUCENE-4758</a>: 'ant jar', 'ant compile', and 'ant compile-test' should
+recurse.
+<br /><span class="attrib">(Steve Rowe)</span></li>
+    </ol>
+  </li>
+</ul>
+<h2><a id="older" href="javascript:toggleList('older')">Older Releases</a></h2>
+<ul id="older.list">
+<h3><a id="4.1.0" href="javascript:toggleList('4.1.0')">Release 4.1.0  [2013-01-22]</a></h3>
+<ul id="4.1.0.list">
+  <li><a id="4.1.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('4.1.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(16)
+    <ol id="4.1.0.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4514">LUCENE-4514</a>: Scorer's freq() method returns an integer value indicating
+the number of times the scorer matches the current document. Previously
+this was only sometimes the case, in some cases it returned a (meaningless)
+floating point value.  Scorer now extends DocsEnum so it has attributes().
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4543">LUCENE-4543</a>: TFIDFSimilarity's index-time computeNorm is now final to
+match the fact that its query-time norm usage requires a FIXED_8 encoding.
+Override lengthNorm and/or encode/decodeNormValue to change the specifics,
+like Lucene 3.x.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3441">LUCENE-3441</a>: The facet module now supports NRT. As a result, the following
+changes were made:
+<ul class="bulleted-list">
+<li class="bulleted-list">
+DirectoryTaxonomyReader has a new constructor which takes a
+  DirectoryTaxonomyWriter. You should use that constructor in order to get
+  the NRT support (or the old one for non-NRT).
+</li>
+<li class="bulleted-list">
+TaxonomyReader.refresh() removed in exchange for TaxonomyReader.openIfChanged
+  static method. Similar to DirectoryReader, the method either returns null
+  if no changes were made to the taxonomy, or a new TR instance otherwise.
+  Instead of calling refresh(), you should write similar code to how you reopen
+  a regular DirectoryReader.
+</li>
+<li class="bulleted-list">
+TaxonomyReader.openIfChanged (previously refresh()) no longer throws
+  InconsistentTaxonomyException, and supports recreate. InconsistentTaxoEx
+  was removed.
+</li>
+<li class="bulleted-list">
+ChildrenArrays was pulled out of TaxonomyReader into a top-level class.
+</li>
+<li class="bulleted-list">
+TaxonomyReader was made an abstract class (instead of an interface), with
+  methods such as close() and reference counting management pulled from
+  DirectoryTaxonomyReader, and made final. The rest of the methods, remained
+  abstract.
+<br /><span class="attrib">(Shai Erera, Gilad Barkai)</span></li>
+</ul>
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4576">LUCENE-4576</a>: Remove CachingWrapperFilter(Filter, boolean). This recacheDeletes
+option gave less than 1% speedup at the expense of cache churn (filters were
+invalidated on reopen if even a single delete was posted against the segment).
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4575">LUCENE-4575</a>: Replace IndexWriter's commit/prepareCommit versions that take
+commitData with setCommitData(). That allows committing changes to IndexWriter
+even if the commitData is the only thing that changes.
+<br /><span class="attrib">(Shai Erera, Michael McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4565">LUCENE-4565</a>: TaxonomyReader.getParentArray and .getChildrenArrays consolidated
+into one getParallelTaxonomyArrays(). You can obtain the 3 arrays that the
+previous two methods returned by calling parents(), children() or siblings()
+on the returned ParallelTaxonomyArrays.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4585">LUCENE-4585</a>: Spatial PrefixTree based Strategies (either TermQuery or
+RecursivePrefix based) MAY want to re-index if used for point data. If a
+re-index is not done, then an indexed point is ~1/2 the smallest grid cell
+larger and as such is slightly more likely to match a query shape.
+<br /><span class="attrib">(David Smiley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4604">LUCENE-4604</a>: DefaultOrdinalPolicy removed in favor of OrdinalPolicy.ALL_PARENTS.
+Same for DefaultPathPolicy (now PathPolicy.ALL_CATEGORIES). In addition, you
+can use OrdinalPolicy.NO_PARENTS to never write any parent category ordinal
+to the fulltree posting payload (but note that you need a special
+FacetsAccumulator - see javadocs).
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4594">LUCENE-4594</a>: Spatial PrefixTreeStrategy no longer indexes center points of
+non-point shapes.  If you want to call makeDistanceValueSource() based on
+shape centers, you need to do this yourself in another spatial field.
+<br /><span class="attrib">(David Smiley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4615">LUCENE-4615</a>: Replace IntArrayAllocator and FloatArrayAllocator by ArraysPool.
+FacetArrays no longer takes those allocators; if you need to reuse the arrays,
+you should use ReusingFacetArrays.
+<br /><span class="attrib">(Shai Erera, Gilad Barkai)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4621">LUCENE-4621</a>: FacetIndexingParams is now a concrete class (instead of DefaultFIP).
+Also, the entire IndexingParams chain is now immutable. If you need to override
+a setting, you should extend the relevant class.
+Additionally, FacetSearchParams is now immutable, and requires all FacetRequests
+to specified at initialization time.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4647">LUCENE-4647</a>: CategoryDocumentBuilder and EnhancementsDocumentBuilder are replaced
+by FacetFields and AssociationsFacetFields respectively. CategoryEnhancement and
+AssociationEnhancement were removed in favor of a simplified CategoryAssociation
+interface, with CategoryIntAssociation and CategoryFloatAssociation
+implementations.
+NOTE: indexes that contain category enhancements/associations are not supported
+by the new code and should be recreated.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4659">LUCENE-4659</a>: Massive cleanup to CategoryPath API. Additionally, CategoryPath is
+now immutable, so you don't need to clone() it.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4670">LUCENE-4670</a>: StoredFieldsWriter and TermVectorsWriter have new finish* callbacks
+which are called after a doc/field/term has been completely added.
+<br /><span class="attrib">(Adrien Grand, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4620">LUCENE-4620</a>: IntEncoder/Decoder were changed to do bulk encoding/decoding. As a
+result, few other classes such as Aggregator and CategoryListIterator were
+changed to handle bulk category ordinals.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4683">LUCENE-4683</a>: CategoryListIterator and Aggregator are now per-segment. As such
+their implementations no longer take a top-level IndexReader in the constructor
+but rather implement a setNextReader.
+<br /><span class="attrib">(Shai Erera)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.1.0.new_features" href="javascript:toggleList('4.1.0.new_features')">New Features</a>&nbsp;&nbsp;&nbsp;(14)
+    <ol id="4.1.0.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4226">LUCENE-4226</a>: New experimental StoredFieldsFormat that compresses chunks of
+documents together in order to improve the compression ratio.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4426">LUCENE-4426</a>: New ValueSource implementations (in lucene/queries) for
+DocValues fields.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4410">LUCENE-4410</a>: FilteredQuery now exposes a FilterStrategy that exposes
+how filters are applied during query execution.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4404">LUCENE-4404</a>: New ListOfOutputs (in lucene/misc) for FSTs wraps
+another Outputs implementation, allowing you to store more than one
+output for a single input.  UpToTwoPositiveIntsOutputs was moved
+from lucene/core to lucene/misc.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3842">LUCENE-3842</a>: New AnalyzingSuggester, for doing auto-suggest
+using an analyzer.  This can create powerful suggesters: if the analyzer
+remove stop words then "ghost chr..." could suggest "The Ghost of
+Christmas Past"; if SynonymFilter is used to map wifi and wireless
+network to hotspot, then "wirele..." could suggest "wifi router";
+token normalization likes stemmers, accent removal, etc. would allow
+the suggester to ignore such variations.
+<br /><span class="attrib">(Robert Muir, Sudarshan
+Gaikaiwari, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4446">LUCENE-4446</a>: Lucene 4.1 has a new default index format (Lucene41Codec)
+that incorporates the previously experimental "Block" postings format
+for better search performance.
+<br /><span class="attrib">(Han Jiang, Adrien Grand, Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3846">LUCENE-3846</a>: New FuzzySuggester, like AnalyzingSuggester except it
+also finds completions allowing for fuzzy edits in the input string.
+<br /><span class="attrib">(Robert Muir, Simon Willnauer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4515">LUCENE-4515</a>: MemoryIndex now supports adding the same field multiple
+times.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4489">LUCENE-4489</a>: Added consumeAllTokens option to LimitTokenCountFilter
+<br /><span class="attrib">(hossman, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4566">LUCENE-4566</a>: Add NRT/SearcherManager.RefreshListener/addListener to
+be notified whenever a new searcher was opened.
+<br /><span class="attrib">(selckin via Shai
+Erera, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/SOLR-4123">SOLR-4123</a>: Add per-script customizability to ICUTokenizerFactory via
+rule files in the ICU RuleBasedBreakIterator format.
+<br /><span class="attrib">(Shawn Heisey, Robert Muir, Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4590">LUCENE-4590</a>: Added WriteEnwikiLineDocTask - a benchmark task for writing
+Wikipedia category pages and non-category pages into separate line files.
+extractWikipedia.alg was changed to use this task, so now it creates two
+files.
+<br /><span class="attrib">(Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4290">LUCENE-4290</a>: Added PostingsHighlighter to the highlighter module. It uses
+offsets from the postings lists to highlight documents.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4628">LUCENE-4628</a>: Added CommonTermsQuery that executes high-frequency terms
+in a optional sub-query to prevent slow queries due to "common" terms
+like stopwords.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.1.0.api_changes" href="javascript:toggleList('4.1.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(11)
+    <ol id="4.1.0.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4399">LUCENE-4399</a>: Deprecated AppendingCodec. Lucene's term dictionaries
+no longer seek when writing.
+<br /><span class="attrib">(Adrien Grand, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4479">LUCENE-4479</a>: Rename TokenStream.getTokenStream(IndexReader, int, String)
+to TokenStream.getTokenStreamWithOffsets, and return null on failure
+rather than throwing IllegalArgumentException.
+<br /><span class="attrib">(Alan Woodward)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4472">LUCENE-4472</a>: MergePolicy now accepts a MergeTrigger that provides
+information about the trigger of the merge ie. merge triggered due
+to a segment merge or a full flush etc.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4415">LUCENE-4415</a>: TermsFilter is now immutable. All terms need to be provided
+as constructor argument.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4520">LUCENE-4520</a>: ValueSource.getSortField no longer throws IOExceptions
+<br /><span class="attrib">(Alan Woodward)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4537">LUCENE-4537</a>: RateLimiter is now separated from FSDirectory and exposed via
+RateLimitingDirectoryWrapper. Any Directory can now be rate-limited.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4591">LUCENE-4591</a>: CompressingStoredFields{Writer,Reader} now accept a segment
+suffix as a constructor parameter.
+<br /><span class="attrib">(Renaud Delbru via Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4605">LUCENE-4605</a>: Added DocsEnum.FLAG_NONE which can be passed instead of 0 as
+the flag to .docs() and .docsAndPositions().
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4617">LUCENE-4617</a>: Remove FST.pack() method. Previously to make a packed FST,
+you had to make a Builder with willPackFST=true (telling it you will later pack it),
+create your fst with finish(), and then call pack() to get another FST.
+Instead just pass true for doPackFST to Builder and finish() returns a packed FST.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4663">LUCENE-4663</a>: Deprecate IndexSearcher.document(int, Set). This was not intended
+to be final, nor named document(). Use IndexSearcher.doc(int, Set) instead.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4684">LUCENE-4684</a>: Made DirectSpellChecker extendable.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.1.0.bug_fixes" href="javascript:toggleList('4.1.0.bug_fixes')">Bug Fixes</a>&nbsp;&nbsp;&nbsp;(32)
+    <ol id="4.1.0.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1822">LUCENE-1822</a>: BaseFragListBuilder hard-coded 6 char margin is too naive.
+<br /><span class="attrib">(Alex Vigdor, Arcadius Ahouansou, Koji Sekiguchi)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4468">LUCENE-4468</a>: Fix rareish integer overflows in Lucene41 postings
+format.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4486">LUCENE-4486</a>: Add support for ConstantScoreQuery in Highlighter.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4485">LUCENE-4485</a>: When CheckIndex terms, terms/docs pairs and tokens,
+these counts now all exclude deleted documents.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4479">LUCENE-4479</a>: Highlighter works correctly for fields with term vector
+positions, but no offsets.
+<br /><span class="attrib">(Alan Woodward)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/SOLR-3906">SOLR-3906</a>: JapaneseReadingFormFilter in romaji mode will return
+romaji even for out-of-vocabulary kana cases (e.g. half-width forms).
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4504">LUCENE-4504</a>: Fix broken sort comparator in ValueSource.getSortField,
+used when sorting by a function query.
+<br /><span class="attrib">(Tom Shally via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4511">LUCENE-4511</a>: TermsFilter might return wrong results if a field is not
+indexed or doesn't exist in the index.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4521">LUCENE-4521</a>: IndexWriter.tryDeleteDocument could return true
+(successfully deleting the document) but then on IndexWriter
+close/commit fail to write the new deletions, if no other changes
+happened in the IndexWriter instance.
+<br /><span class="attrib">(Ivan Vasilev via Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4513">LUCENE-4513</a>: Fixed that deleted nested docs are scored into the
+parent doc when using ToParentBlockJoinQuery.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4534">LUCENE-4534</a>: Fixed WFSTCompletionLookup and Analyzing/FuzzySuggester
+to allow 0 byte values in the lookup keys.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4532">LUCENE-4532</a>: DirectoryTaxonomyWriter use a timestamp to denote taxonomy
+index re-creation, which could cause a bug in case machine clocks were
+not synced. Instead, it now tracks an 'epoch' version, which is incremented
+whenever the taxonomy is re-created, or replaced.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4544">LUCENE-4544</a>: Fixed off-by-1 in ConcurrentMergeScheduler that would
+allow 1+maxMergeCount merges threads to be created, instead of just
+maxMergeCount
+<br /><span class="attrib">(Radim Kolar, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4567">LUCENE-4567</a>: Fixed NullPointerException in analyzing, fuzzy, and
+WFST suggesters when no suggestions were added
+<br /><span class="attrib">(selckin via Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4568">LUCENE-4568</a>: Fixed integer overflow in
+PagedBytes.PagedBytesData{In,Out}put.getPosition.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4581">LUCENE-4581</a>: GroupingSearch.setAllGroups(true) was failing to
+actually compute allMatchingGroups
+<br /><span class="attrib">(dizh@neusoft.com via Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4009">LUCENE-4009</a>: Improve TermsFilter.toString
+<br /><span class="attrib">(Tim Costermans via Chris
+Male, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4588">LUCENE-4588</a>: Benchmark's EnwikiContentSource was discarding last wiki
+document and had leaking threads in 'forever' mode.
+<br /><span class="attrib">(Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4585">LUCENE-4585</a>: Spatial RecursivePrefixTreeFilter had some bugs that only
+occurred when shapes were indexed.  In what appears to be rare circumstances,
+documents with shapes near a query shape were erroneously considered a match.
+In addition, it wasn't possible to index a shape representing the entire
+globe.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4595">LUCENE-4595</a>: EnwikiContentSource had a thread safety problem (NPE) in
+'forever' mode
+<br /><span class="attrib">(Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4587">LUCENE-4587</a>: fix WordBreakSpellChecker to not throw AIOOBE when presented
+with 2-char codepoints, and to correctly break/combine terms containing
+non-latin characters.
+<br /><span class="attrib">(James Dyer, Andreas Hubold)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4596">LUCENE-4596</a>: fix a concurrency bug in DirectoryTaxonomyWriter.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4594">LUCENE-4594</a>: Spatial PrefixTreeStrategy would index center-points in addition
+to the shape to index if it was non-point, in the same field.  But sometimes
+the center-point isn't actually in the shape (consider a LineString), and for
+highly precise shapes it could cause makeDistanceValueSource's cache to load
+parts of the shape's boundary erroneously too.  So center points aren't
+indexed any more; you should use another spatial field.
+<br /><span class="attrib">(David Smiley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4629">LUCENE-4629</a>: IndexWriter misses to delete documents if a document block is
+indexed and the Iterator throws an exception. Documents were only rolled back
+if the actual indexing process failed.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4608">LUCENE-4608</a>: Handle large number of requested fragments better.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4633">LUCENE-4633</a>: DirectoryTaxonomyWriter.replaceTaxonomy did not refresh its
+internal reader, which could cause an existing category to be added twice.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4461">LUCENE-4461</a>: If you added the same FacetRequest more than once, you would get
+inconsistent results.
+<br /><span class="attrib">(Gilad Barkai via Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4656">LUCENE-4656</a>: Fix regression in IndexWriter to work with empty TokenStreams
+that have no TermToBytesRefAttribute (commonly provided by CharTermAttribute),
+e.g., oal.analysis.miscellaneous.EmptyTokenStream.
+<br /><span class="attrib">(Uwe Schindler, Adrien Grand, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4660">LUCENE-4660</a>: ConcurrentMergeScheduler was taking too long to
+un-pause incoming threads it had paused when too many merges were
+queued up.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4662">LUCENE-4662</a>: Add missing elided articles and prepositions to FrenchAnalyzer's
+DEFAULT_ARTICLES list passed to ElisionFilter.
+<br /><span class="attrib">(David Leunen via Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4671">LUCENE-4671</a>: Fix CharsRef.subSequence method.
+<br /><span class="attrib">(Tim Smith via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4465">LUCENE-4465</a>: Let ConstantScoreQuery's Scorer return its child scorer.
+<br /><span class="attrib">(selckin via Uwe Schindler)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.1.0.changes_in_runtime_behavior" href="javascript:toggleList('4.1.0.changes_in_runtime_behavior')">Changes in Runtime Behavior</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="4.1.0.changes_in_runtime_behavior.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4586">LUCENE-4586</a>: Change default ResultMode of FacetRequest to PER_NODE_IN_TREE.
+This only affects requests with depth&gt;1. If you execute such requests and
+rely on the facet results being returned flat (i.e. no hierarchy), you should
+set the ResultMode to GLOBAL_FLAT.
+<br /><span class="attrib">(Shai Erera, Gilad Barkai)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1822">LUCENE-1822</a>: Improves the text window selection by recalculating the starting margin
+once all phrases in the fragment have been identified in FastVectorHighlighter. This
+way if a single word is matched in a fragment, it will appear in the middle of the highlight,
+instead of 6 characters from the beginning. This way one can also guarantee that
+the entirety of short texts are represented in a fragment by specifying a large
+enough fragCharSize.
+<p/>
+</li>
+    </ol>
+  </li>
+  <li><a id="4.1.0.optimizations" href="javascript:toggleList('4.1.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(16)
+    <ol id="4.1.0.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2221">LUCENE-2221</a>: oal.util.BitUtil was modified to use Long.bitCount and
+Long.numberOfTrailingZeros (which are intrinsics since Java 6u18) instead of
+pure java bit twiddling routines in order to improve performance on modern
+JVMs/hardware.
+<br /><span class="attrib">(Dawid Weiss, Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4509">LUCENE-4509</a>: Enable stored fields compression by default in the Lucene 4.1
+default codec.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4536">LUCENE-4536</a>: PackedInts on-disk format is now byte-aligned (it used to be
+long-aligned), saving up to 7 bytes per array of values.
+<br /><span class="attrib">(Adrien Grand, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4512">LUCENE-4512</a>: Additional memory savings for CompressingStoredFieldsFormat.
+<br /><span class="attrib">(Adrien Grand, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4443">LUCENE-4443</a>: Lucene41PostingsFormat no longer writes unnecessary offsets
+into the skipdata.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4459">LUCENE-4459</a>: Improve WeakIdentityMap.keyIterator() to remove GCed keys
+from backing map early instead of waiting for reap(). This makes test
+failures in TestWeakIdentityMap disappear, too.
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4473">LUCENE-4473</a>: Lucene41PostingsFormat encodes offsets more efficiently
+for low frequency terms (&lt; 128 occurrences).
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4462">LUCENE-4462</a>: DocumentsWriter now flushes deletes, segment infos and builds
+CFS files if necessary during segment flush and not during publishing. The latter
+was a single threaded process while now all IO and CPU heavy computation is done
+concurrently in DocumentsWriterPerThread.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4496">LUCENE-4496</a>: Optimize Lucene41PostingsFormat when requesting a subset of
+the postings data (via flags to TermsEnum.docs/docsAndPositions) to use
+ForUtil.skipBlock.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4497">LUCENE-4497</a>: Don't write PosVIntCount to the positions file in
+Lucene41PostingsFormat, as its always totalTermFreq % BLOCK_SIZE.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4498">LUCENE-4498</a>: In Lucene41PostingsFormat, when a term appears in only one document,
+Instead of writing a file pointer to a VIntBlock containing the doc id, just
+write the doc id.
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4515">LUCENE-4515</a>: MemoryIndex now uses Byte/IntBlockPool internally to hold terms and
+posting lists. All index data is represented as consecutive byte/int arrays to
+reduce GC cost and memory overhead.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4538">LUCENE-4538</a>: DocValues now caches direct sources in a ThreadLocal exposed via SourceCache.
+Users of this API can now simply obtain an instance via DocValues#getDirectSource per thread.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4580">LUCENE-4580</a>: DrillDown.query variants return a ConstantScoreQuery with boost set to 0.0f
+so that documents scores are not affected by running a drill-down query.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4598">LUCENE-4598</a>: PayloadIterator no longer uses top-level IndexReader to iterate on the
+posting's payload.
+<br /><span class="attrib">(Shai Erera, Michael McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4661">LUCENE-4661</a>: Drop default maxThreadCount to 1 and maxMergeCount to 2
+in ConcurrentMergeScheduler, for faster merge performance on
+spinning-magnet drives
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.1.0.documentation" href="javascript:toggleList('4.1.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="4.1.0.documentation.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4483">LUCENE-4483</a>: Refer to BytesRef.deepCopyOf in Term's constructor that takes BytesRef.
+<br /><span class="attrib">(Paul Elschot via Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.1.0.build" href="javascript:toggleList('4.1.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(6)
+    <ol id="4.1.0.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4650">LUCENE-4650</a>: Upgrade randomized testing to version 2.0.8: make the
+test framework more robust under low memory conditions.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4603">LUCENE-4603</a>: Upgrade randomized testing to version 2.0.5: print forked
+JVM PIDs on heartbeat from hung tests
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li>Upgrade randomized testing to version 2.0.4: avoid hangs on shutdown
+hooks hanging forever by calling Runtime.halt() in addition to
+Runtime.exit() after a short delay to allow graceful shutdown
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4451">LUCENE-4451</a>: Memory leak per unique thread caused by
+RandomizedContext.contexts static map. Upgrade randomized testing
+to version 2.0.2
+<br /><span class="attrib">(Mike McCandless, Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4589">LUCENE-4589</a>: Upgraded benchmark module's Nekohtml dependency to version
+1.9.17, removing the workaround in Lucene's HTML parser for the
+Turkish locale.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4601">LUCENE-4601</a>: Fix ivy availability check to use typefound, so it works
+if called from another build file.
+<br /><span class="attrib">(Ryan Ernst via Robert Muir)</span></li>
+    </ol>
+  </li>
+</ul>
+<h3><a id="4.0.0" href="javascript:toggleList('4.0.0')">Release 4.0.0  [2012-10-12]</a></h3>
+<ul id="4.0.0.list">
+  <li><a id="4.0.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('4.0.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="4.0.0.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4392">LUCENE-4392</a>: Class org.apache.lucene.util.SortedVIntList has been removed.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4393">LUCENE-4393</a>: RollingCharBuffer has been moved to the o.a.l.analysis.util
+package of lucene-analysis-common.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0.new_features" href="javascript:toggleList('4.0.0.new_features')">New Features</a>&nbsp;&nbsp;&nbsp;(5)
+    <ol id="4.0.0.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1888">LUCENE-1888</a>: Added the option to store payloads in the term
+vectors (IndexableFieldType.storeTermVectorPayloads()). Note
+that you must store term vector positions to store payloads.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3892">LUCENE-3892</a>: Add a new BlockPostingsFormat that bulk-encodes docs,
+freqs and positions in large (size 128) packed-int blocks for faster
+search performance.  This was from Han Jiang's 2012 Google Summer of
+Code project
+<br /><span class="attrib">(Han Jiang, Adrien Grand, Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4323">LUCENE-4323</a>: Added support for an absolute maximum CFS segment size
+(in MiB) to LogMergePolicy and TieredMergePolicy.
+<br /><span class="attrib">(Alexey Lef via Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4339">LUCENE-4339</a>: Allow deletes against 3.x segments for easier upgrading.
+Lucene3x Codec is still otherwise read-only, you should not set it
+as the default Codec on IndexWriter, because it cannot write new segments.
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/SOLR-3441">SOLR-3441</a>: ElisionFilterFactory is now MultiTermAware
+<br /><span class="attrib">(Jack Krupansky via hossman)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0.api_changes" href="javascript:toggleList('4.0.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(15)
+    <ol id="4.0.0.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4391">LUCENE-4391</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4440">LUCENE-4440</a>: All methods of Lucene40Codec but
+getPostingsFormatForField are now final. To reuse functionality
+of Lucene40, you should extend FilterCodec and delegate to Lucene40
+instead of extending Lucene40Codec.
+<br /><span class="attrib">(Adrien Grand, Shai Erea,
+Robert Muir, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4299">LUCENE-4299</a>: Added Terms.hasPositions() and Terms.hasOffsets().
+Previously you had no real way to know that a term vector field
+had positions or offsets, since this can be configured on a
+per-field-per-document basis.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li>Removed DocsAndPositionsEnum.hasPayload() and simplified the
+contract of getPayload(). It returns null if there is no payload,
+otherwise returns the current payload. You can now call it multiple
+times per position if you want.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li>Removed FieldsEnum. Fields API instead implements Iterable&lt;String&gt;
+and exposes Iterator, so you can iterate over field names with
+for (String field : fields) instead.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4152">LUCENE-4152</a>: added IndexReader.leaves(), which lets you enumerate
+the leaf atomic reader contexts for all readers in the tree.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4304">LUCENE-4304</a>: removed PayloadProcessorProvider. If you want to change
+payloads (or other things) when merging indexes, its recommended
+to just use a FilterAtomicReader + IndexWriter.addIndexes. See the
+OrdinalMappingAtomicReader and TaxonomyMergeUtils in the facets
+module if you want an example of this.
+<br /><span class="attrib">(Mike McCandless, Uwe Schindler, Shai Erera, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4304">LUCENE-4304</a>: Make CompositeReader.getSequentialSubReaders()
+protected. To get atomic leaves of any IndexReader use the new method
+leaves() (<a href="http://issues.apache.org/jira/browse/LUCENE-4152">LUCENE-4152</a>), which lists AtomicReaderContexts including
+the doc base of each leaf.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4307">LUCENE-4307</a>: Renamed IndexReader.getTopReaderContext to
+IndexReader.getContext.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4316">LUCENE-4316</a>: Deprecate Fields.getUniqueTermCount and remove it from
+AtomicReader. If you really want the unique term count across all
+fields, just sum up Terms.size() across those fields. This method
+only exists so that this statistic can be accessed for Lucene 3.x
+segments, which don't support Terms.size().
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4321">LUCENE-4321</a>: Change CharFilter to extend Reader directly, as FilterReader
+overdelegates (read(), read(char[], int, int), skip, etc). This made it
+hard to implement CharFilters that were correct. Instead only close() is
+delegated by default: read(char[], int, int) and correct(int) are abstract
+so that its obvious which methods you should implement.  The protected
+inner Reader is 'input' like CharFilter in the 3.x series, instead of 'in'.
+<br /><span class="attrib">(Dawid Weiss, Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3309">LUCENE-3309</a>: The expert FieldSelector API, used to load only certain
+fields in a stored document, has been replaced with the simpler
+StoredFieldVisitor API.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4343">LUCENE-4343</a>: Made Tokenizer.setReader final. This is a setter that should
+not be overridden by subclasses: per-stream initialization should happen
+in reset().
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4377">LUCENE-4377</a>: Remove IndexInput.copyBytes(IndexOutput, long).
+Use DataOutput.copyBytes(DataInput, long) instead.
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4355">LUCENE-4355</a>: Simplify AtomicReader's sugar methods such as termDocsEnum,
+termPositionsEnum, docFreq, and totalTermFreq to only take Term as a
+parameter. If you want to do expert things such as pass a different
+Bits as liveDocs, then use the flex apis (fields(), terms(), etc) directly.
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4425">LUCENE-4425</a>: clarify documentation of StoredFieldVisitor.binaryValue
+and simplify the api to binaryField(FieldInfo, byte[]).
+<br /><span class="attrib">(Adrien Grand, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0.bug_fixes" href="javascript:toggleList('4.0.0.bug_fixes')">Bug Fixes</a>&nbsp;&nbsp;&nbsp;(17)
+    <ol id="4.0.0.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4423">LUCENE-4423</a>: DocumentStoredFieldVisitor.binaryField ignored offset and
+length.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4297">LUCENE-4297</a>: BooleanScorer2 would multiply the coord() factor
+twice for conjunctions: for most users this is no problem, but
+if you had a customized Similarity that returned something other
+than 1 when overlap == maxOverlap (always the case for conjunctions),
+then the score would be incorrect.
+<br /><span class="attrib">(Pascal Chollet, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4298">LUCENE-4298</a>: MultiFields.getTermDocsEnum(IndexReader, Bits, String, BytesRef)
+did not work at all, it would infinitely recurse.
+<br /><span class="attrib">(Alberto Paro via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4300">LUCENE-4300</a>: BooleanQuery's rewrite was not always safe: if you
+had a custom Similarity where coord(1,1) != 1F, then the rewritten
+query would be scored differently.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li>Don't allow negatives in the positions file. If you have an index
+from 2.4.0 or earlier with such negative positions, and you already
+upgraded to 3.x, then to Lucene 4.0-ALPHA or -BETA, you should run
+CheckIndex. If it fails, then you need to upgrade again to 4.0
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4303">LUCENE-4303</a>: PhoneticFilterFactory and SnowballPorterFilterFactory load their
+encoders / stemmers via the ResourceLoader now instead of Class.forName().
+Solr users should now no longer have to embed these in its war.
+<br /><span class="attrib">(David Smiley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/SOLR-3737">SOLR-3737</a>: StempelPolishStemFilterFactory loaded its stemmer table incorrectly.
+Also, ensure immutability and use only one instance of this table in RAM (lazy
+loaded) since its quite large.
+<br /><span class="attrib">(sausarkar, Steven Rowe, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4310">LUCENE-4310</a>: MappingCharFilter was failing to match input strings
+containing non-BMP Unicode characters.
+<br /><span class="attrib">(Dawid Weiss, Robert Muir,
+Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4224">LUCENE-4224</a>: Add in-order scorer to query time joining and the
+out-of-order scorer throws an UOE.
+<br /><span class="attrib">(Martijn van Groningen, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4333">LUCENE-4333</a>: Fixed NPE in TermGroupFacetCollector when faceting on mv fields.
+<br /><span class="attrib">(Jesse MacVicar, Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4218">LUCENE-4218</a>: Document.get(String) and Field.stringValue() again return
+values for numeric fields, like Lucene 3.x and consistent with the documentation.
+<br /><span class="attrib">(Jamie, Uwe Schindler, Robert Muir)</span></li>
+      <li>NRTCachingDirectory was always caching a newly flushed segment in
+RAM, instead of checking the estimated size of the segment
+to decide whether to cache it.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3720">LUCENE-3720</a>: fix memory-consumption issues with BeiderMorseFilter.
+<br /><span class="attrib">(Thomas Neidhart via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4401">LUCENE-4401</a>: Fix bug where DisjunctionSumScorer would sometimes call score()
+on a subscorer that had already returned NO_MORE_DOCS.
+<br /><span class="attrib">(Liu Chao, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4411">LUCENE-4411</a>: when sampling is enabled for a FacetRequest, its depth
+parameter is reset to the default (1), even if set otherwise.
+<br /><span class="attrib">(Gilad Barkai via Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4455">LUCENE-4455</a>: Fix bug in SegmentInfoPerCommit.sizeInBytes() that was
+returning 2X the true size, inefficiently.  Also fixed bug in
+CheckIndex that would report no deletions when a segment has
+deletions, and vice/versa.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4456">LUCENE-4456</a>: Fixed double-counting sizeInBytes for a segment
+(affects how merge policies pick merges); fixed CheckIndex's
+incorrect reporting of whether a segment has deletions; fixed case
+where on abort Lucene could remove files it didn't create; fixed
+many cases where IndexWriter could leave leftover files (on
+exception in various places, on reuse of a segment name after crash
+and recovery.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0.optimizations" href="javascript:toggleList('4.0.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(4)
+    <ol id="4.0.0.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4322">LUCENE-4322</a>: Decrease lucene-core JAR size. The core JAR size had increased a
+lot because of generated code introduced in <a href="http://issues.apache.org/jira/browse/LUCENE-4161">LUCENE-4161</a> and <a href="http://issues.apache.org/jira/browse/LUCENE-3892">LUCENE-3892</a>.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4317">LUCENE-4317</a>: Improve reuse of internal TokenStreams and StringReader
+in oal.document.Field.
+<br /><span class="attrib">(Uwe Schindler, Chris Male, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4327">LUCENE-4327</a>: Support out-of-order scoring in FilteredQuery for higher
+performance.
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4364">LUCENE-4364</a>: Optimize MMapDirectory to not make a mapping per-cfs-slice,
+instead one map per .cfs file. This reduces the total number of maps.
+Additionally factor out a (package-private) generic
+ByteBufferIndexInput from MMapDirectory.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0.build" href="javascript:toggleList('4.0.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(6)
+    <ol id="4.0.0.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4406">LUCENE-4406</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4407">LUCENE-4407</a>: Upgrade to randomizedtesting 2.0.1.
+Workaround for broken test output XMLs due to non-XML text unicode
+chars in strings. Added printing of failed tests at the end of a
+test run
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4252">LUCENE-4252</a>: Detect/Fail tests when they leak RAM in static fields
+<br /><span class="attrib">(Robert Muir, Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4360">LUCENE-4360</a>: Support running the same test suite multiple times in
+parallel
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3985">LUCENE-3985</a>: Upgrade to randomizedtesting 2.0.0. Added support for
+thread leak detection. Added support for suite timeouts.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4354">LUCENE-4354</a>: Corrected maven dependencies to be consistent with
+the licenses/ folder and the binary release. Some had different
+versions or additional unnecessary dependencies.
+<br /><span class="attrib">(selckin via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4340">LUCENE-4340</a>: Move all non-default codec, postings format and terms
+dictionary implementations to lucene/codecs.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0.documentation" href="javascript:toggleList('4.0.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="4.0.0.documentation.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4302">LUCENE-4302</a>: Fix facet userguide to have HTML loose doctype like
+all other javadocs.
+<br /><span class="attrib">(Karl Nicholas via Uwe Schindler)</span></li>
+    </ol>
+  </li>
+</ul>
+<h3><a id="4.0.0-beta" href="javascript:toggleList('4.0.0-beta')">Release 4.0.0-BETA  [2012-08-13]</a></h3>
+<ul id="4.0.0-beta.list">
+  <li><a id="4.0.0-beta.new_features" href="javascript:toggleList('4.0.0-beta.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(10)
+    <ol id="4.0.0-beta.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4249">LUCENE-4249</a>: Changed the explanation of the PayloadTermWeight to use the
+underlying PayloadFunction's explanation as the explanation
+for the payload score.
+<br /><span class="attrib">(Scott Smerchek via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4069">LUCENE-4069</a>: Added BloomFilteringPostingsFormat for use with low-frequency terms
+such as primary keys
+<br /><span class="attrib">(Mark Harwood, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4201">LUCENE-4201</a>: Added JapaneseIterationMarkCharFilter to normalize Japanese
+iteration marks.
+<br /><span class="attrib">(Robert Muir, Christian Moen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3832">LUCENE-3832</a>: Added BasicAutomata.makeStringUnion method to efficiently
+create automata from a fixed collection of UTF-8 encoded BytesRef
+<br /><span class="attrib">(Dawid Weiss, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4153">LUCENE-4153</a>: Added option to fast vector highlighting via BaseFragmentsBuilder to
+respect field boundaries in the case of highlighting for multivalued fields.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4227">LUCENE-4227</a>: Added DirectPostingsFormat, to hold all postings in
+memory as uncompressed simple arrays.  This uses a tremendous amount
+of RAM but gives good search performance gains.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2510">LUCENE-2510</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4044">LUCENE-4044</a>: Migrated Solr's Tokenizer-, TokenFilter-, and
+CharFilterFactories to the lucene-analysis module. The API is still
+experimental.
+<br /><span class="attrib">(Chris Male, Robert Muir, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4230">LUCENE-4230</a>: When pulling a DocsAndPositionsEnum you can now
+specify whether or not you require payloads (in addition to
+offsets); turning one or both off may allow some codec
+implementations to optimize the enum implementation.
+<br /><span class="attrib">(Robert Muir,
+Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4203">LUCENE-4203</a>: Add IndexWriter.tryDeleteDocument(AtomicReader reader,
+int docID), to attempt deletion by docID as long as the provided
+reader is an NRT reader, and the segment has not yet been merged
+away
+<br /><span class="attrib">(Mike McCandless)</span>.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4286">LUCENE-4286</a>: Added option to CJKBigramFilter to always also output
+unigrams. This can be used for a unigram+bigram approach, or at
+index-time only for better support of short queries.
+<br /><span class="attrib">(Tom Burton-West, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-beta.api_changes" href="javascript:toggleList('4.0.0-beta.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(12)
+    <ol id="4.0.0-beta.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4138">LUCENE-4138</a>: update of morfologik (Polish morphological analyzer) to 1.5.3.
+The tag attribute class has been renamed to MorphosyntacticTagsAttribute and
+has a different API (carries a list of tags instead of a compound tag). Upgrade
+of embedded morfologik dictionaries to version 1.9.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4178">LUCENE-4178</a>: set 'tokenized' to true on FieldType by default, so that if you
+make a custom FieldType and set indexed = true, its analyzed by the analyzer.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4220">LUCENE-4220</a>: Removed the buggy JavaCC-based HTML parser in the benchmark
+module and replaced by NekoHTML. HTMLParser interface was cleaned up while
+changing method signatures.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2191">LUCENE-2191</a>: Rename Tokenizer.reset(Reader) to Tokenizer.setReader(Reader).
+The purpose of this method was always to set a new Reader on the Tokenizer,
+reusing the object. But the name was often confused with TokenStream.reset().
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4228">LUCENE-4228</a>: Refactored CharFilter to extend java.io.FilterReader. CharFilters
+filter another reader and you override correct() for offset correction.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4240">LUCENE-4240</a>: Analyzer api now just takes fieldName for getOffsetGap. If the
+field is not analyzed (e.g. StringField), then the analyzer is not invoked
+at all. If you want to tweak things like positionIncrementGap and offsetGap,
+analyze the field with KeywordTokenizer instead.
+<br /><span class="attrib">(Grant Ingersoll, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4250">LUCENE-4250</a>: Pass fieldName to the PayloadFunction explain method, so it
+parallels with docScore and the default implementation is correct.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3747">LUCENE-3747</a>: Support Unicode 6.1.0.
+<br /><span class="attrib">(Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3884">LUCENE-3884</a>: Moved ElisionFilter out of org.apache.lucene.analysis.fr
+package into org.apache.lucene.analysis.util.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4230">LUCENE-4230</a>: When pulling a DocsAndPositionsEnum you now pass an int
+flags instead of the previous boolean needOffsets.  Currently
+recognized flags are DocsAndPositionsEnum.FLAG_PAYLOADS and
+DocsAndPositionsEnum.FLAG_OFFSETS
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4273">LUCENE-4273</a>: When pulling a DocsEnum, you can pass an int flags
+instead of the previous boolean needsFlags; consistent with the changes
+for DocsAndPositionsEnum in <a href="http://issues.apache.org/jira/browse/LUCENE-4230">LUCENE-4230</a>. Currently the only flag
+is DocsEnum.FLAG_FREQS.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>

[... 7655 lines stripped ...]