You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2013/01/15 16:18:54 UTC

svn commit: r1246 [20/47] - in /release/lucene: java/ java/2.9.4/ java/3.6.0/ java/3.6.0/changes-3.6.0/ java/3.6.1/ java/3.6.1/changes-3.6.1/ java/3.6.2/ java/3.6.2/changes-3.6.2/ java/4.0.0-ALPHA/ java/4.0.0-ALPHA/changes/ java/4.0.0-BETA/ java/4.0.0-...

Added: release/lucene/java/4.0.0-ALPHA/changes/Changes.html
==============================================================================
--- release/lucene/java/4.0.0-ALPHA/changes/Changes.html (added)
+++ release/lucene/java/4.0.0-ALPHA/changes/Changes.html Tue Jan 15 15:13:20 2013
@@ -0,0 +1,7602 @@
+<!--
+**********************************************************
+** 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\\\\.0\\\\.0-alpha|3\\\\.6\\\\.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.0.0-alpha.list' 
+            && list.id != '3.6.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.0.0-alpha' || anchor.id == '3.6.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>
+
+<h2><a id="4.0.0-alpha" href="javascript:toggleList('4.0.0-alpha')">Release 4.0.0-ALPHA </a></h2>
+<ul id="4.0.0-alpha.list">
+      <li>More information about this release, including any errata related to the
+release notes, upgrade instructions, or other changes may be found online at:
+   <a href="https://wiki.apache.org/lucene-java/Lucene4.0">https://wiki.apache.org/lucene-java/Lucene4.0</a>
+</li>
+  </li>
+  <li><a id="4.0.0-alpha.changes_in_backwards_compatibility_policy" href="javascript:toggleList('4.0.0-alpha.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(42)
+    <ol id="4.0.0-alpha.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1458">LUCENE-1458</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2111">LUCENE-2111</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2354">LUCENE-2354</a>: Changes from flexible indexing:
+<p/>
+<ul class="bulleted-list">
+<li class="bulleted-list">
+On upgrading to 4.0, if you do not fully reindex your documents,
+  Lucene will emulate the new flex API on top of the old index,
+  incurring some performance cost (up to ~10% slowdown, typically).
+  To prevent this slowdown, use oal.index.IndexUpgrader
+  to upgrade your indexes to latest file format (<a href="http://issues.apache.org/jira/browse/LUCENE-3082">LUCENE-3082</a>).
+</li>
+<p/>
+  Mixed flex/pre-flex indexes are perfectly fine -- the two
+  emulation layers (flex API on pre-flex index, and pre-flex API on
+  flex index) will remap the access as required.  So on upgrading to
+  4.0 you can start indexing new documents into an existing index.
+  To get optimal performance, use oal.index.IndexUpgrader
+  to upgrade your indexes to latest file format (<a href="http://issues.apache.org/jira/browse/LUCENE-3082">LUCENE-3082</a>).
+<p/>
+<li class="bulleted-list">
+The postings APIs (TermEnum, TermDocsEnum, TermPositionsEnum)
+  have been removed in favor of the new flexible
+  indexing (flex) APIs (Fields, FieldsEnum, Terms, TermsEnum,
+  DocsEnum, DocsAndPositionsEnum). One big difference is that field
+  and terms are now enumerated separately: a TermsEnum provides a
+  BytesRef (wraps a byte[]) per term within a single field, not a
+  Term.  Another is that when asking for a Docs/AndPositionsEnum, you
+  now specify the skipDocs explicitly (typically this will be the
+  deleted docs, but in general you can provide any Bits).
+</li>
+<p/>
+<li class="bulleted-list">
+The term vectors APIs (TermFreqVector, TermPositionVector,
+  TermVectorMapper) have been removed in favor of the above
+  flexible indexing APIs, presenting a single-document inverted
+  index of the document from the term vectors.
+</li>
+<p/>
+<li class="bulleted-list">
+MultiReader ctor now throws IOException
+</li>
+<p/>
+<li class="bulleted-list">
+Directory.copy/Directory.copyTo now copies all files (not just
+  index files), since what is and isn't and index file is now
+  dependent on the codecs used.
+</li>
+<p/>
+<li class="bulleted-list">
+UnicodeUtil now uses BytesRef for UTF-8 output, and some method
+  signatures have changed to CharSequence.  These are internal APIs
+  and subject to change suddenly.
+</li>
+<p/>
+<li class="bulleted-list">
+Positional queries (PhraseQuery, *SpanQuery) will now throw an
+  exception if use them on a field that omits positions during
+  indexing (previously they silently returned no results).
+</li>
+<p/>
+<li class="bulleted-list">
+FieldCache.{Byte,Short,Int,Long,Float,Double}Parser's API has
+  changed -- each parse method now takes a BytesRef instead of a
+  String.  If you have an existing Parser, a simple way to fix it is
+  invoke BytesRef.utf8ToString, and pass that String to your
+  existing parser.  This will work, but performance would be better
+  if you could fix your parser to instead operate directly on the
+  byte[] in the BytesRef.
+</li>
+<p/>
+<li class="bulleted-list">
+The internal (experimental) API of NumericUtils changed completely
+  from String to BytesRef. Client code should never use this class,
+  so the change would normally not affect you. If you used some of
+  the methods to inspect terms or create TermQueries out of
+  prefix encoded terms, change to use BytesRef. Please note:
+  Do not use TermQueries to search for single numeric terms.
+  The recommended way is to create a corresponding NumericRangeQuery
+  with upper and lower bound equal and included. TermQueries do not
+  score correct, so the constant score mode of NRQ is the only
+  correct way to handle single value queries.
+</li>
+<p/>
+<li class="bulleted-list">
+NumericTokenStream now works directly on byte[] terms. If you
+  plug a TokenFilter on top of this stream, you will likely get
+  an IllegalArgumentException, because the NTS does not support
+  TermAttribute/CharTermAttribute. If you want to further filter
+  or attach Payloads to NTS, use the new NumericTermAttribute.
+</li>
+</ul>
+<br /><span class="attrib">(Mike McCandless, Robert Muir, Uwe Schindler, Mark Miller, Michael Busch)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2858">LUCENE-2858</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-3733">LUCENE-3733</a>: IndexReader was refactored into abstract
+AtomicReader, CompositeReader, and DirectoryReader. To open Directory-
+based indexes use DirectoryReader.open(), the corresponding method in
+IndexReader is now deprecated for easier migration. Only DirectoryReader
+supports commits, versions, and reopening with openIfChanged(). Terms,
+postings, docvalues, and norms can from now on only be retrieved using
+AtomicReader; DirectoryReader and MultiReader extend CompositeReader,
+only offering stored fields and access to the sub-readers (which may be
+composite or atomic). SlowCompositeReaderWrapper (<a href="http://issues.apache.org/jira/browse/LUCENE-2597">LUCENE-2597</a>) can be
+used to emulate atomic readers on top of composites.
+Please review MIGRATE.txt for information how to migrate old code.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2265">LUCENE-2265</a>: FuzzyQuery and WildcardQuery now operate on Unicode codepoints,
+not unicode code units. For example, a Wildcard "?" represents any unicode
+character. Furthermore, the rest of the automaton package and RegexpQuery use
+true Unicode codepoint representation.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2380">LUCENE-2380</a>: The String-based FieldCache methods (getStrings,
+getStringIndex) have been replaced with BytesRef-based equivalents
+(getTerms, getTermsIndex).  Also, the sort values (returned in
+FieldDoc.fields) when sorting by SortField.STRING or
+SortField.STRING_VAL are now BytesRef instances.  See MIGRATE.txt
+for more details.
+<br /><span class="attrib">(yonik, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2480">LUCENE-2480</a>: Though not a change in backwards compatibility policy, pre-3.0
+indexes are no longer supported. You should upgrade to 3.x first, then run
+optimize(), or reindex.
+<br /><span class="attrib">(Shai Erera, Earwin Burrfoot)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2484">LUCENE-2484</a>: Removed deprecated TermAttribute. Use CharTermAttribute
+and TermToBytesRefAttribute instead.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2600">LUCENE-2600</a>: Remove IndexReader.isDeleted in favor of
+AtomicReader.getDeletedDocs().
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2667">LUCENE-2667</a>: FuzzyQuery's defaults have changed for more performant
+behavior: the minimum similarity is 2 edit distances from the word,
+and the priority queue size is 50. To support this, FuzzyQuery now allows
+specifying unscaled edit distances (foobar~2). If your application depends
+upon the old defaults of 0.5 (scaled) minimum similarity and Integer.MAX_VALUE
+priority queue size, you can use FuzzyQuery(Term, float, int, int) to specify
+those explicitly.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2674">LUCENE-2674</a>: MultiTermQuery.TermCollector.collect now accepts the
+TermsEnum as well.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-588">LUCENE-588</a>: WildcardQuery and QueryParser now allows escaping with
+the '\' character. Previously this was impossible (you could not escape */?,
+for example).  If your code somehow depends on the old behavior, you will
+need to change it (e.g. using "\\" to escape '\' itself).
+<br /><span class="attrib">(Sunil Kamath, Terry Yang via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2837">LUCENE-2837</a>: Collapsed Searcher, Searchable into IndexSearcher;
+removed contrib/remote and MultiSearcher (Mike McCandless); absorbed
+ParallelMultiSearcher into IndexSearcher as an optional
+ExecutorServiced passed to its ctor.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2908">LUCENE-2908</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4037">LUCENE-4037</a>: Removed serialization code from lucene classes.
+It is recommended that you serialize user search needs at a higher level
+in your application.
+<br /><span class="attrib">(Robert Muir, Benson Margulies)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2831">LUCENE-2831</a>: Changed Weight#scorer, Weight#explain &amp; Filter#getDocIdSet to
+operate on a AtomicReaderContext instead of directly on IndexReader to enable
+searches to be aware of IndexSearcher's context.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2839">LUCENE-2839</a>: Scorer#score(Collector,int,int) is now public because it is
+called from other classes and part of public API.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2865">LUCENE-2865</a>: Weight#scorer(AtomicReaderContext, boolean, boolean) now accepts
+a ScorerContext struct instead of booleans.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2882">LUCENE-2882</a>: Cut over SpanQuery#getSpans to AtomicReaderContext to enforce
+per segment semantics on SpanQuery &amp; Spans.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2236">LUCENE-2236</a>: Similarity can now be configured on a per-field basis. See the
+migration notes in MIGRATE.txt for more details.
+<br /><span class="attrib">(Robert Muir, Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2315">LUCENE-2315</a>: AttributeSource's methods for accessing attributes are now final,
+else its easy to corrupt the internal states.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2814">LUCENE-2814</a>: The IndexWriter.flush method no longer takes "boolean
+flushDocStores" argument, as we now always flush doc stores (index
+files holding stored fields and term vectors) while flushing a
+segment.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2548">LUCENE-2548</a>: Field names (eg in Term, FieldInfo) are no longer
+interned.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2883">LUCENE-2883</a>: The contents of o.a.l.search.function has been consolidated into
+the queries module and can be found at o.a.l.queries.function.  See
+MIGRATE.txt for more information
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2392">LUCENE-2392</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-3299">LUCENE-3299</a>: Decoupled vector space scoring from
+Query/Weight/Scorer. If you extended Similarity directly before, you should
+extend TFIDFSimilarity instead.  Similarity is now a lower-level API to
+implement other scoring algorithms.  See MIGRATE.txt for more details.
+<br /><span class="attrib">(David Nemeskey, Simon Willnauer, Mike Mccandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3330">LUCENE-3330</a>: The expert visitor API in Scorer has been simplified and
+extended to support arbitrary relationships. To navigate to a scorer's
+children, call Scorer.getChildren().
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2308">LUCENE-2308</a>: Field is now instantiated with an instance of IndexableFieldType,
+of which there is a core implementation FieldType.  Most properties
+describing a Field have been moved to IndexableFieldType.  See MIGRATE.txt
+for more details.
+<br /><span class="attrib">(Nikola Tankovic, Mike McCandless, Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3396">LUCENE-3396</a>: ReusableAnalyzerBase.TokenStreamComponents.reset(Reader) now
+returns void instead of boolean.  If a Component cannot be reset, it should
+throw an Exception.
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3396">LUCENE-3396</a>: ReusableAnalyzerBase has been renamed to Analyzer.  All Analyzer
+implementations must now use Analyzer.TokenStreamComponents, rather than
+overriding .tokenStream() and .reusableTokenStream() (which are now final).
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3346">LUCENE-3346</a>: Analyzer.reusableTokenStream() has been renamed to tokenStream()
+with the old tokenStream() method removed.  Consequently it is now mandatory
+for all Analyzers to support reusability.
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3473">LUCENE-3473</a>: AtomicReader.getUniqueTermCount() no longer throws UOE when
+it cannot be easily determined. Instead, it returns -1 to be consistent with
+this behavior across other index statistics.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1536">LUCENE-1536</a>: The abstract FilteredDocIdSet.match() method is no longer
+allowed to throw IOException. This change was required to make it conform
+to the Bits interface. This method should never do I/O for performance reasons.
+<br /><span class="attrib">(Mike McCandless, Uwe Schindler, Robert Muir, Chris Male, Yonik Seeley,
+Jason Rutherglen, Paul Elschot)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3559">LUCENE-3559</a>: The methods "docFreq" and "maxDoc" on IndexSearcher were removed,
+as these are no longer used by the scoring system. See MIGRATE.txt for more
+details.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3533">LUCENE-3533</a>: Removed SpanFilters, they created large lists of objects and
+did not scale.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3606">LUCENE-3606</a>: IndexReader and subclasses were made read-only. It is no longer
+possible to delete or undelete documents using IndexReader; you have to use
+IndexWriter now. As deleting by internal Lucene docID is no longer possible,
+this requires adding a unique identifier field to your index. Deleting/
+relying upon Lucene docIDs is not recommended anyway, because they can
+change. Consequently commit() was removed and DirectoryReader.open(),
+openIfChanged() no longer take readOnly booleans or IndexDeletionPolicy
+instances. Furthermore, IndexReader.setNorm() was removed. If you need
+customized norm values, the recommended way to do this is by modifying
+Similarity to use an external byte[] or one of the new DocValues
+fields (<a href="http://issues.apache.org/jira/browse/LUCENE-3108">LUCENE-3108</a>). Alternatively, to dynamically change norms (boost
+*and* length norm) at query time, wrap your AtomicReader using
+FilterAtomicReader, overriding FilterAtomicReader.norms(). To persist the
+changes on disk, copy the FilteredIndexReader to a new index using
+IndexWriter.addIndexes().
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3640">LUCENE-3640</a>: Removed IndexSearcher.close(), because IndexSearcher no longer
+takes a Directory and no longer "manages" IndexReaders, it is a no-op.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3684">LUCENE-3684</a>: Add offsets into DocsAndPositionsEnum, and a few
+FieldInfo.IndexOption: DOCS_AND_POSITIONS_AND_OFFSETS.
+<br /><span class="attrib">(Robert
+Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2858">LUCENE-2858</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-3770">LUCENE-3770</a>: FilterIndexReader was renamed to
+FilterAtomicReader and now extends AtomicReader. If you want to filter
+composite readers like DirectoryReader or MultiReader, filter their
+atomic leaves and build a new CompositeReader (e.g. MultiReader) around
+them.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3736">LUCENE-3736</a>: ParallelReader was split into ParallelAtomicReader
+and ParallelCompositeReader. Lucene 3.x's ParallelReader is now
+ParallelAtomicReader; but the new composite variant has improved performance
+as it works on the atomic subreaders. It requires that all parallel
+composite readers have the same subreader structure. If you cannot provide this,
+you can use SlowCompositeReaderWrapper to make all parallel readers atomic
+and use ParallelAtomicReader.
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2000">LUCENE-2000</a>: clone() now returns covariant types where possible.
+<br /><span class="attrib">(ryan)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3970">LUCENE-3970</a>: Rename Fields.getUniqueFieldCount -&gt; .size() and
+Terms.getUniqueTermCount -&gt; .size().
+<br /><span class="attrib">(Iulius Curt via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3514">LUCENE-3514</a>: IndexSearcher.setDefaultFieldSortScoring was removed
+and replaced with per-search control via new expert search methods
+that take two booleans indicating whether hit scores and max
+score should be computed.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4055">LUCENE-4055</a>: You can't put foreign files into the index dir anymore.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3866">LUCENE-3866</a>: CompositeReader.getSequentialSubReaders() now returns
+unmodifiable List&lt;? extends IndexReader&gt;. ReaderUtil.Gather was
+removed, as IndexReaderContext.leaves() is now the preferred way
+to access sub-readers.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4155">LUCENE-4155</a>: oal.util.ReaderUtil, TwoPhaseCommit, TwoPhaseCommitTool
+classes were moved to oal.index package. oal.util.CodecUtil class was moved
+to oal.codecs package. oal.util.DummyConcurrentLock was removed
+(no longer used in Lucene 4.0).
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-alpha.changes_in_runtime_behavior" href="javascript:toggleList('4.0.0-alpha.changes_in_runtime_behavior')">Changes in Runtime Behavior</a>&nbsp;&nbsp;&nbsp;(11)
+    <ol id="4.0.0-alpha.changes_in_runtime_behavior.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2846">LUCENE-2846</a>: omitNorms now behaves like omitTermFrequencyAndPositions, if you
+omitNorms(true) for field "a" for 1000 documents, but then add a document with
+omitNorms(false) for field "a", all documents for field "a" will have no
+norms.  Previously, Lucene would fill the first 1000 documents with
+"fake norms" from Similarity.getDefault().
+<br /><span class="attrib">(Robert Muir, Mike Mccandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2846">LUCENE-2846</a>: When some documents contain field "a", and others do not, the
+documents that don't have the field get a norm byte value of 0. Previously,
+Lucene would populate "fake norms" with Similarity.getDefault() for these
+documents.
+<br /><span class="attrib">(Robert Muir, Mike Mccandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2720">LUCENE-2720</a>: IndexWriter throws IndexFormatTooOldException on open, rather
+than later when e.g. a merge starts.
+<br /><span class="attrib">(Shai Erera, Mike McCandless, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2881">LUCENE-2881</a>: FieldInfos is now tracked per segment.  Before it was tracked
+per IndexWriter session, which resulted in FieldInfos that had the FieldInfo
+properties from all previous segments combined. Field numbers are now tracked
+globally across IndexWriter sessions and persisted into a _X.fnx file on
+successful commit. The corresponding file format changes are backwards-
+compatible.
+<br /><span class="attrib">(Michael Busch, Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2956">LUCENE-2956</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2573">LUCENE-2573</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2324">LUCENE-2324</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2555">LUCENE-2555</a>: Changes from
+DocumentsWriterPerThread:
+<p/>
+<ul class="bulleted-list">
+<li class="bulleted-list">
+IndexWriter now uses a DocumentsWriter per thread when indexing documents.
+  Each DocumentsWriterPerThread indexes documents in its own private segment,
+  and the in memory segments are no longer merged on flush.  Instead, each
+  segment is separately flushed to disk and subsequently merged with normal
+  segment merging.
+</li>
+<p/>
+<li class="bulleted-list">
+DocumentsWriterPerThread (DWPT) is now flushed concurrently based on a
+  FlushPolicy.  When a DWPT is flushed, a fresh DWPT is swapped in so that
+  indexing may continue concurrently with flushing.  The selected
+  DWPT flushes all its RAM resident documents do disk.  Note: Segment flushes
+  don't flush all RAM resident documents but only the documents private to
+  the DWPT selected for flushing.
+</li>
+<p/>
+<li class="bulleted-list">
+Flushing is now controlled by FlushPolicy that is called for every add,
+  update or delete on IndexWriter. By default DWPTs are flushed either on
+  maxBufferedDocs per DWPT or the global active used memory. Once the active
+  memory exceeds ramBufferSizeMB only the largest DWPT is selected for
+  flushing and the memory used by this DWPT is substracted from the active
+  memory and added to a flushing memory pool, which can lead to temporarily
+  higher memory usage due to ongoing indexing.
+</li>
+<p/>
+<li class="bulleted-list">
+IndexWriter now can utilize ramBufferSize &gt; 2048 MB. Each DWPT can address
+  up to 2048 MB memory such that the ramBufferSize is now bounded by the max
+  number of DWPT avaliable in the used DocumentsWriterPerThreadPool.
+  IndexWriters net memory consumption can grow far beyond the 2048 MB limit if
+  the application can use all available DWPTs. To prevent a DWPT from
+  exhausting its address space IndexWriter will forcefully flush a DWPT if its
+  hard memory limit is exceeded. The RAMPerThreadHardLimitMB can be controlled
+  via IndexWriterConfig and defaults to 1945 MB.
+  Since IndexWriter flushes DWPT concurrently not all memory is released
+  immediately. Applications should still use a ramBufferSize significantly
+  lower than the JVMs avaliable heap memory since under high load multiple
+  flushing DWPT can consume substantial transient memory when IO performance
+  is slow relative to indexing rate.
+</li>
+<p/>
+<li class="bulleted-list">
+IndexWriter#commit now doesn't block concurrent indexing while flushing all
+  'currently' RAM resident documents to disk. Yet, flushes that occur while a
+  a full flush is running are queued and will happen after all DWPT involved
+  in the full flush are done flushing. Applications using multiple threads
+  during indexing and trigger a full flush (eg call commmit() or open a new
+  NRT reader) can use significantly more transient memory.
+</li>
+<p/>
+<li class="bulleted-list">
+IndexWriter#addDocument and IndexWriter.updateDocument can block indexing
+  threads if the number of active + number of flushing DWPT exceed a
+  safety limit. By default this happens if 2 * max number available thread
+  states (DWPTPool) is exceeded. This safety limit prevents applications from
+  exhausting their available memory if flushing can't keep up with
+  concurrently indexing threads.
+</li>
+<p/>
+<li class="bulleted-list">
+IndexWriter only applies and flushes deletes if the maxBufferedDelTerms
+  limit is reached during indexing. No segment flushes will be triggered
+  due to this setting.
+</li>
+<p/>
+<li class="bulleted-list">
+IndexWriter#flush(boolean, boolean) doesn't synchronized on IndexWriter
+  anymore. A dedicated flushLock has been introduced to prevent multiple full-
+  flushes happening concurrently.
+</li>
+<p/>
+<li class="bulleted-list">
+DocumentsWriter doesn't write shared doc stores anymore.
+</li>
+</ul>
+<br /><span class="attrib">(Mike McCandless, Michael Busch, Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3309">LUCENE-3309</a>: Stored fields no longer record whether they were
+tokenized or not.  In general you should not rely on stored fields
+to record any "metadata" from indexing (tokenized, omitNorms,
+IndexOptions, boost, etc.)
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3309">LUCENE-3309</a>: Fast vector highlighter now inserts the
+MultiValuedSeparator for NOT_ANALYZED fields (in addition to
+ANALYZED fields).  To ensure your offsets are correct you should
+provide an analyzer that returns 1 from the offsetGap method.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2621">LUCENE-2621</a>: Removed contrib/instantiated.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1768">LUCENE-1768</a>: StandardQueryTreeBuilder no longer uses RangeQueryNodeBuilder
+for RangeQueryNodes, since theses two classes were removed;
+TermRangeQueryNodeProcessor now creates TermRangeQueryNode,
+instead of RangeQueryNode; the same applies for numeric nodes;
+<br /><span class="attrib">(Vinicius Barros via Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3455">LUCENE-3455</a>: QueryParserBase.newFieldQuery() will throw a ParseException if
+any of the calls to the Analyzer throw an IOException.  QueryParseBase.analyzeRangePart()
+will throw a RuntimException if an IOException is thrown by the Analyzer.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4127">LUCENE-4127</a>: IndexWriter will now throw IllegalArgumentException if
+the first token of an indexed field has 0 positionIncrement
+(previously it silently corrected it to 1, possibly masking bugs).
+OffsetAttributeImpl will throw IllegalArgumentException if startOffset
+is less than endOffset, or if offsets are negative.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-alpha.api_changes" href="javascript:toggleList('4.0.0-alpha.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(35)
+    <ol id="4.0.0-alpha.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2302">LUCENE-2302</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1458">LUCENE-1458</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2111">LUCENE-2111</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2514">LUCENE-2514</a>: Terms are no longer
+required to be character based. Lucene views a term as an arbitrary byte[]:
+during analysis, character-based terms are converted to UTF8 byte[],
+but analyzers are free to directly create terms as byte[]
+(NumericField does this, for example).  The term data is buffered as
+byte[] during indexing, written as byte[] into the terms dictionary,
+and iterated as byte[] (wrapped in a BytesRef) by IndexReader for
+searching.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1458">LUCENE-1458</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2111">LUCENE-2111</a>: AtomicReader now directly exposes its
+deleted docs (getDeletedDocs), providing a new Bits interface to
+directly query by doc ID.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2691">LUCENE-2691</a>: IndexWriter.getReader() has been made package local and is now
+exposed via open and reopen methods on DirectoryReader.  The semantics of the
+call is the same as it was prior to the API change.
+<br /><span class="attrib">(Grant Ingersoll, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2566">LUCENE-2566</a>: QueryParser: Unary operators +,-,! will not be treated as
+operators if they are followed by whitespace.
+<br /><span class="attrib">(yonik)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2831">LUCENE-2831</a>: Weight#scorer, Weight#explain, Filter#getDocIdSet,
+Collector#setNextReader &amp; FieldComparator#setNextReader now expect an
+AtomicReaderContext instead of an IndexReader.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2892">LUCENE-2892</a>: Add QueryParser.newFieldQuery (called by getFieldQuery by
+default) which takes Analyzer as a parameter, for easier customization by
+subclasses.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2953">LUCENE-2953</a>: In addition to changes in 3.x, PriorityQueue#initialize(int)
+function was moved into the ctor.
+<br /><span class="attrib">(Uwe Schindler, Yonik Seeley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3219">LUCENE-3219</a>: SortField type properties have been moved to an enum
+SortField.Type.  In be consistent, CachedArrayCreator.getSortTypeID() has
+been changed CachedArrayCreator.getSortType().
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3225">LUCENE-3225</a>: Add TermsEnum.seekExact for faster seeking when you
+don't need the ceiling term; renamed existing seek methods to either
+seekCeil or seekExact; changed seekExact(ord) to return no value.
+Fixed MemoryCodec and SimpleTextCodec to optimize the seekExact
+case, and fixed places in Lucene to use seekExact when possible.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1536">LUCENE-1536</a>: Filter.getDocIdSet() now takes an acceptDocs Bits interface (like
+Scorer) limiting the documents that can appear in the returned DocIdSet.
+Filters are now required to respect these acceptDocs, otherwise deleted documents
+may get returned by searches. Most filters will pass these Bits down to DocsEnum,
+but those, e.g. working on FieldCache, may need to use BitsFilteredDocIdSet.wrap()
+to exclude them.
+<br /><span class="attrib">(Mike McCandless, Uwe Schindler, Robert Muir, Chris Male, Yonik Seeley,
+Jason Rutherglen, Paul Elschot)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3722">LUCENE-3722</a>: Similarity methods and collection/term statistics now take
+long instead of int (to enable distributed scoring of &gt; 2B docs).
+<br /><span class="attrib">(Yonik Seeley, Andrzej Bialecki, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3761">LUCENE-3761</a>: Generalize SearcherManager into an abstract ReferenceManager.
+SearcherManager remains a concrete class, but due to the refactoring, the
+method maybeReopen has been deprecated in favor of maybeRefresh().
+<br /><span class="attrib">(Shai Erera, Mike McCandless, Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3859">LUCENE-3859</a>: AtomicReader.hasNorms(field) is deprecated, instead you
+can inspect the FieldInfo yourself to see if norms are present, which
+also allows you to get the type.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2606">LUCENE-2606</a>: Changed RegexCapabilities interface to fix thread
+safety, serialization, and performance problems. If you have
+written a custom RegexCapabilities it will need to be updated
+to the new API.
+<br /><span class="attrib">(Robert Muir, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2638">LUCENE-2638</a> MakeHighFreqTerms.TermStats public to make it more useful
+for API use.
+<br /><span class="attrib">(Andrzej Bialecki)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2912">LUCENE-2912</a>: The field-specific hashmaps in SweetSpotSimilarity were removed.
+Instead, use PerFieldSimilarityWrapper to return different SweetSpotSimilaritys
+for different fields, this way all parameters (such as TF factors) can be
+customized on a per-field basis.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3308">LUCENE-3308</a>: DuplicateFilter keepMode and processingMode have been converted to
+enums DuplicateFilter.KeepMode and DuplicateFilter.ProcessingMode repsectively.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3483">LUCENE-3483</a>: Move Function grouping collectors from Solr to grouping module.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3606">LUCENE-3606</a>: FieldNormModifier was deprecated, because IndexReader's
+setNorm() was deprecated. Furthermore, this class is broken, as it does
+not take position overlaps into account while recalculating norms.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3936">LUCENE-3936</a>: Renamed StringIndexDocValues to DocTermsIndexDocValues.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1768">LUCENE-1768</a>: Deprecated Parametric(Range)QueryNode, RangeQueryNode(Builder),
+ParametricRangeQueryNodeProcessor were removed.
+<br /><span class="attrib">(Vinicius Barros via Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3820">LUCENE-3820</a>: Deprecated constructors accepting pattern matching bounds. The input
+is buffered and matched in one pass.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2413">LUCENE-2413</a>: Deprecated PatternAnalyzer in common/miscellaneous, in favor
+of the pattern package (CharFilter, Tokenizer, TokenFilter).
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2413">LUCENE-2413</a>: Removed the AnalyzerUtil in common/miscellaneous.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1370">LUCENE-1370</a>: Added ShingleFilter option to output unigrams if no shingles
+can be generated.
+<br /><span class="attrib">(Chris Harris via Steven Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2514">LUCENE-2514</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2551">LUCENE-2551</a>: JDK and ICU CollationKeyAnalyzers were changed to
+use pure byte keys when Version &gt;= 4.0. This cuts sort key size approximately
+in half.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3400">LUCENE-3400</a>: Removed DutchAnalyzer.setStemDictionary
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3431">LUCENE-3431</a>: Removed QueryAutoStopWordAnalyzer.addStopWords* deprecated methods
+since they prevented reuse.  Stopwords are now generated at instantiation through
+the Analyzer's constructors.
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3434">LUCENE-3434</a>: Removed ShingleAnalyzerWrapper.set* and PerFieldAnalyzerWrapper.addAnalyzer
+since they prevent reuse.  Both Analyzers should be configured at instantiation.
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3765">LUCENE-3765</a>: Stopset ctors that previously took Set&lt;?&gt; or Map&lt;?,String&gt; now take
+CharArraySet and CharArrayMap respectively. Previously the behavior was confusing,
+and sometimes different depending on the type of set, and ultimately a CharArraySet
+or CharArrayMap was always used anyway.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3830">LUCENE-3830</a>: Switched to NormalizeCharMap.Builder to create
+immutable instances of NormalizeCharMap.
+<br /><span class="attrib">(Dawid Weiss, Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4063">LUCENE-4063</a>: FrenchLightStemmer no longer deletes repeated digits.
+<br /><span class="attrib">(Tanguy Moal via Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4122">LUCENE-4122</a>: Replace Payload with BytesRef.
+<br /><span class="attrib">(Andrzej Bialecki)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4132">LUCENE-4132</a>: IndexWriter.getConfig() now returns a LiveIndexWriterConfig object
+which can be used to change the IndexWriter's live settings. IndexWriterConfig
+is used only for initializing the IndexWriter.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3866">LUCENE-3866</a>: IndexReaderContext.leaves() is now the preferred way to access
+atomic sub-readers of any kind of IndexReader (for AtomicReaders it returns
+itsself as only leaf with docBase=0).
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-alpha.new_features" href="javascript:toggleList('4.0.0-alpha.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(65)
+    <ol id="4.0.0-alpha.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2604">LUCENE-2604</a>: Added RegexpQuery support to QueryParser. Regular expressions
+are directly supported by the standard queryparser via
+   fieldName:/expression/ OR /expression against default field/
+Users who wish to search for literal "/" characters are advised to
+backslash-escape or quote those characters as needed.
+<br /><span class="attrib">(Simon Willnauer, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1606">LUCENE-1606</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2089">LUCENE-2089</a>: Adds AutomatonQuery, a MultiTermQuery that
+matches terms against a finite-state machine. Implement WildcardQuery
+and FuzzyQuery with finite-state methods. Adds RegexpQuery.
+<br /><span class="attrib">(Robert Muir, Mike McCandless, Uwe Schindler, Mark Miller)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3662">LUCENE-3662</a>: Add support for levenshtein distance with transpositions
+to LevenshteinAutomata, FuzzyTermsEnum, and DirectSpellChecker.
+<br /><span class="attrib">(Jean-Philippe Barrette-LaPierre, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2321">LUCENE-2321</a>: Cutover to a more RAM efficient packed-ints based
+representation for the in-memory terms dict index.
+<br /><span class="attrib">(Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2126">LUCENE-2126</a>: Add new classes for data (de)serialization: DataInput
+and DataOutput.  IndexInput and IndexOutput extend these new classes.
+<br /><span class="attrib">(Michael Busch)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1458">LUCENE-1458</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2111">LUCENE-2111</a>: With flexible indexing it is now possible
+for an application to create its own postings codec, to alter how
+fields, terms, docs and positions are encoded into the index.  The
+standard codec is the default codec. IndexWriter accepts a Codec
+class to obtain codecs for newly written segments.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1458">LUCENE-1458</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2111">LUCENE-2111</a>: Some experimental codecs have been added
+for flexible indexing, including pulsing codec (inlines
+low-frequency terms directly into the terms dict, avoiding seeking
+for some queries), sep codec (stores docs, freqs, positions, skip
+data and payloads in 5 separate files instead of the 2 used by
+standard codec), and int block (really a "base" for using
+block-based compressors like PForDelta for storing postings data).
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1458">LUCENE-1458</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2111">LUCENE-2111</a>: The in-memory terms index used by standard
+codec is more RAM efficient: terms data is stored as block byte
+arrays and packed integers.  Net RAM reduction for indexes that have
+many unique terms should be substantial, and initial open time for
+IndexReaders should be faster.  These gains only apply for newly
+written segments after upgrading.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1458">LUCENE-1458</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2111">LUCENE-2111</a>: Terms data are now buffered directly as
+byte[] during indexing, which uses half the RAM for ascii terms (and
+also numeric fields).  This can improve indexing throughput for
+applications that have many unique terms, since it reduces how often
+a new segment must be flushed given a fixed RAM buffer size.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2489">LUCENE-2489</a>: Added PerFieldCodecWrapper (in oal.index.codecs) which
+lets you set the Codec per field
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2373">LUCENE-2373</a>: Extend Codec to use SegmentInfosWriter and
+SegmentInfosReader to allow customization of SegmentInfos data.
+<br /><span class="attrib">(Andrzej Bialecki)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2504">LUCENE-2504</a>: FieldComparator.setNextReader now returns a
+FieldComparator instance.  You can "return this", to just reuse the
+same instance, or you can return a comparator optimized to the new
+segment.
+<br /><span class="attrib">(yonik, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2648">LUCENE-2648</a>: PackedInts.Iterator now supports to advance by more than a
+single ordinal.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2649">LUCENE-2649</a>: Objects in the FieldCache can optionally store Bits
+that mark which docs have real values in the native[]
+<br /><span class="attrib">(ryan)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2664">LUCENE-2664</a>: Add SimpleText codec, which stores all terms/postings
+data in a single text file for transparency (at the expense of poor
+performance).
+<br /><span class="attrib">(Sahin Buyrukbilen via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2589">LUCENE-2589</a>: Add a VariableSizedIntIndexInput, which, when used w/
+Sep*, makes it simple to take any variable sized int block coders
+(like Simple9/16) and use them in a codec.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2597">LUCENE-2597</a>: Add oal.index.SlowCompositeReaderWrapper, to wrap a
+composite reader (eg MultiReader or DirectoryReader), making it
+pretend it's an atomic reader.  This is a convenience class (you can
+use MultiFields static methods directly, instead) if you need to use
+the flex APIs directly on a composite reader.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2690">LUCENE-2690</a>: MultiTermQuery boolean rewrites per segment.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Mike McCandless, Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-996">LUCENE-996</a>: The QueryParser now accepts mixed inclusive and exclusive
+bounds for range queries.  Example: "{3 TO 5]"
+QueryParser subclasses that overrode getRangeQuery will need to be changed
+to use the new getRangeQuery method.
+<br /><span class="attrib">(Andrew Schurman, Mark Miller, yonik)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2742">LUCENE-2742</a>: Add native per-field postings format support. Codec lets you now
+register a postings format for each field and which is in turn recorded
+into the index. Postings formtas are maintained on a per-segment basis and be
+resolved without knowing the actual postings format used for writing the segment.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2741">LUCENE-2741</a>: Add support for multiple codecs that use the same file
+extensions within the same segment. Codecs now use their per-segment codec
+ID in the file names.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2843">LUCENE-2843</a>: Added a new terms index impl,
+VariableGapTermsIndexWriter/Reader, that accepts a pluggable
+IndexTermSelector for picking which terms should be indexed in the
+terms dict.  This impl stores the indexed terms in an FST, which is
+much more RAM efficient than FixedGapTermsIndex.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2862">LUCENE-2862</a>: Added TermsEnum.totalTermFreq() and
+Terms.getSumTotalTermFreq().
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3290">LUCENE-3290</a>: Added Terms.getSumDocFreq()
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3003">LUCENE-3003</a>: Added new expert class oal.index.DocTermsOrd,
+refactored from Solr's UnInvertedField, for accessing term ords for
+multi-valued fields, per document.  This is similar to FieldCache in
+that it inverts the index to compute the ords, but differs in that
+it's able to handle multi-valued fields and does not hold the term
+bytes in RAM.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3108">LUCENE-3108</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2935">LUCENE-2935</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2168">LUCENE-2168</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1231">LUCENE-1231</a>: Changes from
+DocValues (ColumnStrideFields):
+<p/>
+<ul class="bulleted-list">
+<li class="bulleted-list">
+IndexWriter now supports typesafe dense per-document values stored in
+  a column like storage. DocValues are stored on a per-document
+  basis where each documents field can hold exactly one value of a given
+  type. DocValues are provided via Fieldable and can be used in
+  conjunction with stored and indexed values.
+</li>
+<p/>
+<li class="bulleted-list">
+DocValues provides an entirely RAM resident document id to value
+  mapping per field as well as a DocIdSetIterator based disk-resident
+  sequential access API relying on filesystem-caches.
+</li>
+<p/>
+<li class="bulleted-list">
+Both APIs are exposed via IndexReader and the Codec / Flex API allowing
+  expert users to integrate customized DocValues reader and writer
+  implementations by extending existing Codecs.
+</li>
+<p/>
+<li class="bulleted-list">
+DocValues provides implementations for primitive datatypes like int,
+  long, float, double and arrays of byte. Byte based implementations further
+  provide storage variants like straight or dereferenced stored bytes, fixed
+  and variable length bytes as well as index time sorted based on
+  user-provided comparators.
+</li>
+</ul>
+<br /><span class="attrib">(Mike McCandless, Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3209">LUCENE-3209</a>: Added MemoryCodec, which stores all terms &amp; postings in
+RAM as an FST; this is good for primary-key fields if you frequently
+need to lookup by that field or perform deletions against it, for
+example in a near-real-time setting.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/SOLR-2533">SOLR-2533</a>: Added support for rewriting Sort and SortFields using an
+IndexSearcher.  SortFields can have SortField.REWRITEABLE type which
+requires they are rewritten before they are used.
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3203">LUCENE-3203</a>: FSDirectory can now limit the max allowed write rate
+(MB/sec) of all running merges, to reduce impact ongoing merging has
+on searching, NRT reopen time, etc.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2793">LUCENE-2793</a>: Directory#createOutput &amp; Directory#openInput now accept an
+IOContext instead of a buffer size to allow low level optimizations for
+different usecases like merging, flushing and reading.
+<br /><span class="attrib">(Simon Willnauer, Mike McCandless, Varun Thacker)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3354">LUCENE-3354</a>: FieldCache can cache DocTermOrds.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3376">LUCENE-3376</a>: ReusableAnalyzerBase has been moved from modules/analysis/common
+into lucene/src/java/org/apache/lucene/analysis
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3423">LUCENE-3423</a>: add Terms.getDocCount(), which returns the number of documents
+that have at least one term for a field.
+<br /><span class="attrib">(Yonik Seeley, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2959">LUCENE-2959</a>: Added a variety of different relevance ranking systems to Lucene.
+<p/>
+<ul class="bulleted-list">
+<li class="bulleted-list">
+Added Okapi BM25, Language Models, Divergence from Randomness, and
+  Information-Based Models. The models are pluggable, support all of lucene's
+  features (boosts, slops, explanations, etc) and queries (spans, etc).
+</li>
+<p/>
+<li class="bulleted-list">
+All models default to the same index-time norm encoding as
+  DefaultSimilarity, so you can easily try these out/switch back and
+  forth/run experiments and comparisons without reindexing. Note: most of
+  the models do rely upon index statistics that are new in Lucene 4.0, so
+  for existing 3.x indexes its a good idea to upgrade your index to the
+  new format with IndexUpgrader first.
+</li>
+<p/>
+<li class="bulleted-list">
+Added a new subclass SimilarityBase which provides a simplified API
+  for plugging in new ranking algorithms without dealing with all of the
+  nuances and implementation details of Lucene.
+</li>
+<p/>
+<li class="bulleted-list">
+For example, to use BM25 for all fields:
+   searcher.setSimilarity(new BM25Similarity());
+</li>
+</ul>
+<p/>
+  If you instead want to apply different similarities (e.g. ones with
+  different parameter values or different algorithms entirely) to different
+  fields, implement PerFieldSimilarityWrapper with your per-field logic.
+<br /><span class="attrib">(David Mark Nemeskey via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3396">LUCENE-3396</a>: ReusableAnalyzerBase now provides a ReuseStrategy abstraction
+which controls how TokenStreamComponents are reused per request.  Two
+implementations are provided - GlobalReuseStrategy which implements the
+current behavior of sharing components between all fields, and
+PerFieldReuseStrategy which shares per field.
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2309">LUCENE-2309</a>: Added IndexableField.tokenStream(Analyzer) which is now
+responsible for creating the TokenStreams for Fields when they are to
+be indexed.
+<br /><span class="attrib">(Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3433">LUCENE-3433</a>: Added random access for non RAM resident IndexDocValues. RAM
+resident and disk resident IndexDocValues are now exposed via the Source
+interface. ValuesEnum has been removed in favour of Source.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1536">LUCENE-1536</a>: Filters can now be applied down-low, if their DocIdSet implements
+a new bits() method, returning all documents in a random access way. If the
+DocIdSet is not too sparse, it will be passed as acceptDocs down to the Scorer
+as replacement for AtomicReader's live docs.
+In addition, FilteredQuery backs now IndexSearcher's filtering search methods.
+Using FilteredQuery you can chain Filters in a very performant way
+[new FilteredQuery(new FilteredQuery(query, filter1), filter2)], which was not
+possible with IndexSearcher's methods. FilteredQuery also allows to override
+the heuristics used to decide if filtering should be done random access or
+using a conjunction on DocIdSet's iterator().
+<br /><span class="attrib">(Mike McCandless, Uwe Schindler, Robert Muir, Chris Male, Yonik Seeley,
+Jason Rutherglen, Paul Elschot)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3638">LUCENE-3638</a>: Added sugar methods to IndexReader and IndexSearcher to
+load only certain fields when loading a document.
+<br /><span class="attrib">(Peter Chang via
+Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3628">LUCENE-3628</a>: Norms are represented as DocValues. AtomicReader exposes
+a #normValues(String) method to obtain norms per field.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3687">LUCENE-3687</a>: Similarity#computeNorm(FieldInvertState, Norm) allows to compute
+norm values or arbitrary precision. Instead of returning a fixed single byte
+value, custom similarities can now set a integer, float or byte value to the
+given Norm object.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2604">LUCENE-2604</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4103">LUCENE-4103</a>: Added RegexpQuery support to contrib/queryparser.
+<br /><span class="attrib">(Simon Willnauer, Robert Muir, Daniel Truemper)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2373">LUCENE-2373</a>: Added a Codec implementation that works with append-only
+filesystems (such as e.g. Hadoop DFS). SegmentInfos writing/reading
+code is refactored to support append-only FS, and to allow for future
+customization of per-segment information.
+<br /><span class="attrib">(Andrzej Bialecki)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2479">LUCENE-2479</a>: Added ability to provide a sort comparator for spelling suggestions along
+with two implementations.  The existing comparator (score, then frequency) is the default
+<br /><span class="attrib">(Grant Ingersoll)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2608">LUCENE-2608</a>: Added the ability to specify the accuracy at method time in the SpellChecker.  The per class
+method is also still available.
+<br /><span class="attrib">(Grant Ingersoll)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2507">LUCENE-2507</a>: Added DirectSpellChecker, which retrieves correction candidates directly
+from the term dictionary using levenshtein automata.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3527">LUCENE-3527</a>: Add LuceneLevenshteinDistance, which computes string distance in a compatible
+way as DirectSpellChecker. This can be used to merge top-N results from more than one
+SpellChecker.
+<br /><span class="attrib">(James Dyer via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3496">LUCENE-3496</a>: Support grouping by DocValues.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2795">LUCENE-2795</a>: Generified DirectIOLinuxDirectory to work across any
+unix supporting the O_DIRECT flag when opening a file (tested on
+Linux and OS X but likely other Unixes will work), and improved it
+so it can be used for indexing and searching.  The directory uses
+direct IO when doing large merges to avoid  unnecessarily evicting
+cached IO pages due to large merges.
+<br /><span class="attrib">(Varun Thacker, Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3827">LUCENE-3827</a>: DocsAndPositionsEnum from MemoryIndex implements
+start/endOffset, if offsets are indexed.
+<br /><span class="attrib">(Alan Woodward via Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3802">LUCENE-3802</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-3856">LUCENE-3856</a>: Support for grouped faceting.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3444">LUCENE-3444</a>: Added a second pass grouping collector that keeps track of distinct
+values for a specified field for the top N group.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3778">LUCENE-3778</a>: Added a grouping utility class that makes it easier to use result
+grouping for pure Lucene apps.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2341">LUCENE-2341</a>: A new analysis/ filter: Morfologik - a dictionary-driven lemmatizer
+(accurate stemmer) for Polish (includes morphosyntactic annotations).
+<br /><span class="attrib">(Michał Dybizbański, Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2413">LUCENE-2413</a>: Consolidated Lucene/Solr analysis components into analysis/common.
+New features from Solr now available to Lucene users include:
+<ul class="bulleted-list">
+<li class="bulleted-list">
+o.a.l.analysis.commongrams: Constructs n-grams for frequently occurring terms
+   and phrases.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.charfilter.HTMLStripCharFilter: CharFilter that strips HTML
+   constructs.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.miscellaneous.WordDelimiterFilter: TokenFilter that splits words
+   into subwords and performs optional transformations on subword groups.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.miscellaneous.RemoveDuplicatesTokenFilter: TokenFilter which
+   filters out Tokens at the same position and Term text as the previous token.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.miscellaneous.TrimFilter: Trims leading and trailing whitespace
+   from Tokens in the stream.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.miscellaneous.KeepWordFilter: A TokenFilter that only keeps tokens
+   with text contained in the required words (inverse of StopFilter).
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.miscellaneous.HyphenatedWordsFilter: A TokenFilter that puts
+   hyphenated words broken into two lines back together.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.miscellaneous.CapitalizationFilter: A TokenFilter that applies
+   capitalization rules to tokens.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.pattern: Package for pattern-based analysis, containing a
+   CharFilter, Tokenizer, and Tokenfilter for transforming text with regexes.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.synonym.SynonymFilter: A synonym filter that supports multi-word
+   synonyms.
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.phonetic: Package for phonetic search, containing various
+   phonetic encoders such as Double Metaphone.
+</li>
+<p/>
+ Some existing analysis components changed packages:
+<li class="bulleted-list">
+o.a.l.analysis.KeywordAnalyzer -&gt; o.a.l.analysis.core.KeywordAnalyzer
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.KeywordTokenizer -&gt; o.a.l.analysis.core.KeywordTokenizer
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.LetterTokenizer -&gt; o.a.l.analysis.core.LetterTokenizer
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.LowerCaseFilter -&gt; o.a.l.analysis.core.LowerCaseFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.LowerCaseTokenizer -&gt; o.a.l.analysis.core.LowerCaseTokenizer
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.SimpleAnalyzer -&gt; o.a.l.analysis.core.SimpleAnalyzer
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.StopAnalyzer -&gt; o.a.l.analysis.core.StopAnalyzer
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.StopFilter -&gt; o.a.l.analysis.core.StopFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.WhitespaceAnalyzer -&gt; o.a.l.analysis.core.WhitespaceAnalyzer
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.WhitespaceTokenizer -&gt; o.a.l.analysis.core.WhitespaceTokenizer
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.PorterStemFilter -&gt; o.a.l.analysis.en.PorterStemFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.ASCIIFoldingFilter -&gt; o.a.l.analysis.miscellaneous.ASCIIFoldingFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.ISOLatin1AccentFilter -&gt; o.a.l.analysis.miscellaneous.ISOLatin1AccentFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.KeywordMarkerFilter -&gt; o.a.l.analysis.miscellaneous.KeywordMarkerFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.LengthFilter -&gt; o.a.l.analysis.miscellaneous.LengthFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.PerFieldAnalyzerWrapper -&gt; o.a.l.analysis.miscellaneous.PerFieldAnalyzerWrapper
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.TeeSinkTokenFilter -&gt; o.a.l.analysis.sinks.TeeSinkTokenFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.CharFilter -&gt; o.a.l.analysis.charfilter.CharFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.BaseCharFilter -&gt; o.a.l.analysis.charfilter.BaseCharFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.MappingCharFilter -&gt; o.a.l.analysis.charfilter.MappingCharFilter
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.NormalizeCharMap -&gt; o.a.l.analysis.charfilter.NormalizeCharMap
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.CharArraySet -&gt; o.a.l.analysis.util.CharArraySet
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.CharArrayMap -&gt; o.a.l.analysis.util.CharArrayMap
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.ReusableAnalyzerBase -&gt; o.a.l.analysis.util.ReusableAnalyzerBase
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.StopwordAnalyzerBase -&gt; o.a.l.analysis.util.StopwordAnalyzerBase
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.WordListLoader -&gt; o.a.l.analysis.util.WordListLoader
+</li>
+<li class="bulleted-list">
+o.a.l.analysis.CharTokenizer -&gt; o.a.l.analysis.util.CharTokenizer
+</li>
+<li class="bulleted-list">
+o.a.l.util.CharacterUtils -&gt; o.a.l.analysis.util.CharacterUtils
+</li>
+</ul>
+<p/>
+ All analyzers in contrib/analyzers and contrib/icu were moved to the
+ analysis/ module.  The 'smartcn' and 'stempel' components now depend on 'common'.
+<br /><span class="attrib">(Chris Male, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4004">LUCENE-4004</a>: Add DisjunctionMaxQuery support to the xml query parser.
+<br /><span class="attrib">(Benson Margulies via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4025">LUCENE-4025</a>: Add maybeRefreshBlocking to ReferenceManager, to let a caller
+block until the refresh logic has been executed.
+<br /><span class="attrib">(Shai Erera, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4039">LUCENE-4039</a>: Add AddIndexesTask to benchmark, which uses IW.addIndexes.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3514">LUCENE-3514</a>: Added IndexSearcher.searchAfter when Sort is used,
+returning results after a specified FieldDoc for deep
+paging.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4043">LUCENE-4043</a>: Added scoring support via score mode for query time joining.
+<br /><span class="attrib">(Martijn van Groningen, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3523">LUCENE-3523</a>: Added oal.search.spell.WordBreakSpellChecker, which
+  generates suggestions by combining two or more terms and/or
+  breaking terms into multiple words.  See Javadocs for usage.
+<br /><span class="attrib">(James Dyer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4019">LUCENE-4019</a>: Added improved parsing of Hunspell Dictionaries so those
+rules missing the required number of parameters either ignored or
+cause a ParseException (depending on whether strict parsing is enabled).
+<br /><span class="attrib">(Luca Cavanna via Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3440">LUCENE-3440</a>: Add ordered fragments feature with IDF-weighted terms for FVH.
+<br /><span class="attrib">(Sebastian Lutze via Koji Sekiguchi)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4082">LUCENE-4082</a>: Added explain to ToParentBlockJoinQuery.
+<br /><span class="attrib">(Christoph Kaser, Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4108">LUCENE-4108</a>: add replaceTaxonomy to DirectoryTaxonomyWriter, which replaces
+the taxonomy in place with the given one.
+<br /><span class="attrib">(Shai Erera)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-alpha.optimizations" href="javascript:toggleList('4.0.0-alpha.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(17)
+    <ol id="4.0.0-alpha.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2588">LUCENE-2588</a>: Don't store unnecessary suffixes when writing the terms
+index, saving RAM in IndexReader; change default terms index
+interval from 128 to 32, because the terms index now requires much
+less RAM.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2669">LUCENE-2669</a>: Optimize NumericRangeQuery.NumericRangeTermsEnum to
+not seek backwards when a sub-range has no terms. It now only seeks
+when the current term is less than the next sub-range's lower end.
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2694">LUCENE-2694</a>: Optimize MultiTermQuery to be single pass for Term lookups.
+MultiTermQuery now stores TermState per leaf reader during rewrite to re-
+seek the term dictionary in TermQuery / TermWeight.
+<br /><span class="attrib">(Simon Willnauer, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3292">LUCENE-3292</a>: IndexWriter no longer shares the same SegmentReader
+instance for merging and NRT readers, which enables directory impls
+to separately tune IO flags for each.
+<br /><span class="attrib">(Varun Thacker, Simon
+Willnauer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3328">LUCENE-3328</a>: BooleanQuery now uses a specialized ConjunctionScorer if all
+boolean clauses are required and instances of TermQuery.
+<br /><span class="attrib">(Simon Willnauer, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3643">LUCENE-3643</a>: FilteredQuery and IndexSearcher.search(Query, Filter,...)
+now optimize the special case query instanceof MatchAllDocsQuery to
+execute as ConstantScoreQuery.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3509">LUCENE-3509</a>: Added fasterButMoreRam option for docvalues. This option controls whether the space for packed ints
+should be rounded up for better performance. This option only applies for docvalues types bytes fixed sorted
+and bytes var sorted.
+<br /><span class="attrib">(Simon Willnauer, Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3795">LUCENE-3795</a>: Replace contrib/spatial with modules/spatial.  This includes
+a basic spatial strategy interface.
+<br /><span class="attrib">(David Smiley, Chris Male, ryan)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3932">LUCENE-3932</a>: Lucene3x codec loads terms index faster, by
+pre-allocating the packed ints array based on the .tii file size
+<br /><span class="attrib">(Sean Bridges via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3468">LUCENE-3468</a>: Replaced last() and remove() with pollLast() in
+FirstPassGroupingCollector
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3830">LUCENE-3830</a>: Changed MappingCharFilter/NormalizeCharMap to use an
+FST under the hood, which requires less RAM.  NormalizeCharMap no
+longer accepts empty string match (it did previously, but ignored
+it).
+<br /><span class="attrib">(Dawid Weiss, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4061">LUCENE-4061</a>: improve synchronization in DirectoryTaxonomyWriter.addCategory
+and few general improvements to DirectoryTaxonomyWriter.
+<br /><span class="attrib">(Shai Erera, Gilad Barkai)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4062">LUCENE-4062</a>: Add new aligned packed bits impls for faster lookup
+performance; add float acceptableOverheadRatio to getWriter and
+getMutable API to give packed ints freedom to pick faster
+implementations
+<br /><span class="attrib">(Adrien Grand via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2357">LUCENE-2357</a>: Reduce transient RAM usage when merging segments in
+IndexWriter.
+<br /><span class="attrib">(Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4098">LUCENE-4098</a>: Add bulk get/set methods to PackedInts
+<br /><span class="attrib">(Adrien Grand
+via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4156">LUCENE-4156</a>: DirectoryTaxonomyWriter.getSize is no longer synchronized.
+<br /><span class="attrib">(Shai Erera, Sivan Yogev)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4163">LUCENE-4163</a>: Improve concurrency of MMapIndexInput.clone() by using
+the new WeakIdentityMap on top of a ConcurrentHashMap to manage
+the cloned instances. WeakIdentityMap was extended to support
+iterating over its keys.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-alpha.bug_fixes" href="javascript:toggleList('4.0.0-alpha.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(18)
+    <ol id="4.0.0-alpha.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2803">LUCENE-2803</a>: The FieldCache can miss values if an entry for a reader
+with more document deletions is requested before a reader with fewer
+deletions, provided they share some segments.
+<br /><span class="attrib">(yonik)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2645">LUCENE-2645</a>: Fix false assertion error when same token was added one
+after another with 0 posIncr.
+<br /><span class="attrib">(David Smiley, Kurosaka Teruhiko via Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3348">LUCENE-3348</a>: Fix thread safety hazards in IndexWriter that could
+rarely cause deletions to be incorrectly applied.
+<br /><span class="attrib">(Yonik Seeley,
+Simon Willnauer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3515">LUCENE-3515</a>: Fix terrible merge performance versus 3.x, especially
+when the directory isn't MMapDirectory, due to failing to reuse
+DocsAndPositionsEnum while merging
+<br /><span class="attrib">(Marc Sturlese, Erick Erickson,
+Robert Muir, Simon Willnauer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3589">LUCENE-3589</a>: BytesRef copy(short) didnt set length.
+<br /><span class="attrib">(Peter Chang via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3045">LUCENE-3045</a>: fixed QueryNodeImpl.containsTag(String key) that was
+not lowercasing the key before checking for the tag
+<br /><span class="attrib">(Adriano Crestani)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3890">LUCENE-3890</a>: Fixed NPE for grouped faceting on multi-valued fields.
+<br /><span class="attrib">(Michael McCandless, Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2945">LUCENE-2945</a>: Fix hashCode/equals for surround query parser generated queries.
+<br /><span class="attrib">(Paul Elschot, Simon Rosenthal, gsingers via ehatcher)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3971">LUCENE-3971</a>: MappingCharFilter could return invalid final token position.
+<br /><span class="attrib">(Dawid Weiss, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3820">LUCENE-3820</a>: PatternReplaceCharFilter could return invalid token positions.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3969">LUCENE-3969</a>: Throw IAE on bad arguments that could cause confusing errors in
+CompoundWordTokenFilterBase, PatternTokenizer, PositionFilter,
+SnowballFilter, PathHierarchyTokenizer, ReversePathHierarchyTokenizer,
+WikipediaTokenizer, and KeywordTokenizer. ShingleFilter and
+CommonGramsFilter now populate PositionLengthAttribute. Fixed
+PathHierarchyTokenizer to reset() all state. Protect against AIOOBE in
+ReversePathHierarchyTokenizer if skip is large. Fixed wrong final
+offset calculation in PathHierarchyTokenizer.
+<br /><span class="attrib">(Mike McCandless, Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4060">LUCENE-4060</a>: Fix a synchronization bug in
+DirectoryTaxonomyWriter.addTaxonomies(). Also, the method has been renamed to
+addTaxonomy and now takes only one Directory and one OrdinalMap.
+<br /><span class="attrib">(Shai Erera, Gilad Barkai)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3590">LUCENE-3590</a>: Fix AIOOBE in BytesRef/CharsRef copyBytes/copyChars when
+offset is nonzero, fix off-by-one in CharsRef.subSequence, and fix
+CharsRef's CharSequence methods to throw exceptions in boundary cases
+to properly meet the specification.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4084">LUCENE-4084</a>: Attempting to reuse a single IndexWriterConfig instance
+across more than one IndexWriter resulted in a cryptic exception.
+This is now fixed, but requires that certain members of
+IndexWriterConfig (MergePolicy, FlushPolicy,
+DocumentsWriterThreadPool) implement clone.
+<br /><span class="attrib">(Robert Muir, Simon
+Willnauer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4079">LUCENE-4079</a>: Fixed loading of Hunspell dictionaries that use aliasing (AF rules)
+<br /><span class="attrib">(Ludovic Boutros via Chris Male)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4077">LUCENE-4077</a>: Expose the max score and per-group scores from
+ToParentBlockJoinCollector
+<br /><span class="attrib">(Christoph Kaser, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4114">LUCENE-4114</a>: Fix int overflow bugs in BYTES_FIXED_STRAIGHT and
+BYTES_FIXED_DEREF doc values implementations
+<br /><span class="attrib">(Walt Elder via Mike McCandless)</span>.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4147">LUCENE-4147</a>: Fixed thread safety issues when rollback() and commit()
+are called simultaneously.
+<br /><span class="attrib">(Simon Willnauer, Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-alpha.documentation" href="javascript:toggleList('4.0.0-alpha.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="4.0.0-alpha.documentation.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3958">LUCENE-3958</a>: Javadocs corrections for IndexWriter.
+<br /><span class="attrib">(Iulius Curt via Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-alpha.build" href="javascript:toggleList('4.0.0-alpha.build')">Build</a>&nbsp;&nbsp;&nbsp;(12)
+    <ol id="4.0.0-alpha.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4047">LUCENE-4047</a>: Cleanup of LuceneTestCase: moved blocks of initialization/ cleanup
+code into JUnit instance and class rules.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4016">LUCENE-4016</a>: Require ANT 1.8.2+ for the build.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3808">LUCENE-3808</a>: Refactoring of testing infrastructure to use randomizedtesting
+package: <a href="http://labs.carrotsearch.com/randomizedtesting.html">http://labs.carrotsearch.com/randomizedtesting.html</a>
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3964">LUCENE-3964</a>: Added target stage-maven-artifacts, which stages
+Maven release artifacts to a Maven staging repository in preparation
+for release.
+<br /><span class="attrib">(Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2845">LUCENE-2845</a>: Moved contrib/benchmark to lucene/benchmark.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2995">LUCENE-2995</a>: Moved contrib/spellchecker into lucene/suggest.
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3285">LUCENE-3285</a>: Moved contrib/queryparser into lucene/queryparser
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3285">LUCENE-3285</a>: Moved contrib/xml-query-parser's demo into lucene/demo
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3271">LUCENE-3271</a>: Moved contrib/queries BooleanFilter, BoostingQuery,
+ChainedFilter, FilterClause and TermsFilter into lucene/queries
+<p/>
+</li>

[... 6222 lines stripped ...]