The Lucene PMC is pleased to announce the release of Apache Lucene 3.1. This release contains numerous bug fixes, optimizations, and improvements, some of which are highlighted below. The release is available for immediate download at http://www.apache.org/dyn/closer.cgi/lucene/java (see note below). See the CHANGES.txt file included with the release for a full list of details. Lucene 3.1 Release Highlights * Numerous performance improvements: faster exact PhraseQuery; merging favors segments with deletions; primary key lookup is faster; IndexWriter.addIndexes(Directory) uses file copy instead of merging; various Directory performance improvements; compound file is dynamically turned off for large segments; fully deleted segments are dropped on commit; faster snowball analyzers (in contrib); ConcurrentMergeScheduler is more careful about setting priority of merge threads. * ReusableAnalyzerBase makes it easier to reuse TokenStreams correctly. * Improved Analysis capabilities: Improved Unicode support, including Unicode 4, more friendly term handling (CharTermAttribute), easier object reuse and better support for protected words in lossy token filters (e.g. stemmers). * ConstantScoreQuery now allows directly wrapping a Query. * IndexWriter is now configured with a new separate builder API, IndexWriterConfig. You can now control IndexWriter's previously fixed internal thread limit by calling setMaxThreadStates. * IndexWriter.getReader is replaced by IndexReader.open(IndexWriter). In addition you can now specify whether deletes should be resolved when you open an NRT reader. * MultiSearcher is deprecated; ParallelMultiSearcher has been absorbed directly into IndexSearcher. * On 64bit Windows and Solaris JVMs, MMapDirectory is now the default implementation (returned by FSDirectory.open). MMapDirectory also enables unmapping if the JVM supports it. * New TotalHitCountCollector just counts total number of hits. * ReaderFinishedListener API enables external caches to evict entries once a segment is finished.