blob: 140466e51ed46b94f226b825a66225ec9c1c4305 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Lucene.NET 4.8.0-beta00014 Release Notes | Apache Lucene.NET 4.8.0 </title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Lucene.NET 4.8.0-beta00014 Release Notes | Apache Lucene.NET 4.8.0 ">
<meta name="generator" content="docfx 2.58.0.0">
<link rel="shortcut icon" href="../logo/favicon.ico">
<link rel="stylesheet" href="../styles/docfx.vendor.css">
<link rel="stylesheet" href="../styles/docfx.css">
<link rel="stylesheet" href="../styles/main.css">
<meta property="docfx:navrel" content="../toc.html">
<meta property="docfx:tocrel" content="../toc.html">
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:400,700%7CMerriweather%7CRoboto+Mono">
<link rel="stylesheet" href="/styles/site.css">
</head>
<body data-spy="scroll" data-target="#affix" data-offset="120">
<span id="forkongithub"><a href="https://github.com/apache/lucenenet" target="_blank">Fork me on GitHub</a></span>
<div id="wrapper">
<header>
<nav id="autocollapse" class="navbar ng-scope" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../logo/lucene-net-color.png" alt="">
</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<form class="navbar-form navbar-right" role="search" id="search">
<div class="form-group">
<input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
</div>
</form>
</div>
</div>
</nav>
<div class="subnav navbar navbar-default">
<div class="container hide-when-search" id="breadcrumb">
<ul class="breadcrumb">
<li></li>
</ul>
</div>
</div>
</header>
<div role="main" class="container body-content hide-when-search">
<div class="article row grid">
<div class="col-md-10">
<article class="content wrap" id="_content" data-uid="releasenotes/4.8.0-beta00014">
<h1 id="lucenenet-480-beta00014-release-notes">Lucene.NET 4.8.0-beta00014 Release Notes</h1>
<hr>
<blockquote>
<p>This release contains bug fixes and minor performance improvements</p>
</blockquote>
<h2 id="known-issues">Known Issues</h2>
<ul>
<li><p>The <code>lucene-cli</code> tool requires an <code>appsettings.json</code> file, but none was shipped. Upon running <code>lucene</code> on the command line, the following error will be presented:</p>
<pre><code>F:\Projects\lucenenet&gt;lucene
Unhandled exception. System.IO.FileNotFoundException: The configuration file 'appsettings.json' was not found and is not optional. The physical path is 'C:\Users\shad\.dotnet\tools\.store\lucene-cli\4.8.0-beta00010\lucene-cli\4.8.0-beta00010\tools\netcoreapp3.1\any\appsettings.json'.
at Microsoft.Extensions.Configuration.FileConfigurationProvider.HandleException(ExceptionDispatchInfo info)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at Lucene.Net.Cli.Program.Main(String[] args) in D:\a\1\s\src\dotnet\tools\lucene-cli\Program.cs:line 27
</code></pre>
<p>Adding a text file named <code>appsettings.json</code> to the location specified in the error message with opening and closing brackets will prevent the exception.</p>
<h4 id="appsettingsjson">appsettings.json</h4>
<pre><code>{
}
</code></pre>
<blockquote>
<p>IMPORTANT: There must be at least opening and closing curly brackets in the file, or it won't be parsed as valid JSON.</p>
</blockquote>
</li>
</ul>
<h2 id="benchmarks-from-310">Benchmarks (from <a href="https://github.com/apache/lucenenet/pull/310">#310</a>)</h2>
<h4 id="index-files">Index Files</h4>
<details>
<summary>Click to expand</summary>
<pre><code class="lang-ini">
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.867 (2004/?/20H1)
Intel Core i7-8850H CPU 2.60GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=5.0.104
[Host] : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00005 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00006 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00007 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00008 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00009 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00010 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00011 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00012 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00013 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00014 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
InvocationCount=1 IterationCount=15 LaunchCount=2
UnrollFactor=1 WarmupCount=10
</code></pre>
<table>
<thead>
<tr>
<th>Method</th>
<th>Job</th>
<th style="text-align: right;">Mean</th>
<th style="text-align: right;">Error</th>
<th style="text-align: right;">StdDev</th>
<th style="text-align: right;">Gen 0</th>
<th style="text-align: right;">Gen 1</th>
<th style="text-align: right;">Gen 2</th>
<th style="text-align: right;">Allocated</th>
</tr>
</thead>
<tbody>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00005</td>
<td style="text-align: right;">905.6 ms</td>
<td style="text-align: right;">131.82 ms</td>
<td style="text-align: right;">197.30 ms</td>
<td style="text-align: right;">43000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">220.99 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00006</td>
<td style="text-align: right;">707.1 ms</td>
<td style="text-align: right;">18.57 ms</td>
<td style="text-align: right;">26.04 ms</td>
<td style="text-align: right;">44000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">220.99 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00007</td>
<td style="text-align: right;">712.2 ms</td>
<td style="text-align: right;">16.45 ms</td>
<td style="text-align: right;">23.06 ms</td>
<td style="text-align: right;">44000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">221.04 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00008</td>
<td style="text-align: right;">785.7 ms</td>
<td style="text-align: right;">17.37 ms</td>
<td style="text-align: right;">25.46 ms</td>
<td style="text-align: right;">44000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">221.54 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00009</td>
<td style="text-align: right;">824.9 ms</td>
<td style="text-align: right;">32.86 ms</td>
<td style="text-align: right;">48.17 ms</td>
<td style="text-align: right;">44000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">221.34 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00010</td>
<td style="text-align: right;">789.6 ms</td>
<td style="text-align: right;">16.40 ms</td>
<td style="text-align: right;">24.04 ms</td>
<td style="text-align: right;">44000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">221.35 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00011</td>
<td style="text-align: right;">805.4 ms</td>
<td style="text-align: right;">21.26 ms</td>
<td style="text-align: right;">31.82 ms</td>
<td style="text-align: right;">44000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">221.37 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00012</td>
<td style="text-align: right;">827.8 ms</td>
<td style="text-align: right;">13.95 ms</td>
<td style="text-align: right;">20.89 ms</td>
<td style="text-align: right;">56000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">6000.0000</td>
<td style="text-align: right;">287.03 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00013</td>
<td style="text-align: right;">793.6 ms</td>
<td style="text-align: right;">13.63 ms</td>
<td style="text-align: right;">19.55 ms</td>
<td style="text-align: right;">44000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">220.22 MB</td>
</tr>
<tr>
<td>IndexFiles</td>
<td>4.8.0-beta00014</td>
<td style="text-align: right;">812.0 ms</td>
<td style="text-align: right;">21.97 ms</td>
<td style="text-align: right;">30.79 ms</td>
<td style="text-align: right;">44000.0000</td>
<td style="text-align: right;">8000.0000</td>
<td style="text-align: right;">7000.0000</td>
<td style="text-align: right;">220.29 MB</td>
</tr>
</tbody>
</table>
</details>
<h4 id="search-files">Search Files</h4>
<details>
<summary>Click to expand</summary>
<pre><code class="lang-ini">
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.867 (2004/?/20H1)
Intel Core i7-8850H CPU 2.60GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=5.0.104
[Host] : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00005 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00006 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00007 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00008 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00009 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00010 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00011 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00012 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00013 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
4.8.0-beta00014 : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT
IterationCount=15 LaunchCount=2 WarmupCount=10
</code></pre>
<table>
<thead>
<tr>
<th>Method</th>
<th>Job</th>
<th style="text-align: right;">Mean</th>
<th style="text-align: right;">Error</th>
<th style="text-align: right;">StdDev</th>
<th style="text-align: right;">Median</th>
<th style="text-align: right;">Gen 0</th>
<th style="text-align: right;">Gen 1</th>
<th style="text-align: right;">Gen 2</th>
<th style="text-align: right;">Allocated</th>
</tr>
</thead>
<tbody>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00005</td>
<td style="text-align: right;">421.1 ms</td>
<td style="text-align: right;">111.47 ms</td>
<td style="text-align: right;">163.38 ms</td>
<td style="text-align: right;">326.3 ms</td>
<td style="text-align: right;">18000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">82.11 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00006</td>
<td style="text-align: right;">349.8 ms</td>
<td style="text-align: right;">24.03 ms</td>
<td style="text-align: right;">35.97 ms</td>
<td style="text-align: right;">338.9 ms</td>
<td style="text-align: right;">18000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">82.11 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00007</td>
<td style="text-align: right;">333.6 ms</td>
<td style="text-align: right;">17.36 ms</td>
<td style="text-align: right;">25.98 ms</td>
<td style="text-align: right;">336.8 ms</td>
<td style="text-align: right;">18000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">81.9 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00008</td>
<td style="text-align: right;">191.7 ms</td>
<td style="text-align: right;">7.17 ms</td>
<td style="text-align: right;">10.51 ms</td>
<td style="text-align: right;">187.9 ms</td>
<td style="text-align: right;">17000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">80.13 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00009</td>
<td style="text-align: right;">186.6 ms</td>
<td style="text-align: right;">8.56 ms</td>
<td style="text-align: right;">12.55 ms</td>
<td style="text-align: right;">184.0 ms</td>
<td style="text-align: right;">17000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">80.13 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00010</td>
<td style="text-align: right;">182.2 ms</td>
<td style="text-align: right;">6.69 ms</td>
<td style="text-align: right;">9.16 ms</td>
<td style="text-align: right;">181.6 ms</td>
<td style="text-align: right;">17000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">79.85 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00011</td>
<td style="text-align: right;">208.9 ms</td>
<td style="text-align: right;">17.73 ms</td>
<td style="text-align: right;">26.54 ms</td>
<td style="text-align: right;">207.9 ms</td>
<td style="text-align: right;">17000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">79.85 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00012</td>
<td style="text-align: right;">192.3 ms</td>
<td style="text-align: right;">10.99 ms</td>
<td style="text-align: right;">16.46 ms</td>
<td style="text-align: right;">187.8 ms</td>
<td style="text-align: right;">18000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">81.11 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00013</td>
<td style="text-align: right;">177.4 ms</td>
<td style="text-align: right;">7.74 ms</td>
<td style="text-align: right;">11.59 ms</td>
<td style="text-align: right;">175.1 ms</td>
<td style="text-align: right;">14000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">65.78 MB</td>
</tr>
<tr>
<td>SearchFiles</td>
<td>4.8.0-beta00014</td>
<td style="text-align: right;">172.7 ms</td>
<td style="text-align: right;">5.93 ms</td>
<td style="text-align: right;">8.88 ms</td>
<td style="text-align: right;">168.9 ms</td>
<td style="text-align: right;">14000.0000</td>
<td style="text-align: right;">1000.0000</td>
<td style="text-align: right;">-</td>
<td style="text-align: right;">65.78 MB</td>
</tr>
</tbody>
</table>
</details>
<h2 id="change-log">Change Log</h2>
<h3 id="breaking-changes">Breaking Changes</h3>
<ul>
<li><a href="https://github.com/apache/lucenenet/pull/424">#424</a> - Deprecated <code>TaskMergeScheduler</code>, a merge scheduler that was added to support .NET Standard 1.x</li>
<li><a href="https://github.com/apache/lucenenet/pull/424">#424</a> - <code>Lucene.Net.TestFramework</code>: Removed the public <code>LuceneTestCase.ConcurrentMergeSchedulerFactories</code> class</li>
</ul>
<h3 id="bugs">Bugs</h3>
<ul>
<li><a href="https://github.com/apache/lucenenet/pull/405">#405</a>, <a href="https://github.com/apache/lucenenet/pull/415">#415</a> - <code>Lucene.Net.Index.DocTermOrds</code>: Fixed issue with enumerator (<code>OrdWrappedTermsEnum</code>) incorrectly returning <code>true</code> when the value is <code>null</code>.</li>
<li><a href="https://github.com/apache/lucenenet/pull/427">#427</a> - <code>Lucene.Net.Analysis.Common</code>: Fixed <code>TestRollingCharBuffer::Test()</code> to prevent out of memory exceptions when running with <code>Verbose</code> enabled</li>
<li><a href="https://github.com/apache/lucenenet/pull/434">#434</a>, <a href="https://github.com/apache/lucenenet/pull/418">#418</a> - Hunspell affixes' file parsing corrupts some affixes' conditions</li>
<li><a href="https://github.com/apache/lucenenet/pull/434">#434</a>, <a href="https://github.com/apache/lucenenet/pull/419">#419</a> - <code>HunspellStemFilter</code> does not work with zero affix</li>
<li><a href="https://github.com/apache/lucenenet/pull/439">#439</a> - <code>Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader</code>: Fixed synchronization issue between adding new items to the cache and reading <code>RamBytesUsed</code> method</li>
<li><a href="https://github.com/apache/lucenenet/pull/439">#439</a>, <a href="https://github.com/apache/lucenenet/pull/417">#417</a>, <a href="https://github.com/apache/lucenenet/pull/319">#319</a> - <code>Lucene.Net.Spatial.Util.ShapeFieldCacheProvider</code>: Fixed atomicity issue with loading the cache by using <code>Lazy&lt;T&gt;</code>.</li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a> - <code> Lucene.Net.TestFramework.Support.Confguration.TestConfigurationFactory</code>: Use <code>Lazy&lt;T&gt;</code> to ensure the <code>configurationCache.GetOrAdd()</code> factory is atomic.</li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a> - <code>Lucene.Net.TestFramework.Search.ShardSearchingTestBase: Fixed possible </code>KeyNotFoundException<code>when getting the value from</code>collectionStatisticsCache`</li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a>, <a href="https://github.com/apache/lucenenet/pull/417">#417</a>, <a href="https://github.com/apache/lucenenet/pull/319">#319</a> - <code>Lucene.Net.Spatial.Prefix.PrefixTreeFactory</code>: Use <code>Lazy&lt;T&gt;</code> in <code>ConcurrentDictionary</code> to make the <code>valueFactory</code> atomic.</li>
<li><a href="https://github.com/apache/lucenenet/pull/443">#443</a> - <code>Lucene.Net.Benchmark.ByTask.Feeds.SpatialDocMaker: Since </code>Dictionary&lt;TKey, TValue&gt;.this[key]<code>is not marked virtual in .NET, subclassing</code>Dictionary&lt;string, string&gt;<code>is not a valid approach. So we implement</code>IDictionary&lt;string, string&gt;` instead.</li>
<li><a href="https://github.com/apache/lucenenet/pull/416">#416</a> - CLI Documentation issue - environment variable token not replaced.</li>
<li><a href="https://github.com/apache/lucenenet/pull/450">#450</a> - <code>Lucene.Net.Facet</code> - Reverted locking in to the state it was in Lucene 4.8.1, however we are still making use of <code>ReaderWriterLockSlim</code> to improve read performance of caches. Also, removed the 1 second lock timeout from <code>Cl2oTaxonomyWriterCache</code>.</li>
</ul>
<h3 id="improvements">Improvements</h3>
<ul>
<li><a href="https://github.com/apache/lucenenet/pull/269">#269</a> - Added <code>[AwaitsFix]</code> attribute to known failing tests</li>
<li><a href="https://github.com/apache/lucenenet/pull/391">#391</a> - Improved plugins in DocFx when generating API docs</li>
<li><a href="https://github.com/apache/lucenenet/pull/392">#392</a> - Enabled GitHub Actions to Run Tests on Pull Request</li>
<li><a href="https://github.com/apache/lucenenet/pull/395">#395</a> - Improved performance of build pipeline by publishing the whole solution in one step instead of one project at a time</li>
<li><a href="https://github.com/apache/lucenenet/pull/395">#395</a> - Fixed dependency NuGet package version conflicts</li>
<li><a href="https://github.com/apache/lucenenet/pull/395">#395</a> - Added crash and hang detection to the test runs</li>
<li><a href="https://github.com/apache/lucenenet/pull/395">#395</a> - Upgraded to the latest <code>dotnet</code> CLI commands <code>dotnet build</code> and <code>dotnet test</code> rather than <code>dotnet msbuild</code> and <code>dotnet vstest</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/411">#411</a>, <a href="https://github.com/apache/lucenenet/pull/259">#259</a> - Reviewed tests for <code>Lucene.Net.Tests.Facet</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/412">#412</a>, <a href="https://github.com/apache/lucenenet/pull/406">#406</a> - Upgraded NUnit to 3.13.1 and NUnit3TestAdapter to 3.17.0 to make <code>Console.WriteLine()</code> work in unit tests.</li>
<li><a href="https://github.com/apache/lucenenet/pull/414">#414</a>, <a href="https://github.com/apache/lucenenet/pull/259">#259</a> - Review of tests for <code>Lucene.Net.Tests.Join</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/420">#420</a>, <a href="https://github.com/apache/lucenenet/pull/259">#259</a> - Review of tests for <code>Lucene.Net.Tests.Classification</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/422">#422</a> - <code>Lucene.Net.Classification</code>: Removed leading underscore from private/internal member variables</li>
<li><a href="https://github.com/apache/lucenenet/pull/423">#423</a> - Reduced casting</li>
<li><a href="https://github.com/apache/lucenenet/pull/423">#423</a> - <code>azure-pipelines.yml</code>: Added <code>RunX86Tests</code> option to explicitly enable x86 tests without having to run a full nightly build</li>
<li><a href="https://github.com/apache/lucenenet/pull/425">#425</a>, <a href="https://github.com/apache/lucenenet/pull/259">#259</a> - Review of tests for <code>Lucene.Net.Tests.Codecs</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/426">#426</a> - Changed multiple naming conventions of anonymous classes to just use the suffix <code>AnonymousClass</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/426">#426</a> - Changed accessibility of anonymous classes to <code>private</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/427">#427</a>, <a href="https://github.com/apache/lucenenet/pull/259">#259</a> - Review of tests for <code>Lucene.Net.Tests.Queries</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/433">#433</a>, <a href="https://github.com/apache/lucenenet/pull/430">#430</a> - Removed <code>FEATURE_CLONEABLE</code> and the MSBuild property <code>IncludeICloneable</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/435">#435</a>, <a href="https://github.com/apache/lucenenet/pull/259">#259</a> - Review of tests for <code>Lucene.Net.Tests.Expressions</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/438">#438</a> - Don't insert extra newline in TFIDFSim's score explanation (this minor change had already been done to Lucene 5.0, so we are back-porting it to 4.8.0)</li>
<li><a href="https://github.com/apache/lucenenet/pull/439">#439</a> - <code>Lucene.Net.Util.VirtualMethod</code>: Removed unnecessary call to <code>Convert.ToInt32()</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/439">#439</a> - <code>Lucene.Net.Util.AttributeSource</code>: Restored comment from Lucene indicating it doesn't matter if multiple threads compete to populate the <code>ConditionalWeakTable</code>.</li>
<li><a href="https://github.com/apache/lucenenet/pull/440">#440</a> - <strong>SWEEP</strong>: Reviewed catch blocks and made improvements to preserve stack details.</li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a>, <a href="https://github.com/apache/lucenenet/pull/417">#417</a> - <code>Lucene.Net.Analysis.OpenNLP.Tools.OpenNLPOpsFactory</code>: Simplified logic by using <code>GetOrAdd()</code> instead of <code>TryGetValue</code>.</li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a> - <code> Lucene.Net.TestFramework.Util</code> (<code>LuceneTestCase</code> + <code>TestUtil</code>): Refactored the <code>CleanupTemporaryFiles()</code> method to be more in line with the original Java implementation, including not allowing new files/directories to be added to the queue concurrently with the deletion process.</li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a> - <strong>PERFORMANCE:</strong> <code> Lucene.Net.Join.ToParentBlockJoinCollector</code>: Changed from <code>ConcurrentQueue&lt;T&gt;</code> to <code>Queue&lt;T&gt;</code> because we are dealing with a collection declared within the same method so there is no reason for the extra overhead.</li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a> - <strong>PERFORMANCE:</strong> <code> Lucene.Net.Tests.Suggest.Spell.TestSpellChecker</code>: Replaced <code>ConcurrentBag&lt;T&gt;</code> with ConcurrentQueue<t> because we need to be sure the underlying implementation guarantees order and the extra call to <code>Reverse()</code> was just slowing things down.</t></li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a> - <code> Lucene.Net.TestFramework.Search.ShardSearchingTestBase</code>: Display the contents of the collection to the console using <code>Collections.ToString()</code>.</li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a> - <code>Lucene.Net.Search.SearcherLifetimeManager: Added comment to indicate the reason we use</code>Lazy<t>` is to make the create operation atomic.</t></li>
<li><a href="https://github.com/apache/lucenenet/pull/441">#441</a> - <code> Directory.Build.Targets</code>: Added <code>FEATURE_DICTIONARY_REMOVE_CONTINUEENUMERATION</code> so we can support this feature in .NET 5.x + when we add a target.</li>
<li><a href="https://github.com/apache/lucenenet/pull/442">#442</a> - <strong>PERFORMANCE:</strong> <code>Lucene.Net.Search.Suggest.Fst.FSTCompletion</code>: Use <code>Stack&lt;T&gt;</code> rather than <code>List&lt;T&gt;.Reverse()</code>. Also, removed unnecessary lock in <code>CheckExistingAndReorder()</code>, as it is only used in a single thread at a time.</li>
<li><a href="https://github.com/apache/lucenenet/pull/442">#442</a> - <strong>PERFORMANCE:</strong> <code>Lucene.Net.Search.Suggest.SortedInputEnumerator</code>: Removed unnecessary call to <code>Reverse()</code> and allocation of <code>HashSet&lt;T&gt;</code></li>
<li><a href="https://github.com/apache/lucenenet/pull/444">#444</a>, <a href="https://github.com/apache/lucenenet/pull/272">#272</a> - <strong>PERFORMANCE:</strong> <code>Lucene.Net.Search.FieldCacheImpl</code>: Reverted locking back to the state of Lucene 4.8.0.</li>
<li><a href="https://github.com/apache/lucenenet/pull/445">#445</a> - Removed <code>FEATURE_THREAD_INTERRUPT</code> since all supported targets now support thread interrupts. Note also that Lucene <em>depends</em> on thread interrupts to function properly, so disabling this feature would be invalid.</li>
<li><a href="https://github.com/apache/lucenenet/pull/448">#448</a> - <strong>DOCS:</strong> Added migration guide for users migrating from Lucene.NET 3.0.3 to Lucene.NET 4.8.0.</li>
<li><a href="https://github.com/apache/lucenenet/pull/396">#396</a> - <strong>DOCS:</strong> Create branching scheme to track changes in docuentation between different Lucene versions and removed the <code>JavaDocToMarkdownConverter</code> tool from the normal build workflow of the API docs. This frees us up to update the &quot;namespace&quot; documentation with .NET-specific information and code examples.</li>
<li>Upgraded J2N NuGet package dependency to 2.0.0-beta-0012</li>
<li>Upgraded ICU4N NuGet package dependency to 60.1.0-alpha.254</li>
<li>Upgraded Morfologik.Stemming package dependency to 2.1.7-beta-0002</li>
</ul>
<h3 id="new-features">New Features</h3>
<ul>
<li><a href="https://github.com/apache/lucenenet/pull/385">#385</a>, <a href="https://github.com/apache/lucenenet/pull/362">#362</a> - <code>Lucene.Net.Documents.Document</code>: Added culture-sensitive overloads of <code>GetValues()</code>, <code>Get()</code> and <code>GetStringValue()</code> that accept <code>format</code> and <code>IFormatProvider</code> and implemented <code>IFormattable</code> on <code>Document</code> and <code>LazyDocument</code>.</li>
<li><a href="https://github.com/apache/lucenenet/pull/404">#404</a> - Added <code>Commit()</code> method to <code>AnalyzingInfixSuggester</code> (from <a href="https://issues.apache.org/jira/browse/LUCENE-5889">LUCENE-5889</a>)</li>
</ul>
</article>
</div>
<div class="hidden-sm col-md-2" role="complementary">
<div class="sideaffix">
<div class="contribution">
<ul class="nav">
<li>
<a href="https://github.com/apache/lucenenet/blob/master/websites/site/release-notes/version-4.8.0-beta00014.md/#L1" class="contribution-link">Improve this Doc</a>
</li>
</ul>
</div>
<nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
<h5>In This Article</h5>
<div></div>
</nav>
</div>
</div>
</div>
</div>
<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
Copyright &copy; 2022 The Apache Software Foundation, Licensed under the <a href='http://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache License, Version 2.0</a><br> <small>Apache Lucene.Net, Lucene.Net, Apache, the Apache feather logo, and the Apache Lucene.Net project logo are trademarks of The Apache Software Foundation. <br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</small>
</div>
</div>
</footer>
</div>
<script type="text/javascript" src="../styles/docfx.vendor.js"></script>
<script type="text/javascript" src="../styles/docfx.js"></script>
<script type="text/javascript" src="../styles/main.js"></script>
</body>
</html>