uid: releasenotes/4.8.0-beta00013 version: 4.8.0-beta00013

Lucene.NET 4.8.0-beta00013 Release Notes


This release contains important bug fixes and performance enhancements.

Benchmarks (from #310)

Index Files


BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.630 (2004/?/20H1) Intel Core i7-8850H CPU 2.60GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores .NET Core SDK=5.0.100 [Host] : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00005 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00006 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00007 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00008 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00009 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00010 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00011 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00012 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00013 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT InvocationCount=1 IterationCount=15 LaunchCount=2 UnrollFactor=1 WarmupCount=10
MethodJobMeanErrorStdDevGen 0Gen 1Gen 2Allocated
IndexFiles4.8.0-beta00005628.1 ms8.41 ms12.05 ms43000.00008000.00007000.0000220.82 MB
IndexFiles4.8.0-beta00006628.3 ms13.19 ms19.33 ms44000.00008000.00007000.0000220.67 MB
IndexFiles4.8.0-beta00007617.2 ms8.44 ms11.83 ms44000.00008000.00007000.0000220.73 MB
IndexFiles4.8.0-beta00008620.6 ms5.62 ms8.41 ms44000.00008000.00007000.0000221.06 MB
IndexFiles4.8.0-beta00009632.8 ms12.57 ms18.43 ms44000.00008000.00007000.0000220.95 MB
IndexFiles4.8.0-beta00010862.3 ms51.13 ms74.95 ms44000.00008000.00007000.0000221.22 MB
IndexFiles4.8.0-beta00011636.5 ms11.06 ms15.87 ms44000.00008000.00007000.0000221.09 MB
IndexFiles4.8.0-beta00012668.8 ms14.78 ms21.66 ms56000.00007000.00006000.0000286.63 MB
IndexFiles4.8.0-beta00013626.7 ms7.78 ms10.91 ms43000.00008000.00007000.0000219.8 MB

Search Files


BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.630 (2004/?/20H1) Intel Core i7-8850H CPU 2.60GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores .NET Core SDK=5.0.100 [Host] : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00005 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00006 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00007 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00008 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00009 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00010 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00011 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00012 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT 4.8.0-beta00013 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT IterationCount=15 LaunchCount=2 WarmupCount=10
MethodJobMeanErrorStdDevGen 0Gen 1Gen 2Allocated
SearchFiles4.8.0-beta00005274.8 ms7.01 ms10.28 ms18000.00001000.0000-82.12 MB
SearchFiles4.8.0-beta00006283.4 ms7.78 ms11.64 ms18000.00001000.0000-82.13 MB
SearchFiles4.8.0-beta00007291.5 ms8.91 ms13.33 ms18000.00001000.0000-81.9 MB
SearchFiles4.8.0-beta00008162.3 ms5.50 ms8.23 ms17000.00001000.0000-80.13 MB
SearchFiles4.8.0-beta00009165.6 ms2.61 ms3.90 ms17000.0000--80.13 MB
SearchFiles4.8.0-beta00010159.4 ms2.84 ms4.17 ms17000.00001000.0000-79.85 MB
SearchFiles4.8.0-beta00011160.8 ms1.93 ms2.77 ms17000.00001000.0000-79.85 MB
SearchFiles4.8.0-beta00012169.2 ms6.48 ms9.49 ms18000.00001000.0000-81.11 MB
SearchFiles4.8.0-beta00013161.6 ms3.28 ms4.80 ms14000.00001000.0000-65.78 MB

Change Log

Breaking Changes

  • Lucene.Net.Search.FieldCache: Added interface ICreationPlaceholder and changed CreationPlaceholder class to CreationPlaceHolder<TValue>.

Bugs

  • #356 - Lucene.Net.Store.NativeFSLockFactory: Modified options to allow read access on non-Windows operating systems. This caused the copy constructor of RAMDirectory to throw “The process cannot access the file ‘file path’ because it is being used by another process” excpetions.
  • #296 - Lucene.Net.Util.Automaton.State: Removed Equals() implementation; it was intended to use reference equality as a unique key. This caused random IndexOperationExceptions to occur when using FuzzyTermsEnum/FuzzyQuery.
  • #387 - Fixed formatting in ArgumentException message for all analyzer factories so it will display the dictionary contents
  • #387 - Lucene.Net.Util.ExceptionExtensions.GetSuppressedAsList(): Use J2N.Collections.Generic.List<T> so the call to ToString() will automatically list the exception messages
  • #387 - Lucene.Net.TestFramework.Analysis.MockTokenizer: Pass the AttributeFactory argument that is provided as per the documentation comment. Note this bug exists in Lucene 4.8.0, also.
  • #387 - Lucene.Net.Analysis.Common.Tartarus.Snowball.Among: Fixed MethodObject property to return private field instead of itself
  • #387 - Lucene.Net.Document.CompressionTools: Pass the offset and length to the underlying MemoryStream
  • #388 - Downgraded minimum required Microsoft.Extensions.Configuration version to 2.0.0 on .NET Standard 2.0 and 2.1

Improvements

  • Updated code examples on website home page
    1. Show cross-OS examples of building Directory paths
    2. Demonstrate where to put using statements
    3. Removed LinqPad's Dump() method and replaced with Console.WriteLine() for clarity
    4. Fixed syntax error in initialization example of MultiPhraseQuery
  • Upgraded NuGet dependency J2N to 2.0.0-beta-0010
  • Upgraded NuGet dependency ICU4N to 60.1.0-alpha.353
  • Upgraded NuGet dependency Morfologik.Stemming to 2.1.7-beta-0001
  • #344 - PERFORMANCE: Lucene.Net.Search.FieldCacheImpl: Removed unnecessary dictionary lookup
  • #352 - Added Azure DevOps tests for x86 on all platforms
  • #348 - PERFORMANCE: Reduced FieldCacheImpl casting/boxing
  • #355 - Setup nightly build (https://dev.azure.com/lucene-net/Lucene.NET/_build?definitionId=4)
  • PERFORMANCE: Lucene.Net.Util.Automaton.SortedInt32Set: Removed unnecessary IEquatable<T> implementations and converted FrozenInt32Set into a struct.
  • PERFORMANCE: Lucene.Net.Util.Bits: Removed unnecessary GetHashCode() method from MatchAllBits and MatchNoBits (didn't exist in Lucene)
  • Lucene.Net.Util.Counter: Changed Get() to Value property and added implicit operator.
  • #361 - Make CreateDirectory() method virtual so that derived classes can provide their own Directory implementation, allowing for benchmarking of custom Directory providers (e.q LiteDB)
  • #346, #383 - PERFORMANCE: Change delegate overloads of Debugging.Assert() to use generic parameters and string.Format() to reduce allocations. Use J2N.Text.StringFormatter to automatically format arrays and collections so the processing of converting it to a string is deferred until an assert fails.
  • #296 - PERFORMANCE: Lucene.Net..Index: Calling IndexOptions.CompareTo() causes boxing. Added new IndexOptionsComparer class to be used in codecs instead.
  • #387 - Fixed or Suppressed Code Analysis Rules
    • CA1012: Abstract types should not have constructors
    • CA1052: Static holder types should be Static or NotInheritable
    • CA1063: Implement IDisposable Properly (except for IndexWriter). Partially addresses #265.
    • CA1507: Use nameof instead of string (#366)
    • CA1802: Use Literals Where Appropriate
    • CA1810: Initialize reference type static fields inline
    • CA1815: Override equals and operator equals on value types
    • CA1819: Properties should not return arrays
    • CA1820: Test for empty strings using string length
    • CA1822: Mark members as static
    • CA1825: Avoid zero-length array allocations
    • CA2213: Disposable fields should be disposed (except for IndexWriter and subclasses which need more work)
    • IDE0016: use throw expression (#368)
    • IDE0018: Inline variable declaration
    • IDE0019: Use pattern matching to avoid ‘is’ check followed by a cast
    • IDE0020: Use pattern matching to avoid ‘is’ check followed by a cast
    • IDE0021: Use block body for constructors
    • IDE0025: Use expression body for properties
    • IDE0027: Use expression body for accessors
    • IDE0028: Use collection initializers
    • IDE0029: Use coalesce expression
    • IDE0030: Use coalesce expression (nullable)
    • IDE0031: Use null propagation
    • IDE0034: Simplify ‘default’ expression
    • IDE0038: Use pattern matching to avoid ‘is’ check followed by a cast
    • IDE0039: Use local function
    • IDE0040: Add accessibility modifiers
    • IDE0041: Use is null check
    • IDE0049: Use language keywords instead of framework type names for type references
    • IDE0051: Remove unused private member
    • IDE0052: Remove unread private member
    • IDE0059: Remove unnecessary value assignment
    • IDE0060: Remove unused parameter
    • IDE0063: Use simple ‘using’ statement
    • IDE0071: Simplify interpolation
    • IDE1005: Use conditional delegate call
    • IDE1006: Naming Styles
  • #387 - Removed dead code/commented code
  • #387 - PERFORMANCE: Added aggressive inlining in Codecs and Util namespaces
  • #387 - Simplified reuse logic of TermsEnum subclasses
  • #387 - PERFORMANCE: Lucene.Net.Index.DocValuesProducer: Optimized checks in AddXXXField() methods
  • #387 - PERFORMANCE: Lucene.Net.Index: Changed FieldInfos, FreqProxTermsWriterPerField, IndexWriter, LogMergePolicy, SegmentCoreReaders, and SegmentReader to take advantage of the fact that TryGetValue() returns a boolean
  • #370, #389 - Reverted FieldCacheImpl delegate capture introduced in #348
  • #390 - Added tests for .NET 5
  • #390 - Upgraded to C# LangVersion 9.0

New Features

  • #358 - Added Community Links page to website
  • #359 - Added builds mailing list to website
  • #365 - Added “Fork me on GitHub” to website and API docs
  • Lucene.Net.TestFramework: Added Assert.DoesNotThrow() overloads