This release contains bug fixes and minor performance improvements
TaskMergeScheduler
, a merge scheduler that was added to support .NET Standard 1.xLucene.Net.TestFramework
: Removed the public LuceneTestCase.ConcurrentMergeSchedulerFactories
classLucene.Net.Index.DocTermOrds
: Fixed issue with enumerator (OrdWrappedTermsEnum
) incorrectly returning true
when the value is null
.Lucene.Net.Analysis.Common
: Fixed TestRollingCharBuffer::Test()
to prevent out of memory exceptions when running with Verbose
enabledHunspellStemFilter
does not work with zero affixLucene.Net.Facet.Taxonomy.CachedOrdinalsReader
: Fixed synchronization issue between adding new items to the cache and reading RamBytesUsed
methodLucene.Net.Spatial.Util.ShapeFieldCacheProvider
: Fixed atomicity issue with loading the cache by using Lazy<T>
. Lucene.Net.TestFramework.Support.Confguration.TestConfigurationFactory
: Use Lazy<T>
to ensure the configurationCache.GetOrAdd()
factory is atomic.Lucene.Net.TestFramework.Search.ShardSearchingTestBase: Fixed possible
KeyNotFoundExceptionwhen getting the value from
collectionStatisticsCache`Lucene.Net.Spatial.Prefix.PrefixTreeFactory
: Use Lazy<T>
in ConcurrentDictionary
to make the valueFactory
atomic.Lucene.Net.Benchmark.ByTask.Feeds.SpatialDocMaker: Since
Dictionary<TKey, TValue>.this[key]is not marked virtual in .NET, subclassing
Dictionary<string, string>is not a valid approach. So we implement
IDictionary<string, string>` instead.Lucene.Net.Facet
- Reverted locking in to the state it was in Lucene 4.8.1, however we are still making use of ReaderWriterLockSlim
to improve read performance of caches. Also, removed the 1 second lock timeout from Cl2oTaxonomyWriterCache
.[AwaitsFix]
attribute to known failing testsdotnet
CLI commands dotnet build
and dotnet test
rather than dotnet msbuild
and dotnet vstest
Lucene.Net.Tests.Facet
Console.WriteLine()
work in unit tests.Lucene.Net.Tests.Join
Lucene.Net.Tests.Classification
Lucene.Net.Classification
: Removed leading underscore from private/internal member variablesazure-pipelines.yml
: Added RunX86Tests
option to explicitly enable x86 tests without having to run a full nightly buildLucene.Net.Tests.Codecs
AnonymousClass
private
Lucene.Net.Tests.Queries
FEATURE_CLONEABLE
and the MSBuild property IncludeICloneable
Lucene.Net.Tests.Expressions
Lucene.Net.Util.VirtualMethod
: Removed unnecessary call to Convert.ToInt32()
Lucene.Net.Util.AttributeSource
: Restored comment from Lucene indicating it doesn't matter if multiple threads compete to populate the ConditionalWeakTable
.Lucene.Net.Analysis.OpenNLP.Tools.OpenNLPOpsFactory
: Simplified logic by using GetOrAdd()
instead of TryGetValue
. Lucene.Net.TestFramework.Util
(LuceneTestCase
+ TestUtil
): Refactored the CleanupTemporaryFiles()
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. Lucene.Net.Join.ToParentBlockJoinCollector
: Changed from ConcurrentQueue<T>
to Queue<T>
because we are dealing with a collection declared within the same method so there is no reason for the extra overhead. Lucene.Net.Tests.Suggest.Spell.TestSpellChecker
: Replaced ConcurrentBag<T>
with ConcurrentQueue because we need to be sure the underlying implementation guarantees order and the extra call to Reverse()
was just slowing things down. Lucene.Net.TestFramework.Search.ShardSearchingTestBase
: Display the contents of the collection to the console using Collections.ToString()
.Lucene.Net.Search.SearcherLifetimeManager: Added comment to indicate the reason we use
Lazy` is to make the create operation atomic. Directory.Build.Targets
: Added FEATURE_DICTIONARY_REMOVE_CONTINUEENUMERATION
so we can support this feature in .NET 5.x + when we add a target.Lucene.Net.Search.Suggest.Fst.FSTCompletion
: Use Stack<T>
rather than List<T>.Reverse()
. Also, removed unnecessary lock in CheckExistingAndReorder()
, as it is only used in a single thread at a time.Lucene.Net.Search.Suggest.SortedInputEnumerator
: Removed unnecessary call to Reverse()
and allocation of HashSet<T>
Lucene.Net.Search.FieldCacheImpl
: Reverted locking back to the state of Lucene 4.8.0.FEATURE_THREAD_INTERRUPT
since all supported targets now support thread interrupts. Note also that Lucene depends on thread interrupts to function properly, so disabling this feature would be invalid.JavaDocToMarkdownConverter
tool from the normal build workflow of the API docs. This frees us up to update the “namespace” documentation with .NET-specific information and code examples.Lucene.Net.Documents.Document
: Added culture-sensitive overloads of GetValues()
, Get()
and GetStringValue()
that accept format
and IFormatProvider
and implemented IFormattable
on Document
and LazyDocument
.Commit()
method to AnalyzingInfixSuggester
(from LUCENE-5889)