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 [24/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-BETA/changes/Changes.html
==============================================================================
--- release/lucene/java/4.0.0-BETA/changes/Changes.html (added)
+++ release/lucene/java/4.0.0-BETA/changes/Changes.html Tue Jan 15 15:13:20 2013
@@ -0,0 +1,7881 @@
+<!--
+**********************************************************
+** 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-beta|4\\\\.0\\\\.0-alpha)");
+    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-beta.list' 
+            && list.id != '4.0.0-alpha.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-beta' || anchor.id == '4.0.0-alpha') {
+            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-beta" href="javascript:toggleList('4.0.0-beta')">Release 4.0.0-BETA </a></h2>
+<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 othe only flag
+is DocsEnum.FLAG_FREQS.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3616">LUCENE-3616</a>: TextField(String, Reader, Store) was reduced to TextField(String, Reader),
+as the Store parameter didn't make sense: if you supplied Store.YES, you would only
+receive an exception anyway.
+<br /><span class="attrib">(Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-beta.optimizations" href="javascript:toggleList('4.0.0-beta.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(5)
+    <ol id="4.0.0-beta.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4171">LUCENE-4171</a>: Performance improvements to Packed64.
+<br /><span class="attrib">(Toke Eskildsen via Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4184">LUCENE-4184</a>: Performance improvements to the aligned packed bits impl.
+<br /><span class="attrib">(Toke Eskildsen, Adrien Grand)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4235">LUCENE-4235</a>: Remove enforcing of Filter rewrite for NRQ queries.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4279">LUCENE-4279</a>: Regenerated snowball Stemmers from snowball r554,
+making them substantially more lightweight. Behavior is unchanged.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4291">LUCENE-4291</a>: Reduced internal buffer size for Jflex-based tokenizers
+such as StandardTokenizer from 32kb to 8kb.
+<br /><span class="attrib">(Raintung Li, Steven Rowe, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-beta.bug_fixes" href="javascript:toggleList('4.0.0-beta.bug_fixes')">Bug Fixes</a>&nbsp;&nbsp;&nbsp;(13)
+    <ol id="4.0.0-beta.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4109">LUCENE-4109</a>: BooleanQueries are not parsed correctly with the
+flexible query parser.
+<br /><span class="attrib">(Karsten Rauch via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4176">LUCENE-4176</a>: Fix AnalyzingQueryParser to analyze range endpoints as bytes,
+so that it works correctly with Analyzers that produce binary non-UTF-8 terms
+such as CollationAnalyzer.
+<br /><span class="attrib">(Nattapong Sirilappanich via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4209">LUCENE-4209</a>: Fix FSTCompletionLookup to close its sorter, so that it won't
+leave temp files behind in /tmp. Fix SortedTermFreqIteratorWrapper to not
+leave temp files behind in /tmp on Windows. Fix Sort to not leave
+temp files behind when /tmp is a separate volume.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4221">LUCENE-4221</a>: Fix overeager CheckIndex validation for term vector offsets.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4222">LUCENE-4222</a>: TieredMergePolicy.getFloorSegmentMB was returning the
+size in bytes not MB
+<br /><span class="attrib">(Chris Fuller via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3505">LUCENE-3505</a>: Fix bug (Lucene 4.0alpha only) where boolean conjunctions
+were sometimes scored incorrectly. Conjunctions of only termqueries where
+at least one term omitted term frequencies (IndexOptions.DOCS_ONLY) would
+be scored as if all terms omitted term frequencies.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2686">LUCENE-2686</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-3505">LUCENE-3505</a>: Fixed BooleanQuery scorers to return correct
+freq().  Added support for scorer navigation API (Scorer.getChildren) to
+all queries.  Made Scorer.freq() abstract.
+<br /><span class="attrib">(Koji Sekiguchi, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4234">LUCENE-4234</a>: Exception when FacetsCollector is used with ScoreFacetRequest,
+and the number of matching documents is too large.
+<br /><span class="attrib">(Gilad Barkai via Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4245">LUCENE-4245</a>: Make IndexWriter#close() and MergeScheduler#close()
+non-interruptible.
+<br /><span class="attrib">(Mark Miller, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4190">LUCENE-4190</a>: restrict allowed filenames that a codec may create to
+the patterns recognized by IndexFileNames.  This also fixes
+IndexWriter to only delete files matching this pattern from an index
+directory, to reduce risk when the wrong index path is accidentally
+passed to IndexWriter
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4277">LUCENE-4277</a>: Fix IndexWriter deadlock during rollback if flushable DWPT
+instance are already checked out and queued up but not yet flushed.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4282">LUCENE-4282</a>: Automaton FuzzyQuery didnt always deliver all results.
+<br /><span class="attrib">(Johannes Christen, Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4289">LUCENE-4289</a>: Fix minor idf inconsistencies/inefficiencies in highlighter.
+<br /><span class="attrib">(Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-beta.changes_in_runtime_behavior" href="javascript:toggleList('4.0.0-beta.changes_in_runtime_behavior')">Changes in Runtime Behavior</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="4.0.0-beta.changes_in_runtime_behavior.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4109">LUCENE-4109</a>: Enable position increments in the flexible queryparser by default.
+<br /><span class="attrib">(Karsten Rauch via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3616">LUCENE-3616</a>: Field throws exception if you try to set a boost on an
+unindexed field or one that omits norms.
+<br /><span class="attrib">(Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-beta.build" href="javascript:toggleList('4.0.0-beta.build')">Build</a>&nbsp;&nbsp;&nbsp;(7)
+    <ol id="4.0.0-beta.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4094">LUCENE-4094</a>: Support overriding file.encoding on forked test JVMs
+(force via -Drandomized.file.encoding=XXX).
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4189">LUCENE-4189</a>: Test output should include timestamps (start/end for each
+test/ suite). Added -Dtests.timestamps=[off by default].
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4110">LUCENE-4110</a>: Report long periods of forked jvm inactivity (hung tests/ suites).
+Added -Dtests.heartbeat=[seconds] with the default of 60 seconds.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4160">LUCENE-4160</a>: Added a property to quit the tests after a given
+number of failures has occurred. This is useful in combination
+with -Dtests.iters=N (you can start N iterations and wait for M
+failures, in particular M = 1). -Dtests.maxfailures=M. Alternatively,
+specify -Dtests.failfast=true to skip all tests after the first failure.
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4115">LUCENE-4115</a>: JAR resolution/ cleanup should be done automatically for ant
+clean/ eclipse/ resolve
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4199">LUCENE-4199</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4202">LUCENE-4202</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-4206">LUCENE-4206</a>: Add a new target "check-forbidden-apis"
+that parses all generated .class files for use of APIs that use default
+charset, default locale, or default timezone and fail build if violations
+found. This ensures, that Lucene / Solr is independent on local configuration
+options.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4217">LUCENE-4217</a>: Add the possibility to run tests with Atlassian Clover
+loaded from IVY. A development License solely for Apache code was added in
+the tools/ folder, but is not included in releases.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+    </ol>
+  </li>
+  <li><a id="4.0.0-beta.documentation" href="javascript:toggleList('4.0.0-beta.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="4.0.0-beta.documentation.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-4195">LUCENE-4195</a>: Added package documentation and examples for
+org.apache.lucene.codecs
+<br /><span class="attrib">(Alan Woodward via Robert Muir)</span></li>
+    </ol>
+  </li>
+</ul>
+<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">

[... 6519 lines stripped ...]