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 [3/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-B...

Added: release/lucene/java/3.6.0/changes-3.6.0/Changes.html
==============================================================================
--- release/lucene/java/3.6.0/changes-3.6.0/Changes.html (added)
+++ release/lucene/java/3.6.0/changes-3.6.0/Changes.html Tue Jan 15 15:13:20 2013
@@ -0,0 +1,6393 @@
+<!--
+**********************************************************
+** 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("^(?:3\\\\.6\\\\.0|3\\\\.5\\\\.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 != '3.6.0.list' 
+            && list.id != '3.5.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 == '3.6.0' || anchor.id == '3.5.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="3.6.0" href="javascript:toggleList('3.6.0')">Release 3.6.0 </a></h2>
+<ul id="3.6.0.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:
+   https://wiki.apache.org/lucene-java/Lucene3.6
+</li>
+  </li>
+  <li><a id="3.6.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('3.6.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(15)
+    <ol id="3.6.0.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3594">LUCENE-3594</a>: The protected inner class (never intended to be visible)
+FieldCacheTermsFilter.FieldCacheTermsFilterDocIdSet was removed and
+replaced by another internal implementation.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3620">LUCENE-3620</a>: FilterIndexReader now overrides all methods of IndexReader that
+it should (note that some are still not overridden, as they should be
+overridden by sub-classes only). In the process, some methods of IndexReader
+were made final. This is not expected to affect many apps, since these methods
+already delegate to abstract methods, which you had to already override
+anyway.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3636">LUCENE-3636</a>: Added SearcherFactory, used by SearcherManager and NRTManager
+to create new IndexSearchers. You can provide your own implementation to
+warm new searchers, set an ExecutorService, set a custom Similarity, or
+even return your own subclass of IndexSearcher. The SearcherWarmer and
+ExecutorService parameters on these classes were removed, as they are
+subsumed by SearcherFactory.
+<br /><span class="attrib">(Shai Erera, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3644">LUCENE-3644</a>: The expert ReaderFinishedListener api suffered problems (propagated
+down to subreaders, but was not called on SegmentReaders, unless they were
+the owner of the reader core, and other ambiguities). The API is revised:
+You can set ReaderClosedListeners on any IndexReader, and onClose is called
+when that reader is closed.  SegmentReader has CoreClosedListeners that you
+can register to know when a shared reader core is closed.
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3652">LUCENE-3652</a>: The package org.apache.lucene.messages was moved to
+contrib/queryparser. If you have used those classes in your code
+just add the lucene-queryparser.jar file to your classpath.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3681">LUCENE-3681</a>: FST now stores labels for BYTE2 input type as 2 bytes
+instead of vInt; this can make FSTs smaller and faster, but it is a
+break in the binary format so if you had built and saved any FSTs
+then you need to rebuild them.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3679">LUCENE-3679</a>: The expert IndexReader.getFieldNames(FieldOption) API
+has been removed and replaced with the experimental getFieldInfos
+API.  All IndexReader subclasses must implement getFieldInfos.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3695">LUCENE-3695</a>: Move confusing add(X) methods out of FST.Builder into
+FST.Util.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3701">LUCENE-3701</a>: Added an additional argument to the expert FST.Builder
+ctor to take FreezeTail, which you can use to (very-expertly) customize
+the FST construction process. Pass null if you want the default
+behavior.  Added seekExact() to FSTEnum, and added FST.save/read
+from a File.
+<br /><span class="attrib">(Mike McCandless, Dawid Weiss, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3712">LUCENE-3712</a>: Removed unused and untested ReaderUtil#subReader methods.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3672">LUCENE-3672</a>: Deprecate Directory.fileModified,
+IndexCommit.getTimestamp and .getVersion and
+IndexReader.lastModified and getCurrentVersion
+<br /><span class="attrib">(Andrzej Bialecki,
+Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3760">LUCENE-3760</a>: In IndexReader/DirectoryReader, deprecate static
+methods getCurrentVersion and getCommitUserData, and non-static
+method getCommitUserData (use getIndexCommit().getUserData()
+instead).
+<br /><span class="attrib">(Ryan McKinley, Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3867">LUCENE-3867</a>: Deprecate instance creation of RamUsageEstimator, instead
+the new static method sizeOf(Object) should be used. As the algorithm
+is now using Hotspot(TM) internals (reference size, header sizes,
+object alignment), the abstract o.a.l.util.MemoryModel class was
+completely removed (without replacement). The new static methods
+no longer support String intern-ness checking, interned strings
+now count to memory usage as any other Java object.
+<br /><span class="attrib">(Dawid Weiss, Uwe Schindler, Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3738">LUCENE-3738</a>: All readXxx methods in BufferedIndexInput were made
+final. Subclasses should only override protected readInternal /
+seekInternal.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2599">LUCENE-2599</a>: Deprecated the spatial contrib module, which was buggy and not
+well maintained.  Lucene 4 includes a new spatial module that replaces this.
+<br /><span class="attrib">(David Smiley, Ryan McKinley, Chris Male)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.6.0.changes_in_runtime_behavior" href="javascript:toggleList('3.6.0.changes_in_runtime_behavior')">Changes in Runtime Behavior</a>&nbsp;&nbsp;&nbsp;(3)
+    <ol id="3.6.0.changes_in_runtime_behavior.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3796">LUCENE-3796</a>, <a href="http://issues.apache.org/jira/browse/SOLR-3241">SOLR-3241</a>: Throw an exception if you try to set an index-time
+boost on a field that omits norms. Because the index-time boost
+is multiplied into the norm, previously your boost would be
+silently discarded.
+<br /><span class="attrib">(Tomás Fernández Löbbe, Hoss Man, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3848">LUCENE-3848</a>: Fix tokenstreams to not produce a stream with an initial
+position increment of 0: which is out of bounds (overlapping with a
+non-existent previous term). Consumers such as IndexWriter and QueryParser
+still check for and silently correct this situation today, but at some point
+in the future they may throw an exception.
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3738">LUCENE-3738</a>: DataInput/DataOutput no longer allow negative vLongs. Negative
+vInts are still supported (for index backwards compatibility), but
+should not be used in new code. The read method for negative vLongs
+was already broken since Lucene 3.1.
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.6.0.security_fixes" href="javascript:toggleList('3.6.0.security_fixes')">Security fixes</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="3.6.0.security_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3588">LUCENE-3588</a>: Try harder to prevent SIGSEGV on cloned MMapIndexInputs:
+Previous versions of Lucene could SIGSEGV the JVM if you try to access
+the clone of an IndexInput retrieved from MMapDirectory. This security fix
+prevents this as best as it can by throwing AlreadyClosedException
+also on clones.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.6.0.api_changes" href="javascript:toggleList('3.6.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(7)
+    <ol id="3.6.0.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3606">LUCENE-3606</a>: IndexReader will be made read-only in Lucene 4.0, so all
+methods allowing to delete or undelete documents using IndexReader were
+deprecated; you should use IndexWriter now. Consequently
+IndexReader.commit() and all open(), openIfChanged(), clone() methods
+taking readOnly booleans (or IndexDeletionPolicy instances) were
+deprecated. IndexReader.setNorm() is superfluous and was deprecated.
+If you have to change per-document boost use CustomScoreQuery.
+If you want to dynamically change norms (boost *and* length norm) at
+query time, wrap your IndexReader using FilterIndexReader, overriding
+FilterIndexReader.norms(). To persist the changes on disk, copy the
+FilteredIndexReader to a new index using IndexWriter.addIndexes().
+In Lucene 4.0, SimilarityProvider will allow you to customize scoring
+using external norms, too.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3735">LUCENE-3735</a>: PayloadProcessorProvider was changed to return a
+ReaderPayloadProcessor instead of DirPayloadProcessor. The selection
+of the provider to return for the factory is now based on the IndexReader
+to be merged. To mimic the old behaviour, just use IndexReader.directory()
+for choosing the provider by Directory.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3765">LUCENE-3765</a>: Deprecated StopFilter ctor that took ignoreCase, because
+in some cases (if the set is a CharArraySet), the argument is ignored.
+Deprecated StandardAnalyzer and ClassicAnalyzer ctors that take File,
+please use the Reader ctor instead.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3766">LUCENE-3766</a>: Deprecate no-arg ctors of Tokenizer. Tokenizers are
+TokenStreams with Readers: tokenizers with null Readers will not be
+supported in Lucene 4.0, just use a TokenStream.
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3769">LUCENE-3769</a>: Simplified NRTManager by requiring applyDeletes to be
+passed to ctor only; if an app needs to mix and match it's free to
+create two NRTManagers (one always applying deletes and the other
+never applying deletes).
+<br /><span class="attrib">(MJB, Shai Erera, Mike McCandless)</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-3776">LUCENE-3776</a>: You now acquire/release the IndexSearcher directly from
+NRTManager.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.6.0.new_features" href="javascript:toggleList('3.6.0.new_features')">New Features</a>&nbsp;&nbsp;&nbsp;(11)
+    <ol id="3.6.0.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3593">LUCENE-3593</a>: Added a FieldValueFilter that accepts all documents that either
+have at least one or no value at all in a specific field.
+<br /><span class="attrib">(Simon Willnauer,
+Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3586">LUCENE-3586</a>: CheckIndex and IndexUpgrader allow you to specify the
+specific FSDirectory implementation to use (with the new -dir-impl
+command-line option).
+<br /><span class="attrib">(Luca Cavanna via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3634">LUCENE-3634</a>: IndexReader's static main method was moved to a new
+tool, CompoundFileExtractor, in contrib/misc.
+<br /><span class="attrib">(Robert Muir, Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-995">LUCENE-995</a>: The QueryParser now interprets * as an open end for range
+queries.  Literal asterisks may be represented by quoting or escaping
+(i.e. \* or "*")  Custom QueryParser subclasses overriding getRangeQuery()
+will be passed null for any open endpoint. (Ingo Renner, Adriano
+Crestani, yonik, Mike McCandless
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3121">LUCENE-3121</a>: Add sugar reverse lookup (given an output, find the
+input mapping to it) for FSTs that have strictly monotonic long
+outputs (such as an ord).
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3671">LUCENE-3671</a>: Add TypeTokenFilter that filters tokens based on
+their TypeAttribute.
+<br /><span class="attrib">(Tommaso Teofili via Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3690">LUCENE-3690</a>,<a href="http://issues.apache.org/jira/browse/LUCENE-3913">LUCENE-3913</a>: Added HTMLStripCharFilter, a CharFilter that strips
+HTML markup.
+<br /><span class="attrib">(Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3725">LUCENE-3725</a>: Added optional packing to FST building; this uses extra
+RAM during building but results in a smaller FST.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3714">LUCENE-3714</a>: Add top N shortest cost paths search for FST.
+<br /><span class="attrib">(Robert Muir, Dawid Weiss, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3789">LUCENE-3789</a>: Expose MTQ TermsEnum via RewriteMethod for non package private
+access
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3881">LUCENE-3881</a>: Added UAX29URLEmailAnalyzer: a standard analyzer that recognizes
+URLs and emails.
+<br /><span class="attrib">(Steve Rowe)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.6.0.bug_fixes" href="javascript:toggleList('3.6.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(17)
+    <ol id="3.6.0.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3595">LUCENE-3595</a>: Fixed FieldCacheRangeFilter and FieldCacheTermsFilter
+to correctly respect deletions on reopened SegmentReaders. Factored out
+FieldCacheDocIdSet to be a top-level class.
+<br /><span class="attrib">(Uwe Schindler, Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3627">LUCENE-3627</a>: Don't let an errant 0-byte segments_N file corrupt the index.
+<br /><span class="attrib">(Ken McCracken via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3630">LUCENE-3630</a>: The internal method MultiReader.doOpenIfChanged(boolean doClone)
+was overriding IndexReader.doOpenIfChanged(boolean readOnly), so changing the
+contract of the overridden method. This method was renamed and made private.
+In ParallelReader the bug was not existent, but the implementation method
+was also made private.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3641">LUCENE-3641</a>: Fixed MultiReader to correctly propagate readerFinishedListeners
+to clones/reopened readers.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3642">LUCENE-3642</a>, <a href="http://issues.apache.org/jira/browse/SOLR-2891">SOLR-2891</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-3717">LUCENE-3717</a>: Fixed bugs in CharTokenizer, n-gram tokenizers/filters,
+compound token filters, thai word filter, icutokenizer, pattern analyzer,
+wikipediatokenizer, and smart chinese where they would create invalid offsets in
+some situations, leading to problems in highlighting.
+<br /><span class="attrib">(Max Beutel, Edwin Steiner via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3639">LUCENE-3639</a>: TopDocs.merge was incorrectly setting TopDocs.maxScore to
+Float.MIN_VALUE when it should be Float.NaN, when there were 0
+hits.  Improved age calculation in SearcherLifetimeManager, to have
+double precision and to compute age to be how long ago the searcher
+was replaced with a new searcher
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3658">LUCENE-3658</a>: Corrected potential concurrency issues with
+NRTCachingDir, fixed createOutput to overwrite any previous file,
+and removed invalid asserts
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3605">LUCENE-3605</a>: don't sleep in a retry loop when trying to locate the
+segments_N file
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3711">LUCENE-3711</a>: SentinelIntSet with a small initial size can go into
+an infinite loop when expanded.  This can affect grouping using
+TermAllGroupsCollector or TermAllGroupHeadsCollector if instantiated with a
+non default small size.
+<br /><span class="attrib">(Martijn van Groningen, yonik)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3727">LUCENE-3727</a>: When writing stored fields and term vectors, Lucene
+checks file sizes to detect a bug in some Sun JREs (<a href="http://issues.apache.org/jira/browse/LUCENE-1282">LUCENE-1282</a>),
+however, on some NFS filesystems File.length() could be stale,
+resulting in false errors like "fdx size mismatch while indexing".
+These checks now use getFilePointer instead to avoid this.
+<br /><span class="attrib">(Jamir Shaikh, Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3816">LUCENE-3816</a>: Fixed problem in FilteredDocIdSet, if null was returned
+from the delegate DocIdSet.iterator(), which is allowed to return
+null by DocIdSet specification when no documents match.
+<br /><span class="attrib">(Shay Banon via Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3821">LUCENE-3821</a>: SloppyPhraseScorer missed documents that ExactPhraseScorer finds
+When phrase query had repeating terms (e.g. "yes no yes")
+sloppy query missed documents that exact query matched.
+Fixed except when for repeating multiterms (e.g. "yes no yes|no").
+<br /><span class="attrib">(Robert Muir, Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3841">LUCENE-3841</a>: Fix CloseableThreadLocal to also purge stale entries on
+get(); this fixes certain cases where we were holding onto objects
+for dead threads for too long
+<br /><span class="attrib">(Matthew Bellew, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3872">LUCENE-3872</a>: IndexWriter.close() now throws IllegalStateException if
+you call it after calling prepareCommit() without calling commit()
+first.
+<br /><span class="attrib">(Tim Bogaert via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3874">LUCENE-3874</a>: Throw IllegalArgumentException from IndexWriter (rather
+than producing a corrupt index), if a positionIncrement would cause
+integer overflow. This can happen, for example when using a buggy
+TokenStream that forgets to call clearAttributes() in combination
+with a StopFilter.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3876">LUCENE-3876</a>: Fix bug where positions for a document exceeding
+Integer.MAX_VALUE/2 would produce a corrupt index.
+<br /><span class="attrib">(Simon Willnauer, Mike Mccandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3880">LUCENE-3880</a>: UAX29URLEmailTokenizer now recognizes emails when the mailto:
+scheme is prepended.
+<br /><span class="attrib">(Kai Gülzau, Steve Rowe)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.6.0.optimizations" href="javascript:toggleList('3.6.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="3.6.0.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3653">LUCENE-3653</a>: Improve concurrency in VirtualMethod and AttributeSource by
+using a WeakIdentityMap based on a ConcurrentHashMap.
+<br /><span class="attrib">(Uwe Schindler,
+Gerrit Jansen van Vuuren)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.6.0.documentation" href="javascript:toggleList('3.6.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="3.6.0.documentation.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3597">LUCENE-3597</a>: Fixed incorrect grouping documentation.
+<br /><span class="attrib">(Martijn van Groningen,
+Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3926">LUCENE-3926</a>: Improve documentation of RAMDirectory, because this
+class is not intended to work with huge indexes. Everything beyond
+several hundred megabytes will waste resources (GC cycles), because
+it uses an internal buffer size of 1024 bytes, producing millions of
+byte[1024] arrays. This class is optimized for small memory-resident
+indexes. It also has bad concurrency on multithreaded environments.
+It is recommended to materialize large indexes on disk and use
+MMapDirectory, which is a high-performance directory implementation
+working directly on the file system cache of the operating system,
+so copying data to Java heap space is not useful.
+<br /><span class="attrib">(Uwe Schindler,
+Mike McCandless, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.6.0.build" href="javascript:toggleList('3.6.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(8)
+    <ol id="3.6.0.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3857">LUCENE-3857</a>: exceptions from other threads in beforeclass/etc do not fail
+the test
+<br /><span class="attrib">(Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3847">LUCENE-3847</a>: LuceneTestCase will now check for modifications of System
+properties before and after each test (and suite). If changes are detected,
+the test will fail. A rule can be used to reset system properties to
+before-scope state (and this has been used to make Solr tests pass).
+(Dawid Weiss, Uwe Schindler).
+<p/>
+</li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3228">LUCENE-3228</a>: Stop downloading external javadoc package-list files:
+<p/>
+<ul class="bulleted-list">
+<li class="bulleted-list">
+Added package-list files for Oracle Java javadocs and JUnit javadocs to
+  Lucene/Solr subversion.
+</li>
+<p/>
+<li class="bulleted-list">
+The Oracle Java javadocs package-list file is excluded from Lucene and
+  Solr source release packages.
+</li>
+<p/>
+<li class="bulleted-list">
+Regardless of network connectivity, javadocs built from a subversion
+  checkout contain links to Oracle &amp; JUnit javadocs.
+</li>
+<p/>
+<li class="bulleted-list">
+Building javadocs from a source release package will download the Oracle
+  Java package-list file if it isn't already present.
+</li>
+<p/>
+<li class="bulleted-list">
+When the Oracle Java package-list file is not present and download fails,
+  the javadocs targets will not fail the build, though an error will appear
+  in the build log.  In this case, the built javadocs will not contain links
+  to Oracle Java javadocs.
+</li>
+<p/>
+<li class="bulleted-list">
+Links from Solr javadocs to Lucene's javadocs are enabled. When building
+  a X.Y.Z-SNAPSHOT version, the links are to the most recently built nightly
+  Jenkins javadocs. When building a release version, links are to the
+  Lucene release javadocs for the same version.
+</li>
+</ul>
+<br /><span class="attrib">(Steve Rowe, hossman)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3753">LUCENE-3753</a>: Restructure the Lucene build system:
+<ul class="bulleted-list">
+<li class="bulleted-list">
+Created a new Lucene-internal module named "core" by moving the java/
+  and test/ directories from lucene/src/ to lucene/core/src/.
+</li>
+<li class="bulleted-list">
+Eliminated lucene/src/ by moving all its directories up one level.
+</li>
+<li class="bulleted-list">
+Each internal module (core/, test-framework/, and tools/) now has its own
+  build.xml, from which it is possible to run module-specific targets.
+  lucene/build.xml delegates all build tasks (via
+  &lt;ant dir="internal-module-dir"&gt; calls) to these modules' build.xml files.
+</li>
+</ul>
+<br /><span class="attrib">(Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3774">LUCENE-3774</a>: Optimized and streamlined license and notice file validation
+by refactoring the build task into an ANT task and modifying build scripts
+to perform top-level checks.
+<br /><span class="attrib">(Dawid Weiss, Steve Rowe, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3762">LUCENE-3762</a>: Upgrade JUnit to 4.10, refactor state-machine of detecting
+setUp/tearDown call chaining in LuceneTestCase.
+<br /><span class="attrib">(Dawid Weiss, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3944">LUCENE-3944</a>: Make the 'generate-maven-artifacts' target use filtered POMs
+placed under lucene/build/poms/, rather than in each module's base
+directory.  The 'clean' target now removes them.
+<br /><span class="attrib">(Steve Rowe, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3930">LUCENE-3930</a>: Changed build system to use Apache Ivy for retrival of 3rd
+party JAR files.  Please review BUILD.txt for instructions.
+<br /><span class="attrib">(Robert Muir, Chris Male, Uwe Schindler, Steven Rowe, Hossman)</span></li>
+    </ol>
+  </li>
+</ul>
+<h2><a id="3.5.0" href="javascript:toggleList('3.5.0')">Release 3.5.0  [2011-11-27]</a></h2>
+<ul id="3.5.0.list">
+  <li><a id="3.5.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('3.5.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(3)
+    <ol id="3.5.0.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3390">LUCENE-3390</a>: The first approach in Lucene 3.4.0 for missing values
+support for sorting had a design problem that made the missing value
+be populated directly into the FieldCache arrays during sorting,
+leading to concurrency issues. To fix this behaviour, the method
+signatures had to be changed:
+<ul class="bulleted-list">
+<li class="bulleted-list">
+FieldCache.getUnValuedDocs() was renamed to FieldCache.getDocsWithField()
+  returning a Bits interface (backported from Lucene 4.0).
+</li>
+<li class="bulleted-list">
+FieldComparator.setMissingValue() was removed and added to
+  constructor
+</li>
+</ul>
+As this is expert API, most code will not be affected.
+<br /><span class="attrib">(Uwe Schindler, Doron Cohen, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3541">LUCENE-3541</a>: Remove IndexInput's protected copyBuf. If you want to
+keep a buffer in your IndexInput, do this yourself in your implementation,
+and be sure to do the right thing on clone()!
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2822">LUCENE-2822</a>: TimeLimitingCollector now expects a counter clock instead of
+relying on a private daemon thread. The global time limiting clock thread
+has been exposed and is now lazily loaded and fully optional.
+TimeLimitingCollector now supports setting clock baseline manually to include
+prelude of a search. Previous versions set the baseline on construction time,
+now baseline is set once the first IndexReader is passed to the collector
+unless set before.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.5.0.changes_in_runtime_behavior" href="javascript:toggleList('3.5.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="3.5.0.changes_in_runtime_behavior.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3520">LUCENE-3520</a>: IndexReader.openIfChanged, when passed a near-real-time
+reader, will now return null if there are no changes.  The API has
+always reserved the right to do this; it's just that in the past for
+near-real-time readers it never did.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.5.0.bug_fixes" href="javascript:toggleList('3.5.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(16)
+    <ol id="3.5.0.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/SOLR-2762">SOLR-2762</a>: (backport form 4.x line): FSTLookup could return duplicate
+results or one results less than requested.
+<br /><span class="attrib">(David Smiley, Dawid Weiss)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3412">LUCENE-3412</a>: SloppyPhraseScorer was returning non-deterministic results
+for queries with many repeats
+<br /><span class="attrib">(Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3421">LUCENE-3421</a>: PayloadTermQuery's explain was wrong when includeSpanScore=false.
+<br /><span class="attrib">(Edward Drapkin via Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3432">LUCENE-3432</a>: IndexWriter.expungeDeletes with TieredMergePolicy
+should ignore the maxMergedSegmentMB setting
+<br /><span class="attrib">(v.sevel via Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3442">LUCENE-3442</a>: TermQuery.TermWeight.scorer() returns null for non-atomic
+IndexReaders (optimization bug, introcuced by <a href="http://issues.apache.org/jira/browse/LUCENE-2829">LUCENE-2829</a>), preventing
+QueryWrapperFilter and similar classes to get a top-level DocIdSet.
+<br /><span class="attrib">(Dan C., Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3390">LUCENE-3390</a>: Corrected handling of missing values when two parallel searches
+using different missing values for sorting: the missing value was populated
+directly into the FieldCache arrays during sorting, leading to concurrency
+issues.
+<br /><span class="attrib">(Uwe Schindler, Doron Cohen, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3439">LUCENE-3439</a>: Closing an NRT reader after the writer was closed was
+incorrectly invoking the DeletionPolicy and (then possibly deleting
+files) on the closed IndexWriter
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3215">LUCENE-3215</a>: SloppyPhraseScorer sometimes computed Infinite freq
+<br /><span class="attrib">(Robert Muir, Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3465">LUCENE-3465</a>: IndexSearcher with ExecutorService was always passing 0
+for docBase to Collector.setNextReader.
+<br /><span class="attrib">(Robert Muir, Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3503">LUCENE-3503</a>: DisjunctionSumScorer would give slightly different scores
+for a document depending if you used nextDoc() versus advance().
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3529">LUCENE-3529</a>: Properly support indexing an empty field with empty term text.
+Previously, if you had assertions enabled you would receive an error during
+flush, if you didn't, you would get an invalid index.
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2633">LUCENE-2633</a>: PackedInts Packed32 and Packed64 did not support internal
+structures larger than 256MB
+<br /><span class="attrib">(Toke Eskildsen via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3540">LUCENE-3540</a>: <a href="http://issues.apache.org/jira/browse/LUCENE-3255">LUCENE-3255</a> dropped support for pre-1.9 indexes, but the
+error message in IndexFormatTooOldException was incorrect.
+<br /><span class="attrib">(Uwe Schindler,
+Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3541">LUCENE-3541</a>: IndexInput's default copyBytes() implementation was not safe
+across multiple threads, because all clones shared the same buffer.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3548">LUCENE-3548</a>: Fix CharsRef#append to extend length of the existing char[]
+and preserve existing chars.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3582">LUCENE-3582</a>: Normalize NaN values in NumericUtils.floatToSortableInt() /
+NumericUtils.doubleToSortableLong(), so this is consistent with stored
+fields. Also fix NumericRangeQuery to not falsely hit NaNs on half-open
+ranges (one bound is null). Because of normalization, NumericRangeQuery
+can now be used to hit NaN values by creating a query with
+upper == lower == NaN (inclusive).
+<br /><span class="attrib">(Dawid Weiss, Uwe Schindler)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.5.0.api_changes" href="javascript:toggleList('3.5.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(6)
+    <ol id="3.5.0.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3454">LUCENE-3454</a>: Rename IndexWriter.optimize to forceMerge to discourage
+use of this method since it is horribly costly and rarely justified
+anymore.  MergePolicy.findMergesForOptimize was renamed to
+findForcedMerges.  IndexReader.isOptimized was
+deprecated. IndexCommit.isOptimized was replaced with
+getSegmentCount.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3205">LUCENE-3205</a>: Deprecated MultiTermQuery.getTotalNumerOfTerms() [and
+related methods], as the numbers returned are not useful
+for multi-segment indexes. They were only needed for tests of
+NumericRangeQuery.
+<br /><span class="attrib">(Mike McCandless, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3574">LUCENE-3574</a>: Deprecate outdated constants in org.apache.lucene.util.Constants
+and add new ones for Java 6 and Java 7.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3571">LUCENE-3571</a>: Deprecate IndexSearcher(Directory). Use the constructors
+that take IndexReader instead.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3577">LUCENE-3577</a>: Rename IndexWriter.expungeDeletes to forceMergeDeletes,
+and revamped the javadocs, to discourage
+use of this method since it is horribly costly and rarely
+justified.  MergePolicy.findMergesToExpungeDeletes was renamed to
+findForcedDeletesMerges.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3464">LUCENE-3464</a>: IndexReader.reopen has been renamed to
+IndexReader.openIfChanged (a static method), and now returns null
+(instead of the old reader) if there are no changes in the index, to
+prevent the common pitfall of accidentally closing the old reader.
+<p/>
+</li>
+    </ol>
+  </li>
+  <li><a id="3.5.0.new_features" href="javascript:toggleList('3.5.0.new_features')">New Features</a>&nbsp;&nbsp;&nbsp;(4)
+    <ol id="3.5.0.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3448">LUCENE-3448</a>: Added FixedBitSet.and(other/DISI), andNot(other/DISI).
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2215">LUCENE-2215</a>: Added IndexSearcher.searchAfter which returns results after a
+specified ScoreDoc (e.g. last document on the previous page) to support deep
+paging use cases.
+<br /><span class="attrib">(Aaron McCurry, Grant Ingersoll, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1990">LUCENE-1990</a>: Adds internal packed ints implementation, to be used
+for more efficient storage of int arrays when the values are
+bounded, for example for storing the terms dict index
+<br /><span class="attrib">(Toke
+Eskildsen via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3558">LUCENE-3558</a>: Moved SearcherManager, NRTManager &amp; SearcherLifetimeManager into
+core. All classes are contained in o.a.l.search.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.5.0.optimizations" href="javascript:toggleList('3.5.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(5)
+    <ol id="3.5.0.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3426">LUCENE-3426</a>: Add NGramPhraseQuery which extends PhraseQuery and tries to
+reduce the number of terms of the query when rewrite(), in order to improve
+performance.
+<br /><span class="attrib">(Robert Muir, Koji Sekiguchi)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3494">LUCENE-3494</a>: Optimize FilteredQuery to remove a multiply in score()
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3534">LUCENE-3534</a>: Remove filter logic from IndexSearcher and delegate to
+FilteredQuery's Scorer. This is a partial backport of a cleanup in
+FilteredQuery/IndexSearcher added by <a href="http://issues.apache.org/jira/browse/LUCENE-1536">LUCENE-1536</a> to Lucene 4.0.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2205">LUCENE-2205</a>: Very substantial (3-5X) RAM reduction required to hold
+the terms index on opening an IndexReader
+<br /><span class="attrib">(Aaron McCurry via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3443">LUCENE-3443</a>: FieldCache can now set docsWithField, and create an
+array, in a single pass.  This results in faster init time for apps
+that need both (such as sorting by a field with a missing value).
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.5.0.test_cases" href="javascript:toggleList('3.5.0.test_cases')">Test Cases</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="3.5.0.test_cases.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3420">LUCENE-3420</a>: Disable the finalness checks in TokenStream and Analyzer
+for implementing subclasses in different packages, where assertions are not
+enabled.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3506">LUCENE-3506</a>: tests relying on assertions being enabled were no-op because
+they ignored AssertionError. With this fix now entire test framework
+(every test) fails if assertions are disabled, unless
+<ul class="bulleted-list">
+<li class="bulleted-list">
+Dtests.asserts.gracious=true is specified.
+</li>
+</ul>
+<br /><span class="attrib">(Doron Cohen)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.5.0.build" href="javascript:toggleList('3.5.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="3.5.0.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/SOLR-2849">SOLR-2849</a>: Fix dependencies in Maven POMs.
+<br /><span class="attrib">(David Smiley via Steve Rowe)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3561">LUCENE-3561</a>: Fix maven xxx-src.jar files that were missing resources.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+    </ol>
+  </li>
+</ul>
+<h2><a id="older" href="javascript:toggleList('older')">Older Releases</a></h2>
+<ul id="older.list">
+<h3><a id="3.4.0" href="javascript:toggleList('3.4.0')">Release 3.4.0  [2011-09-14]</a></h3>
+<ul id="3.4.0.list">
+  <li><a id="3.4.0.bug_fixes" href="javascript:toggleList('3.4.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(14)
+    <ol id="3.4.0.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3251">LUCENE-3251</a>: Directory#copy failed to close target output if opening the
+source stream failed.
+<br /><span class="attrib">(Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3255">LUCENE-3255</a>: If segments_N file is all zeros (due to file
+corruption), don't read that to mean the index is empty.
+<br /><span class="attrib">(Gregory
+Tarr, Mark Harwood, Simon Willnauer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3254">LUCENE-3254</a>: Fixed minor bug in deletes were written to disk,
+causing the file to sometimes be larger than it needed to be.
+<br /><span class="attrib">(Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3224">LUCENE-3224</a>: Fixed a big where CheckIndex would incorrectly report a
+corrupt index if a term with docfreq &gt;= 16 was indexed more than once
+at the same position.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3339">LUCENE-3339</a>: Fixed deadlock case when multiple threads use the new
+block-add (IndexWriter.add/updateDocuments) methods.
+<br /><span class="attrib">(Robert Muir,
+Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3340">LUCENE-3340</a>: Fixed case where IndexWriter was not flushing at
+exactly maxBufferedDeleteTerms
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3358">LUCENE-3358</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-3361">LUCENE-3361</a>: StandardTokenizer and UAX29URLEmailTokenizer
+wrongly discarded combining marks attached to Han or Hiragana characters,
+this is fixed if you supply Version &gt;= 3.4 If you supply a previous
+lucene version, you get the old buggy behavior for backwards compatibility.
+<br /><span class="attrib">(Trejkaz, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3368">LUCENE-3368</a>: IndexWriter commits segments without applying their buffered
+deletes when flushing concurrently.
+<br /><span class="attrib">(Simon Willnauer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3365">LUCENE-3365</a>: Create or Append mode determined before obtaining write lock
+can cause IndexWriter overriding an existing index.
+<br /><span class="attrib">(Geoff Cooney via Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3380">LUCENE-3380</a>: Fixed a bug where FileSwitchDirectory's listAll() would wrongly
+throw NoSuchDirectoryException when all files written so far have been
+written to one directory, but the other still has not yet been created on the
+filesystem.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3402">LUCENE-3402</a>: term vectors disappeared from the index if optimize() was called
+following addIndexes().
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3409">LUCENE-3409</a>: IndexWriter.deleteAll was failing to close pooled NRT
+SegmentReaders, leading to unused files accumulating in the
+Directory.
+<br /><span class="attrib">(tal steier via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3390">LUCENE-3390</a>: Added SortField.setMissingValue(v) to enable well defined
+sorting behavior for documents that do not include the given field.
+<br /><span class="attrib">(Gilad Barkai via Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3418">LUCENE-3418</a>: Lucene was failing to fsync index files on commit,
+meaning an operating system or hardware crash, or power loss, could
+easily corrupt the index.
+<br /><span class="attrib">(Mark Miller, Robert Muir, Mike
+McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.4.0.new_features" href="javascript:toggleList('3.4.0.new_features')">New Features</a>&nbsp;&nbsp;&nbsp;(5)
+    <ol id="3.4.0.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3290">LUCENE-3290</a>: Added FieldInvertState.numUniqueTerms
+<br /><span class="attrib">(Mike McCandless, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3280">LUCENE-3280</a>: Add FixedBitSet, like OpenBitSet but is not elastic
+(grow on demand if you set/get/clear too-large indices).
+<br /><span class="attrib">(Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2048">LUCENE-2048</a>: Added the ability to omit positions but still index
+term frequencies, you can now control what is indexed into
+the postings via AbstractField.setIndexOptions:
+ DOCS_ONLY: only documents are indexed: term frequencies and positions are omitted
+ DOCS_AND_FREQS: only documents and term frequencies are indexed: positions are omitted
+ DOCS_AND_FREQS_AND_POSITIONS: full postings: documents, frequencies, and positions
+AbstractField.setOmitTermFrequenciesAndPositions is deprecated,
+you should use DOCS_ONLY instead.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3097">LUCENE-3097</a>: Added a new grouping collector that can be used to retrieve all most relevant
+documents per group. This can be useful in situations when one wants to compute grouping
+based facets / statistics on the complete query result.
+<br /><span class="attrib">(Martijn van Groningen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3334">LUCENE-3334</a>: If Java7 is detected, IOUtils.closeSafely() will log
+suppressed exceptions in the original exception, so stack trace
+will contain them.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.4.0.optimizations" href="javascript:toggleList('3.4.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="3.4.0.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3289">LUCENE-3289</a>: When building an FST you can now tune how aggressively
+the FST should try to share common suffixes.  Typically you can
+greatly reduce RAM required during building, and CPU consumed, at
+the cost of a somewhat larger FST.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.4.0.test_cases" href="javascript:toggleList('3.4.0.test_cases')">Test Cases</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="3.4.0.test_cases.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3327">LUCENE-3327</a>: Fix AIOOBE when TestFSTs is run with
+<ul class="bulleted-list">
+<li class="bulleted-list">
+Dtests.verbose=true
+</li>
+</ul>
+<br /><span class="attrib">(James Dyer via Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.4.0.build" href="javascript:toggleList('3.4.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="3.4.0.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3406">LUCENE-3406</a>: Add ant target 'package-local-src-tgz' to Lucene and Solr
+to package sources from the local working copy.
+<br /><span class="attrib">(Seung-Yeoul Yang via Steve Rowe)</span></li>
+    </ol>
+  </li>
+</ul>
+<h3><a id="3.3.0" href="javascript:toggleList('3.3.0')">Release 3.3.0  [2011-07-01]</a></h3>
+<ul id="3.3.0.list">
+  <li><a id="3.3.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('3.3.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(4)
+    <ol id="3.3.0.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3140">LUCENE-3140</a>: IndexOutput.copyBytes now takes a DataInput (superclass
+of IndexInput) as its first argument.
+<br /><span class="attrib">(Robert Muir, Dawid Weiss,
+Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3191">LUCENE-3191</a>: FieldComparator.value now returns an Object not
+Comparable; FieldDoc.fields also changed from Comparable[] to
+Object[]
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3208">LUCENE-3208</a>: Made deprecated methods Query.weight(Searcher) and
+Searcher.createWeight() final to prevent override. If you have
+overridden one of these methods, cut over to the non-deprecated
+implementation.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Yonik Seeley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3238">LUCENE-3238</a>: Made MultiTermQuery.rewrite() final, to prevent
+problems (such as not properly setting rewrite methods, or
+not working correctly with things like SpanMultiTermQueryWrapper).
+To rewrite to a simpler form, instead return a simpler enum
+from getEnum(IndexReader). For example, to rewrite to a single term,
+return a SingleTermEnum.
+<br /><span class="attrib">(ludovic Boutros, Uwe Schindler, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.3.0.changes_in_runtime_behavior" href="javascript:toggleList('3.3.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(4)
+    <ol id="3.3.0.changes_in_runtime_behavior.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2834">LUCENE-2834</a>: the hash used to compute the lock file name when the
+lock file is not stored in the index has changed.  This means you
+will see a different lucene-XXX-write.lock in your lock directory.
+<br /><span class="attrib">(Robert Muir, Uwe Schindler, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3146">LUCENE-3146</a>: IndexReader.setNorm throws IllegalStateException if the field
+does not store norms.
+<br /><span class="attrib">(Shai Erera, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3198">LUCENE-3198</a>: On Linux, if the JRE is 64 bit and supports unmapping,
+FSDirectory.open now defaults to MMapDirectory instead of
+NIOFSDirectory since MMapDirectory gives better performance.
+<br /><span class="attrib">(Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3200">LUCENE-3200</a>: MMapDirectory now uses chunk sizes that are powers of 2.
+When setting the chunk size, it is rounded down to the next possible
+value. The new default value for 64 bit platforms is 2^30 (1 GiB),
+for 32 bit platforms it stays unchanged at 2^28 (256 MiB).
+Internally, MMapDirectory now only uses one dedicated final IndexInput
+implementation supporting multiple chunks, which makes Hotspot's life
+easier.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.3.0.bug_fixes" href="javascript:toggleList('3.3.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(7)
+    <ol id="3.3.0.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3147">LUCENE-3147</a>,<a href="http://issues.apache.org/jira/browse/LUCENE-3152">LUCENE-3152</a>: Fixed open file handles leaks in many places in the
+code. Now MockDirectoryWrapper (in test-framework) tracks all open files,
+including locks, and fails if the test fails to release all of them.
+<br /><span class="attrib">(Mike McCandless, Robert Muir, Shai Erera, Simon Willnauer)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3102">LUCENE-3102</a>: CachingCollector.replay was failing to call setScorer
+per-segment
+<br /><span class="attrib">(Martijn van Groningen via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3183">LUCENE-3183</a>: Fix rare corner case where seeking to empty term
+(field="", term="") with terms index interval 1 could hit
+ArrayIndexOutOfBoundsException
+<br /><span class="attrib">(selckin, Robert Muir, Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3208">LUCENE-3208</a>: IndexSearcher had its own private similarity field
+and corresponding get/setter overriding Searcher's implementation. If you
+setted a different Similarity instance on IndexSearcher, methods implemented
+in the superclass Searcher were not using it, leading to strange bugs.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3197">LUCENE-3197</a>: Fix core merge policies to not over-merge during
+background optimize when documents are still being deleted
+concurrently with the optimize
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3222">LUCENE-3222</a>: The RAM accounting for buffered delete terms was
+failing to measure the space required to hold the term's field and
+text character data.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3238">LUCENE-3238</a>: Fixed bug where using WildcardQuery("prefix*") inside
+of a SpanMultiTermQueryWrapper rewrote incorrectly and returned
+an error instead.
+<br /><span class="attrib">(ludovic Boutros, Uwe Schindler, Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.3.0.api_changes" href="javascript:toggleList('3.3.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="3.3.0.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3208">LUCENE-3208</a>: Renamed protected IndexSearcher.createWeight() to expert
+public method IndexSearcher.createNormalizedWeight() as this better describes
+what this method does. The old method is still there for backwards
+compatibility. Query.weight() was deprecated and simply delegates to
+IndexSearcher. Both deprecated methods will be removed in Lucene 4.0.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Yonik Seeley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3197">LUCENE-3197</a>: MergePolicy.findMergesForOptimize now takes
+Map&lt;SegmentInfo,Boolean&gt; instead of Set&lt;SegmentInfo&gt; as the second
+argument, so the merge policy knows which segments were originally
+present vs produced by an optimizing merge
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.3.0.optimizations" href="javascript:toggleList('3.3.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="3.3.0.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1736">LUCENE-1736</a>: DateTools.java general improvements.
+<br /><span class="attrib">(David Smiley via Steve Rowe)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.3.0.new_features" href="javascript:toggleList('3.3.0.new_features')">New Features</a>&nbsp;&nbsp;&nbsp;(5)
+    <ol id="3.3.0.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3140">LUCENE-3140</a>: Added experimental FST implementation to Lucene.
+<br /><span class="attrib">(Robert Muir, Dawid Weiss, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3193">LUCENE-3193</a>: A new TwoPhaseCommitTool allows running a 2-phase commit
+algorithm over objects that implement the new TwoPhaseCommit interface (such
+as IndexWriter).
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3191">LUCENE-3191</a>: Added TopDocs.merge, to facilitate merging results from
+different shards
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3179">LUCENE-3179</a>: Added OpenBitSet.prevSetBit
+<br /><span class="attrib">(Paul Elschot via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3210">LUCENE-3210</a>: Made TieredMergePolicy more aggressive in reclaiming
+segments with deletions; added new methods
+set/getReclaimDeletesWeight to control this.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.3.0.build" href="javascript:toggleList('3.3.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="3.3.0.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1344">LUCENE-1344</a>: Create OSGi bundle using dev-tools/maven.
+<br /><span class="attrib">(Nicolas Lalevée, Luca Stancapiano via ryan)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3204">LUCENE-3204</a>: The maven-ant-tasks jar is now included in the source tree;
+users of the generate-maven-artifacts target no longer have to manually
+place this jar in the Ant classpath.  NOTE: when Ant looks for the
+maven-ant-tasks jar, it looks first in its pre-existing classpath, so
+any copies it finds will be used instead of the copy included in the
+Lucene/Solr source tree.  For this reason, it is recommeded to remove
+any copies of the maven-ant-tasks jar in the Ant classpath, e.g. under
+~/.ant/lib/ or under the Ant installation's lib/ directory.
+<br /><span class="attrib">(Steve Rowe)</span></li>
+    </ol>
+  </li>
+</ul>
+<h3><a id="3.2.0" href="javascript:toggleList('3.2.0')">Release 3.2.0  [2011-06-03]</a></h3>
+<ul id="3.2.0.list">
+  <li><a id="3.2.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('3.2.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(3)
+    <ol id="3.2.0.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2953">LUCENE-2953</a>: PriorityQueue's internal heap was made private, as subclassing
+with generics can lead to ClassCastException. For advanced use (e.g. in Solr)
+a method getHeapArray() was added to retrieve the internal heap array as a
+non-generic Object[].
+<br /><span class="attrib">(Uwe Schindler, Yonik Seeley)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1076">LUCENE-1076</a>: IndexWriter.setInfoStream now throws IOException
+<br /><span class="attrib">(Mike McCandless, Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3084">LUCENE-3084</a>: MergePolicy.OneMerge.segments was changed from
+SegmentInfos to a List&lt;SegmentInfo&gt;. SegmentInfos itsself was changed
+to no longer extend Vector&lt;SegmentInfo&gt; (to update code that is using
+Vector-API, use the new asList() and asSet() methods returning unmodifiable
+collections; modifying SegmentInfos is now only possible through
+the explicitely declared methods). IndexWriter.segString() now takes
+Iterable&lt;SegmentInfo&gt; instead of List&lt;SegmentInfo&gt;. A simple recompile
+should fix this. MergePolicy and SegmentInfos are internal/experimental
+APIs not covered by the strict backwards compatibility policy.
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.2.0.changes_in_runtime_behavior" href="javascript:toggleList('3.2.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="3.2.0.changes_in_runtime_behavior.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3065">LUCENE-3065</a>: When a NumericField is retrieved from a Document loaded
+from IndexReader (or IndexSearcher), it will now come back as
+NumericField not as a Field with a string-ified version of the
+numeric value you had indexed.  Note that this only applies for
+newly-indexed Documents; older indices will still return Field
+with the string-ified numeric value. If you call Document.get(),
+the value comes still back as String, but Document.getFieldable()
+returns NumericField instances.
+<br /><span class="attrib">(Uwe Schindler, Ryan McKinley,
+Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1076">LUCENE-1076</a>: Changed the default merge policy from
+LogByteSizeMergePolicy to TieredMergePolicy, as of Version.LUCENE_32
+(passed to IndexWriterConfig), which is able to merge non-contiguous
+segments. This means docIDs no longer necessarily stay "in order"
+during indexing.  If this is a problem then you can use either of
+the LogMergePolicy impls.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.2.0.new_features" href="javascript:toggleList('3.2.0.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(5)
+    <ol id="3.2.0.new_features.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3082">LUCENE-3082</a>: Added index upgrade tool oal.index.IndexUpgrader
+that allows to upgrade all segments to last recent supported index
+format without fully optimizing.
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1076">LUCENE-1076</a>: Added TieredMergePolicy which is able to merge non-contiguous
+segments, which means docIDs no longer necessarily stay "in order".
+<br /><span class="attrib">(Mike McCandless, Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3071">LUCENE-3071</a>: Adding ReversePathHierarchyTokenizer, added skip parameter to
+PathHierarchyTokenizer
+<br /><span class="attrib">(Olivier Favre via ryan)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1421">LUCENE-1421</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-3102">LUCENE-3102</a>: added CachingCollector which allow you to cache
+document IDs and scores encountered during the search, and "replay" them to
+another Collector.
+<br /><span class="attrib">(Mike McCandless, Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3112">LUCENE-3112</a>: Added experimental IndexWriter.add/updateDocuments,
+enabling a block of documents to be indexed, atomically, with
+guaranteed sequential docIDs.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.2.0.api_changes" href="javascript:toggleList('3.2.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(3)
+    <ol id="3.2.0.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3061">LUCENE-3061</a>: IndexWriter's getNextMerge() and merge(OneMerge) are now public
+(though @lucene.experimental), allowing for custom MergeScheduler
+implementations.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3065">LUCENE-3065</a>: Document.getField() was deprecated, as it throws
+ClassCastException when loading lazy fields or NumericFields.
+<br /><span class="attrib">(Uwe Schindler, Ryan McKinley, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2027">LUCENE-2027</a>: Directory.touchFile is deprecated and will be removed
+in 4.0.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.2.0.optimizations" href="javascript:toggleList('3.2.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(3)
+    <ol id="3.2.0.optimizations.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2990">LUCENE-2990</a>: ArrayUtil/CollectionUtil.*Sort() methods now exit early
+on empty or one-element lists/arrays.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2897">LUCENE-2897</a>: Apply deleted terms while flushing a segment.  We still
+buffer deleted terms to later apply to past segments.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3126">LUCENE-3126</a>: IndexWriter.addIndexes copies incoming segments into CFS if they
+aren't already and MergePolicy allows that.
+<br /><span class="attrib">(Shai Erera)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.2.0.bug_fixes" href="javascript:toggleList('3.2.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(6)
+    <ol id="3.2.0.bug_fixes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2996">LUCENE-2996</a>: addIndexes(IndexReader) did not flush before adding the new
+indexes, causing existing deletions to be applied on the incoming indexes as
+well.
+<br /><span class="attrib">(Shai Erera, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3024">LUCENE-3024</a>: Index with more than 2.1B terms was hitting AIOOBE when
+seeking TermEnum (eg used by Solr's faceting)
+<br /><span class="attrib">(Tom Burton-West, Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3042">LUCENE-3042</a>: When a filter or consumer added Attributes to a TokenStream
+chain after it was already (partly) consumed [or clearAttributes(),
+captureState(), cloneAttributes(),... was called by the Tokenizer],
+the Tokenizer calling clearAttributes() or capturing state after addition
+may not do this on the newly added Attribute. This bug affected only
+very special use cases of the TokenStream-API, most users would not
+have recognized it.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3054">LUCENE-3054</a>: PhraseQuery can in some cases stack overflow in
+SorterTemplate.quickSort(). This fix also adds an optimization to
+PhraseQuery as term with lower doc freq will also have less positions.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Otis Gospodnetic)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3068">LUCENE-3068</a>: sloppy phrase query failed to match valid documents when multiple
+query terms had same position in the query.
+<br /><span class="attrib">(Doron Cohen)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3012">LUCENE-3012</a>: Lucene writes the header now for separate norm files (*.sNNN)
+<br /><span class="attrib">(Robert Muir)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.2.0.build" href="javascript:toggleList('3.2.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(2)
+    <ol id="3.2.0.build.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3006">LUCENE-3006</a>: Building javadocs will fail on warnings by default.
+Override with -Dfailonjavadocwarning=false
+<br /><span class="attrib">(sarowe, gsingers)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3128">LUCENE-3128</a>: "ant eclipse" creates a .project file for easier Eclipse
+integration (unless one already exists).
+<br /><span class="attrib">(Daniel Serodio via Shai Erera)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.2.0.test_cases" href="javascript:toggleList('3.2.0.test_cases')">Test Cases</a>&nbsp;&nbsp;&nbsp;(1)
+    <ol id="3.2.0.test_cases.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-3002">LUCENE-3002</a>: added 'tests.iter.min' to control 'tests.iter' by allowing to
+stop iterating if at least 'tests.iter.min' ran and a failure occured.
+<br /><span class="attrib">(Shai Erera, Chris Hostetter)</span></li>
+    </ol>
+  </li>
+</ul>
+<h3><a id="3.1.0" href="javascript:toggleList('3.1.0')">Release 3.1.0  [2011-03-31]</a></h3>
+<ul id="3.1.0.list">
+  <li><a id="3.1.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('3.1.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(18)
+    <ol id="3.1.0.changes_in_backwards_compatibility_policy.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2719">LUCENE-2719</a>: Changed API of internal utility class
+org.apache.lucene.util.SorterTemplate to support faster quickSort using
+pivot values and also merge sort and insertion sort. If you have used
+this class, you have to implement two more methods for handling pivots.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1923">LUCENE-1923</a>: Renamed SegmentInfo &amp; SegmentInfos segString method to
+toString.  These are advanced APIs and subject to change suddenly.
+<br /><span class="attrib">(Tim Smith via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2190">LUCENE-2190</a>: Removed deprecated customScore() and customExplain()
+methods from experimental CustomScoreQuery.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2286">LUCENE-2286</a>: Enabled DefaultSimilarity.setDiscountOverlaps by default.
+This means that terms with a position increment gap of zero do not
+affect the norms calculation by default.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2320">LUCENE-2320</a>: MergePolicy.writer is now of type SetOnce, which allows setting
+the IndexWriter for a MergePolicy exactly once. You can change references to
+'writer' from <code>writer.doXYZ()</code> to <code>writer.get().doXYZ()</code>
+(it is also advisable to add an <code>assert writer != null;</code> before you
+access the wrapped IndexWriter.)
+<p/>
+In addition, MergePolicy only exposes a default constructor, and the one that
+took IndexWriter as argument has been removed from all MergePolicy extensions.
+<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2328">LUCENE-2328</a>: SimpleFSDirectory.SimpleFSIndexInput is moved to
+FSDirectory.FSIndexInput. Anyone extending this class will have to
+fix their code on upgrading.
+<br /><span class="attrib">(Earwin Burrfoot via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2302">LUCENE-2302</a>: The new interface for term attributes, CharTermAttribute,
+now implements CharSequence. This requires the toString() methods of
+CharTermAttribute, deprecated TermAttribute, and Token to return only
+the term text and no other attribute contents. <a href="http://issues.apache.org/jira/browse/LUCENE-2374">LUCENE-2374</a> implements
+an attribute reflection API to no longer rely on toString() for attribute
+inspection.
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2372">LUCENE-2372</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2389">LUCENE-2389</a>: StandardAnalyzer, KeywordAnalyzer,
+PerFieldAnalyzerWrapper, WhitespaceTokenizer are now final.  Also removed
+the now obsolete and deprecated Analyzer.setOverridesTokenStreamMethod().
+Analyzer and TokenStream base classes now have an assertion in their ctor,
+that check subclasses to be final or at least have final implementations
+of incrementToken(), tokenStream(), and reusableTokenStream().
+<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2316">LUCENE-2316</a>: Directory.fileLength contract was clarified - it returns the
+actual file's length if the file exists, and throws FileNotFoundException
+otherwise. Returning length=0 for a non-existent file is no longer allowed. If
+you relied on that, make sure to catch the exception.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2386">LUCENE-2386</a>: IndexWriter no longer performs an empty commit upon new index
+creation. Previously, if you passed an empty Directory and set OpenMode to
+CREATE*, IndexWriter would make a first empty commit. If you need that
+behavior you can call writer.commit()/close() immediately after you create it.
+<br /><span class="attrib">(Shai Erera, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2733">LUCENE-2733</a>: Removed public constructors of utility classes with only static
+methods to prevent instantiation.
+<br /><span class="attrib">(Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2602">LUCENE-2602</a>: The default (LogByteSizeMergePolicy) merge policy now
+takes deletions into account by default.  You can disable this by
+calling setCalibrateSizeByDeletes(false) on the merge policy.
+<br /><span class="attrib">(Mike
+McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2529">LUCENE-2529</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2668">LUCENE-2668</a>: Position increment gap and offset gap of empty
+values in multi-valued field has been changed for some cases in index.
+If you index empty fields and uses positions/offsets information on that
+fields, reindex is recommended.
+<br /><span class="attrib">(David Smiley, Koji Sekiguchi)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2804">LUCENE-2804</a>: Directory.setLockFactory new declares throwing an IOException.
+<br /><span class="attrib">(Shai Erera, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2837">LUCENE-2837</a>: Added deprecations noting that in 4.0, Searcher and
+Searchable are collapsed into IndexSearcher; contrib/remote and
+MultiSearcher have been removed.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2854">LUCENE-2854</a>: Deprecated SimilarityDelegator and
+Similarity.lengthNorm; the latter is now final, forcing any custom
+Similarity impls to cutover to the more general computeNorm
+<br /><span class="attrib">(Robert
+Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2869">LUCENE-2869</a>: Deprecated Query.getSimilarity: instead of using
+"runtime" subclassing/delegation, subclass the Weight instead.
+<br /><span class="attrib">(Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2674">LUCENE-2674</a>: A new idfExplain method was added to Similarity, that
+accepts an incoming docFreq.  If you subclass Similarity, make sure
+you also override this method on upgrade.
+<br /><span class="attrib">(Robert Muir, Mike
+McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.1.0.changes_in_runtime_behavior" href="javascript:toggleList('3.1.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(13)
+    <ol id="3.1.0.changes_in_runtime_behavior.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1923">LUCENE-1923</a>: Made IndexReader.toString() produce something
+meaningful
+<br /><span class="attrib">(Tim Smith via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2179">LUCENE-2179</a>: CharArraySet.clear() is now functional.
+<br /><span class="attrib">(Robert Muir, Uwe Schindler)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2455">LUCENE-2455</a>: IndexWriter.addIndexes no longer optimizes the target index
+before it adds the new ones. Also, the existing segments are not merged and so
+the index will not end up with a single segment (unless it was empty before).
+In addition, addIndexesNoOptimize was renamed to addIndexes and no longer
+invokes a merge on the incoming and target segments, but instead copies the
+segments to the target index. You can call maybeMerge or optimize after this
+method completes, if you need to.
+<p/>
+In addition, Directory.copyTo* were removed in favor of copy which takes the
+target Directory, source and target files as arguments, and copies the source
+file to the target Directory under the target file name.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2663">LUCENE-2663</a>: IndexWriter no longer forcefully clears any existing
+locks when create=true.  This was a holdover from when
+SimpleFSLockFactory was the default locking implementation, and,
+even then it was dangerous since it could mask bugs in IndexWriter's
+usage, allowing applications to accidentally open two writers on the
+same directory.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2701">LUCENE-2701</a>: maxMergeMBForOptimize and maxMergeDocs constraints set on
+LogMergePolicy now affect optimize() as well (as opposed to only regular
+merges). This means that you can run optimize() and too large segments won't
+be merged.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2753">LUCENE-2753</a>: IndexReader and DirectoryReader .listCommits() now return a List,
+guaranteeing the commits are sorted from oldest to latest.
+<br /><span class="attrib">(Shai Erera)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2785">LUCENE-2785</a>: TopScoreDocCollector, TopFieldCollector and
+the IndexSearcher search methods that take an int nDocs will now
+throw IllegalArgumentException if nDocs is 0.  Instead, you should
+use the newly added TotalHitCountCollector.
+<br /><span class="attrib">(Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2790">LUCENE-2790</a>: LogMergePolicy.useCompoundFile's logic now factors in noCFSRatio
+to determine whether the passed in segment should be compound.
+<br /><span class="attrib">(Shai Erera, Earwin Burrfoot)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2805">LUCENE-2805</a>: IndexWriter now increments the index version on every change to
+the index instead of for every commit. Committing or closing the IndexWriter
+without any changes to the index will not cause any index version increment.
+<br /><span class="attrib">(Simon Willnauer, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2650">LUCENE-2650</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2825">LUCENE-2825</a>: The behavior of FSDirectory.open has changed. On 64-bit
+Windows and Solaris systems that support unmapping, FSDirectory.open returns
+MMapDirectory. Additionally the behavior of MMapDirectory has been
+changed to enable unmapping by default if supported by the JRE.
+<br /><span class="attrib">(Mike McCandless, Uwe Schindler, Robert Muir)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2829">LUCENE-2829</a>: Improve the performance of "primary key" lookup use
+case (running a TermQuery that matches one document) on a
+multi-segment index.
+<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2010">LUCENE-2010</a>: Segments with 100% deleted documents are now removed on
+IndexReader or IndexWriter commit.
+<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2960">LUCENE-2960</a>: Allow some changes to IndexWriterConfig to take effect
+"live" (after an IW is instantiated), via
+IndexWriter.getConfig().setXXX(...)
+<br /><span class="attrib">(Shay Banon, Mike McCandless)</span></li>
+    </ol>
+  </li>
+  <li><a id="3.1.0.api_changes" href="javascript:toggleList('3.1.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(26)
+    <ol id="3.1.0.api_changes.list">
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2076">LUCENE-2076</a>: Rename FSDirectory.getFile -&gt; getDirectory.
+<br /><span class="attrib">(George
+Aroush via Mike McCandless)</span></li>
+      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1260">LUCENE-1260</a>: Change norm encode (float-&gt;byte) and decode
+(byte-&gt;float) to be instance methods not static methods.  This way a

[... 5067 lines stripped ...]