This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
The following commit(s) were added to refs/heads/master by this push:
new e6ca4a7 website: Added release notes for 4.8.0-beta00016
e6ca4a7 is described below
commit e6ca4a7758c21d37c7f3920668f0ae7445710b51
Author: Shad Storhaug <[email protected]>
AuthorDate: Sun Feb 13 02:46:48 2022 +0700
website: Added release notes for 4.8.0-beta00016
---
.../site/release-notes/version-4.8.0-beta00016.md | 166 +++++++++++++++++++++
1 file changed, 166 insertions(+)
diff --git a/websites/site/release-notes/version-4.8.0-beta00016.md
b/websites/site/release-notes/version-4.8.0-beta00016.md
new file mode 100644
index 0000000..b645402
--- /dev/null
+++ b/websites/site/release-notes/version-4.8.0-beta00016.md
@@ -0,0 +1,166 @@
+---
+uid: releasenotes/4.8.0-beta00016
+version: 4.8.0-beta00016
+---
+
+# Lucene.NET 4.8.0-beta00016 Release Notes
+
+---
+
+> This release contains several important bug fixes and performance
enhancements.
+
+## Breaking Index Changes
+
+There are 2 breaking changes that may affect some users when reading indexes
that were created from version 4.8.0-beta00015 and all prior 4.8.0 beta
versions (not including 3.0.3).
+1. A bug was fixed in the generation of segment file names. This only affects
users with more than 10 segments in their index.
+2. `Lucene.Net.Documents.DateTools` has been modified to return _milliseconds
since Unix epoch_ (that is, since Jan 1, 1970 at 00:00:00 UTC) by *default* to
match Java Lucene. This only affects users who explicitly use
`Lucene.Net.Documents.DateTools` in their application and store the result (in
.NET ticks) in their index.
+
+If you are affected by either of the above issues, it is recommended to
regenerate your indexes during upgrading. However, if that is not feasible, we
have provided the following workarounds.
+
+1. If you have a large index with more than 10 segments, see
[#576](https://github.com/apache/lucenenet/pull/576) for details on how to
enable legacy segment name support.
+2. If you are storing the result of
`Lucene.Net.Documents.DateTools.StringToTime(string)` or
`Lucene.Net.Documents.DateTools.Round(long)` (a `long`) in your index, you are
storing .NET ticks. There are now optional parameters `inputRepresentation` and
`outputRepresentation` on these methods to specify whether the `long` value
represents .NET ticks, .NET ticks as milliseconds, or millisenonds since the
Unix epoch. To exactly match version 4.8.0-beta00015 and prior (including prior
major v [...]
+ - `Lucene.Net.Documents.DateTools.StringToTime(string,
NumericRepresentation)` should specify `NumericRepresentation.TICKS` for
`outputRepresentation`.
+ - `Lucene.Net.Documents.DateTools.Round(long, NumericRepresentation,
NumericRepresentation)` should specify
`NumericRepresentation.TICKS_AS_MILLISECONDS` for `inputRepresentation` and
`NumericRepresentation.TICKS` for `outputRepresentation`.
+
+## .NET Framework Recommendations
+
+It is recommended that all .NET Framework users migrate as soon as possible.
+
+1. In cases where `Lucene.Net.Support.WeakDictionary<TKey, TValue>` was used
in .NET Framework and .NET Standard 2.0 due to missing APIs, but there is now a
better solution using `Prism.Core`'s weak events in combination with
`ConditionalWeakTable<TKey, TValue>`, which means memory management is handled
entirely by the GC in `Lucene.Net.Index.IndexReader`,
`Lucene.Net.Search.FieldCacheImpl`, `Lucene.Net.Search.CachingWrappingFilter`
and `Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader`. S [...]
+2. All known issues with loss of floating-point precision on .NET Framework
x86 have been fixed.
+
+## Change Log
+
+### Breaking Changes
+* [#547](https://github.com/apache/lucenenet/pull/547) -
`Lucene.Net.Util.StringHelper.GOOD_FAST_HASH_SEED`: converted from a static
field to a property and marked obsolete. Added a new property
`GoodFastHashSeed`. Removed `SystemProperties` call to populate the value of
the field, since NUnit only allows us to generate a seed per test, and we need
a way to inject the seed value for repeatability.
+* [#547](https://github.com/apache/lucenenet/pull/547) -
`Lucene.Net.TestFramework`: Added `LuceneSetUpFixtureBuilder` class to load
either a subclass or our default instance of `LuceneTestFrameworkInitializer`.
Also added `LuceneTestCase.SetUpFixture` to control initialization of
`LuceneTestFrameworkInitializer` so it is only called on setup and teardown for
the assembly. Added `Initialize()` method to `LuceneTestFrameworkInitializer`
that *must be used* when setting factories during testing.
+* [#547](https://github.com/apache/lucenenet/pull/547) -
`Lucene.Net.TestFramework.Util.LuceneTestCase`: Deprecated `GetClassType()`
method and added `TestType` property
+* [#547](https://github.com/apache/lucenenet/pull/547) -
`Lucene.Net.TestFramework.Util.AbstractBeforeAfterRule``: Removed
`LuceneTestCase` parameter from `Before()` and `After()` methods.
+* [#551](https://github.com/apache/lucenenet/pull/551) - Changed constructors
of `Lucene.Net.Util.NumberFormat` and
`Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat` to accept
`IFormatProvider` rather than `CultureInfo` and changed
`Lucene.Net.Util.NumberFormat.Culture` property to
`Lucene.Net.Util.NumberFormat.FormatProvider`.
+* [#554](https://github.com/apache/lucenenet/pull/554) - `Lucene.Net.Misc`:
Made `DocFreqComparer` and `TotalTermFreqComparer` into static singletons, only
accessible by the `Default` property.
+* [#428](https://github.com/apache/lucenenet/pull/428),
[#429](https://github.com/apache/lucenenet/pull/429),
[#570](https://github.com/apache/lucenenet/pull/570) -
`Lucene.Net.Search.FieldComparer`: Redesigned implementation to use reference
types for numerics (from J2N) to avoid boxing.
+* [#570](https://github.com/apache/lucenenet/pull/570) -
`Lucene.Net.Search.FieldCache.IParser`: Renamed method from `TermsEnum()` to
`GetTermsEnum()` to match other APIs
+* [#570](https://github.com/apache/lucenenet/pull/570) - `Lucene.Net.Queries`:
`ObjectVal()` returns a `J2N.Numerics.Number`-derived type rather than a value
type cast to object. Direct casts to `int`, `long`, `double`, `single`, etc.
will no longer work without first casting to the `J2N.Numerics.Number`-derived
type. Alternatively, use the corresponding `Convert.ToXXX()` method for the
type you wish to retrieve from the object.
+* [#574](https://github.com/apache/lucenenet/pull/574) -
`Lucene.Net.Suggest.Fst.FSTCompletionLookup/WFSTCompletionLookup`: Changed
`Get()` to return `long?` instead of `object` to eliminate boxing/unboxing
+* [#574](https://github.com/apache/lucenenet/pull/574) -
`Lucene.Net.Index.MergePolicy::FindForcedMerges()`: Removed unnecessary
nullable from `FindForcedMerges()` and all `MergePolicy` subclasses
+* [#574](https://github.com/apache/lucenenet/pull/574) -
`Lucene.Net.Replicator`: Changed callback signature from `Func<bool?>` to
`Action`, since the return value had no semantic meaning
+* [#575](https://github.com/apache/lucenenet/pull/575) -
`Lucene.Net.Index.DocValuesFieldUpdates`: Refactored so the subclasses will
handle getting the values from `DocValuesFieldUpdatesIterator` or
`DocValuesUpdate` via a cast rather than boxing the value. Also marked internal
(as well as all members of `BufferedUpdates`), since this was not supposed to
be part of the public API.
+* [#573](https://github.com/apache/lucenenet/pull/573),
[#576](https://github.com/apache/lucenenet/pull/576) - Changed segment file
names to match Lucene 4.8.0 and Lucene.NET 3.x
+* [#577](https://github.com/apache/lucenenet/pull/577) -
`Lucene.Net.Index.SegmentInfos`: Changed `Info()` method to an indexer (.NET
Convention)
+* [#580](https://github.com/apache/lucenenet/pull/580) -
`Lucene.Net.Documents.DateTools` - Added `NumericRepresentation` enum to allow
converting to/from long in the following formats:
+ - Unix Epoch (default): Milliseconds since Jan 1, 1970 12:00:00 AM UTC.
+ - Ticks: The raw ticks from `DateTime` or `DateTimeOffset`.
+ - Ticks as Milliseconds: This is for compatibility with prior versions of
Lucene.NET (3.0.3 and 4.8.0-beta00001 - 4.8.0-beta00015). The conversion done
on input values is `time * TimeSpan.TicksPerMillisecond` and the conversion to
output values is `time / TimeSpan.TicksPerMillisecond`.
+
+ **The `long` return value from
`Lucene.Net.Documents.DateTools.StringToTime(string, NumericRepresentation)`
has been changed from `NumericRepresentation.TICKS` to
`NumericRepresentation.UNIX_TIME_MILLISECONDS` by default.**
+
+ **The `long` input parameter provided to
`Lucene.Net.Documents.DateTools.Round(long, NumericRepresentation,
NumericRepresentation)` has been changed from
`NumericRepresentation.TICKS_AS_MILLISECONDS` to
`NumericRepresentation.UNIX_TIME_MILLISECONDS` by default.**
+
+ **The `long` return value from `Lucene.Net.Documents.DateTools.Round(long,
NumericRepresentation, NumericRepresentation)` has changed from
`NumericRepresentation.TICKS` to `NumericRepresentation.UNIX_TIME_MILLISECONDS`
by default.**
+* [#580](https://github.com/apache/lucenenet/pull/580) -
`Lucene.Net.Documents.DateTools` - De-nested `Resolution` enum and renamed
`DateResolution`.
+* [#580](https://github.com/apache/lucenenet/pull/580) -
`Lucene.Net.QueryParsers.Flexible.Standard`: Changed numeric nodes to accept
and return `J2N.Numerics.Number`-derived types instead of `object`.
+* [#581](https://github.com/apache/lucenenet/pull/581) - **SWEEP:**
`Lucene.Net.Util.Fst`: Changed API to use `J2N.Numerics.Int64` instead of
`long?` for generic closing type as it was designed to use reference equality
comparison.
+* [#581](https://github.com/apache/lucenenet/pull/581) - **SWEEP:**
`Lucene.Net.Util.Fst`: Added class constraints to each generic FST type and
reverted to reference equality comparisons.
+* [#581](https://github.com/apache/lucenenet/pull/581),
[#279](https://github.com/apache/lucenenet/pull/279) -
`Lucene.Net.Util.Fst.Int32sRefFSTEnum`: Added `MoveNext()` method and marked
`Next()` method obsolete. This change had already been done to BytesRefFSTEnum,
which made them inconsistent.
+* [#583](https://github.com/apache/lucenenet/pull/583) -
`Lucene.Net.QueryParsers.Flexible`: Removed unnecessary nullable value types
from `ConfigurationKeys` and configuration setters/getters in
`StandardQueryParser`. Added `AbstractQueryConfig.TryGetValue()` method to
allow retrieving value types so they can be defaulted properly.
+* [#583](https://github.com/apache/lucenenet/pull/583) -
`Lucene.Net.Queries.Function.ValueSources.EnumFieldSource::ctor()` - changed
`enumIntToStringMap` to accept `IDictionary<int, string>` instead of
`IDictionary<int?, string>` (removed unnecessary nullable)
+* [#587](https://github.com/apache/lucenenet/pull/587) -
`Lucene.Net.TestFramework.Store.MockDirectoryWrapper`: Renamed
`AssertNoUnreferencedFilesOnClose` to `AssertNoUnreferencedFilesOnDispose`
+* [#619](https://github.com/apache/lucenenet/pull/619) - `Lucene.Net.Spatial`:
Upgraded to new Spatial4n NuGet package that unifies the types from
Spatial4n.Core and Spatial4n.Core.NTS
+* [#619](https://github.com/apache/lucenenet/pull/619) -
`Lucene.Net.Spatial.Prefix.Tree.Cell`: Renamed `m_outerInstance` >
`m_spatialPrefixTree` and constructor parameter `outerInstance` >
`spatialPrefixTree`
+* [#619](https://github.com/apache/lucenenet/pull/619) -
`Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.BaseTermsEnumTransverser`:
renamed `m_outerInstance` > `m_filter`, constructor parameter `outerInstance` >
`filter`
+* [#619](https://github.com/apache/lucenenet/pull/619) -
`Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter`: De-nested
`BaseTermsEnumTraverser`class
+* [#619](https://github.com/apache/lucenenet/pull/619) -
`Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.Factory`: de-nested and
renamed `GeohashPrefixTreeFactory`
+* [#619](https://github.com/apache/lucenenet/pull/619) -
`Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.Factory`: de-nested and renamed
`QuadPrefixTreeFactory`
+* [#619](https://github.com/apache/lucenenet/pull/619) -
`Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter`: De-nested
`VisitorTemplate` class and changed protected field `m_prefixGridScanLevel` to
a public property named `PrefixGridScanLevel`.
+* [#619](https://github.com/apache/lucenenet/pull/619) -
`Lucene.Net.Spatial.Query`: Renamed `UnsupportedSpatialOperation` >
`UnsupportedSpatialOperationException` to match .NET conventions
+
+### Bugs
+* [#363](https://github.com/apache/lucenenet/pull/363),
[#534](https://github.com/apache/lucenenet/pull/534) -
`Lucene.Net.Replicator.Http.HttpReplicatorTest::TestBasic()`. This was failing
intermittently due to the Timeout value being set to 1 second instead of the 60
second value that was used in Java. It has been increased to the .NET default
of 100 seconds.
+* [#363](https://github.com/apache/lucenenet/pull/363),
[#534](https://github.com/apache/lucenenet/pull/534) -
`Lucene.Net.Replicator.IndexAndTaxonomyReplicationClientTest::TestConsistencyOnExceptions()`
and
`Lucene.Net.Replicator.IndexReplicationClientTest::TestConsistencyOnExceptions()`
were failing due to to exceptions being raised on the worker thread and
missing locks, which have both been addressed.
+* [#535](https://github.com/apache/lucenenet/pull/535) - Added
`[SuppressCodecs]` attribute where required for custom Lucene.NET tests
+* [#536](https://github.com/apache/lucenenet/pull/536) - Modified all
`TermsEnum.MoveNext()` methods to return a check for `null` rather than
returning `true`
+* [#537](https://github.com/apache/lucenenet/pull/537) -
`Lucene.Net.TestFramework.Index.BasePostingsFormatTestCase`: Removed
`IndexOptions.NONE` from the list of available options, since it is not a valid
test option
+* [#539](https://github.com/apache/lucenenet/pull/539) -
`Lucene.Net.Grouping.Term.TermAllGroupHeadsCollector`: Use
`NumericUtils.SingleToSortableInt32()` to compare floating point numbers (Fixes
`AllGroupHeadCollectorTest.TestRandom()` on .NET Framework x86).
+* [#540](https://github.com/apache/lucenenet/pull/540) -
`Lucene.Net.Tests.Util.TestPriorityQueue`: Fixed issues with comparers after
introducing `J2N.Randomizer`, which produces negative random numbers.
+* [#541](https://github.com/apache/lucenenet/pull/541) -
`Lucene.Net.Codecs.SimpleText.SimpleTextFieldsReader::NextDoc()`: Fixed assert
that was throwing on `BytesRef.Utf8ToString()`
+* [#542](https://github.com/apache/lucenenet/pull/542) -
`Lucene.Net.Util.Automation.MinimizationOperations::MinimizeHopcroft()`: Fixed
range in `OpenBitSet.Clear()`
+* [#543](https://github.com/apache/lucenenet/pull/543) -
`Lucene.Net.Tests.QueryParser.Flexible.Standard.TestQPHelper`: Use
`ParseExact()` method to specify the date format, so it works across cultures.
+* [#527](https://github.com/apache/lucenenet/pull/527),
[#548](https://github.com/apache/lucenenet/pull/548) -
`Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester`: Apply patch from
https://issues.apache.org/jira/browse/LUCENE-6093 to fix
`ArgumentNullException` if there were discarded trailing characters in the
query (Thanks @Maxwellwr)
+* [#550](https://github.com/apache/lucenenet/pull/550) - **SWEEP:** `Use
`StringComparer.Ordinal` for `Sort()` methods, where appropriate
+* [#551](https://github.com/apache/lucenenet/pull/551) -
`Lucene.Net.QueryParser.Flexible.Standard`: Fixed calendar handling on .NET Core
+* [#552](https://github.com/apache/lucenenet/pull/552) -
`Lucene.Net.Suggest.Jaspell.JaspellTernarySearchTree`: Fixed random number
generator so it produces random numbers
+* [#553](https://github.com/apache/lucenenet/pull/553),
[#609](https://github.com/apache/lucenenet/pull/609) -
`Lucene.Net.TestFramework.Util.TestUtil::RandomAnalysisString()`: Fixed
`ArgumentOutOfRangeException` when passed a `maxLength` of 0.
+* [#546](https://github.com/apache/lucenenet/pull/546),
[#557](https://github.com/apache/lucenenet/pull/557) -
`Lucene.Net.Search.DisjunctionMaxScorer`: Fixed x86 floating point precision
issue on .NET Framework
+* [#558](https://github.com/apache/lucenenet/pull/558) -
`Lucene.Net.Expressions.ScoreFunctionValues`: Fixed x86 floating point
precision issue on .NET Framework
+* [#559](https://github.com/apache/lucenenet/pull/559) -
`Lucene.Net.Spatial.Prefix.SpatialOpRecursivePrefixTreeTest`: Ported over patch
from
https://github.com/apache/lucene/commit/e9906a334b8e123e93b917c3feb6e55fed0a8c57
(from 4.9.0).
+* [#545](https://github.com/apache/lucenenet/pull/545),
[#565](https://github.com/apache/lucenenet/pull/565) -
`Lucene.Net.Index.TestDuelingCodecs::TestEquals()`: There was a missing ! in
`Lucene.Net.Codecs.BlockTreeTermsReader.IntersectEnum.Frame::Load()` that was
inverting the logic, causing this test to fail intermittently.
+* [#549](https://github.com/apache/lucenenet/pull/549),
[#566](https://github.com/apache/lucenenet/pull/566) -
`Lucene.Net.Search.TestJoinUtil::TestMultiValueRandomJoin()`: Fixed x86
floating point precision issue on .NET Framework
+* [#568](https://github.com/apache/lucenenet/pull/568) -
`Lucene.Net.Search.Spell.TestSpellChecker::TestConcurrentAccess()`: Fixed
issues that were causing the test to hang due to concurrency problems.
+* [#513](https://github.com/apache/lucenenet/pull/513),
[#572](https://github.com/apache/lucenenet/pull/572) - Updated
`ControlledRealTimeReopenThread` to correctly handle timing (thanks @rclabo)
+* `Lucene.Net.Support.Collections.ReverseComparer<T>`: Replaced
`CaseInsensitiveComparer` with `J2N.Collections.Generic.Comparer<T>`. This only
affects tests.
+* [#597](https://github.com/apache/lucenenet/pull/597) - `.github/workflows`:
Updated website/documentation configs to use subdirectory glob patterns for
paths.
+* [#598](https://github.com/apache/lucenenet/pull/598) - Website: Fixed
codeclimber article broken links
+* [#600](https://github.com/apache/lucenenet/pull/600) - Fixed broken book
link for Instant Lucene.NET (Thanks @rclabo)
+* [#606](https://github.com/apache/lucenenet/pull/606) -
`Lucene.Net.Search.FieldCacheImpl.Cache<TKey, TValue>::Put()`: Logic was
inverted on `innerCache` field so the value was being updated if exists, when
it should not be updated in this case
+* [#606](https://github.com/apache/lucenenet/pull/606) -
`Lucene.Net.Search.FieldCacheImpl::Cache<TKey, TValue> (Put + Get)`: Fixed
issue with `InitReader()` being called prior to adding the item to the cache
when it should be called after
+* [#619](https://github.com/apache/lucenenet/pull/619) -
`Lucene.Net.Spatial.Query.SpatialArgs::ctor()`: Set `operation` and `shape`
fields rather than calling the virtual properties to set them (which can cause
initialization issues for subclasses)
+
+### Improvements
+* [#538](https://github.com/apache/lucenenet/pull/538) -
`Lucene.Net.TestFramework.Search.CheckHits::CheckHitCollector()`: Removed
unnecessary call to `Convert.ToInt32()` and simplified collection
initialization.
+* [#554](https://github.com/apache/lucenenet/pull/554) - **SWEEP:** Made
stateless private sealed comparers into singletons to reduce allocations
(unless they already have a static property)
+* [#555](https://github.com/apache/lucenenet/pull/555),
[#526](https://github.com/apache/lucenenet/pull/526) - Deprecated support for
`System.Threading.Thread.Interrupt()` when writing indexes due to the high
possibility in .NET that it could break a `Commit()` or cause a deadlock.
+* [#567](https://github.com/apache/lucenenet/pull/567) - Enabled
`[Serializable]` exceptions on all target platforms (previously, exceptions
were not serializable in .NET Core)
+* [#274](https://github.com/apache/lucenenet/pull/274),
[LUCENENET-574](https://issues.apache.org/jira/browse/LUCENENET-574),
[#567](https://github.com/apache/lucenenet/pull/567) - Removed `[Serializable]`
support for all classes except for the following (See
[#567](https://github.com/apache/lucenenet/pull/567) for a complete list)
+ * Exceptions
+ * Collections
+ * Low-level holder types (such as BytesRef, CharsRef, etc.)
+ * Stateless `IComparer<T>` implementations that are publicly exposed
directly or through collections
+* [#568](https://github.com/apache/lucenenet/pull/568) -
`Lucene.Net.TestFramework.Util.LuceneTestCase::NewSearcher()`: Added missing
event handler to shut down `LimitedConcurrencyLevelTaskScheduler` to prevent it
from accepting new work when we are attempting to end the background process.
+* [#568](https://github.com/apache/lucenenet/pull/568) - `Lucene.Net.Support`:
Factored out `ICallable<V>` and `ICompletionService<V>` interfaces, as they are
not needed
+* [#570](https://github.com/apache/lucenenet/pull/570) - **PERFORMANCE:**
`Lucene.Net.Search.NumericRangeQuery`: Eliminated boxing when converting from T
to the numeric type and when comparing equality
+* [#570](https://github.com/apache/lucenenet/pull/570) - **PERFORMANCE:**
`Lucene.Net.Suggest.Jaspell`: Use J2N numeric types to eliminate boxing
+* [#570](https://github.com/apache/lucenenet/pull/570) - **PERFORMANCE:**
`Lucene.Net.Search.FieldCache`: Use J2N parsers and formatters
+* [#570](https://github.com/apache/lucenenet/pull/570) - **PERFORMANCE:**
`Lucene.Net.Classification.Utils.DatasetSplitter`: Removed duplicate calls to
field methods and stored values in local variables. Use default round-trip
format from J2N.
+* [#570](https://github.com/apache/lucenenet/pull/570) - **PERFORMANCE:**
`Lucene.Net.Search.FieldCacheRangeFilter`: Use `HasValue` and `Value` for
nullable value types rather casting and comparing to null
+* [#574](https://github.com/apache/lucenenet/pull/574),
[#583](https://github.com/apache/lucenenet/pull/583) - **SWEEP:** - Removed
unnecessary nullable value types
+* [#578](https://github.com/apache/lucenenet/pull/578) - `Lucene.Net.Facet`:
Added culture-sensitve `ToString()` overload on `FacetResult` and
`LabelAndValue`
+* [#578](https://github.com/apache/lucenenet/pull/578) -
`Lucene.Net.Facet.FacetResult`: Added nullable reference type support
+* [#579](https://github.com/apache/lucenenet/pull/579) -
`Lucene.Net.Facet.DrillDownQuery`: Added collection initializer support
+* [#580](https://github.com/apache/lucenenet/pull/580) -
`Lucene.Net.Documents.DateTools` - Added support for `TimeZoneInfo` when
converting to/from string
+* [#580](https://github.com/apache/lucenenet/pull/580) -
`Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat`: Added
constructor overload to format a date without a time.
+* [#580](https://github.com/apache/lucenenet/pull/580) -
`Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat`: Added
`NumericRepresentation` property to set the representation to use for both
`Format()` and `Parse()`.
+* [#580](https://github.com/apache/lucenenet/pull/580) -
`Lucene.Net.QueryParsers` - Added support for `TimeZoneInfo` when converting
to/from string (Classic and Flexible query parsers)
+* [#580](https://github.com/apache/lucenenet/pull/580) -
`Lucene.Net.QueryParsers.Classic.QueryParserBase`: Use `TryParse()` instead of
`Parse()` to parse numeric values. Use the current culture, but fall back to
invariant culture.
+* [#582](https://github.com/apache/lucenenet/pull/582) - **PERFORAMANCE:**
`Lucene.Net.Search.FieldCacheRangeFilter`: Eliminated boxing in `Equals()` check
+* [#584](https://github.com/apache/lucenenet/pull/584) -
`Lucene.Net.Expressions.SimpleBindings`: Added collection initializer support.
Updated `DistanceFacetsExample` and `ExpressionAggregationFacetsExample` to
demonstrate usage.
+* [#586](https://github.com/apache/lucenenet/pull/586) - **SWEEP:** Removed
conditional compilation for MSTest/xUnit and the following features:
+ - TESTFRAMEWORK_MSTEST
+ - TESTFRAMEWORK_NUNIT
+ - TESTFRAMEWORK_XUNIT
+ - FEATURE_INSTANCE_TESTDATA_INITIALIZATION
+ - FEATURE_INSTANCE_CODEC_IMPERSONATION
+* [#587](https://github.com/apache/lucenenet/pull/587) - Fixed the
documentation comments for `LuceneTestCase`
+* [#587](https://github.com/apache/lucenenet/pull/587) - Added some
documentation for random seed configuration
+* [#587](https://github.com/apache/lucenenet/pull/587) - Implemented some
missing console logging
+* [#588](https://github.com/apache/lucenenet/pull/588) - `lucene-cli`: Added
embedded readme to NuGet package and updated build to update docs with release
version number
+* [#590](https://github.com/apache/lucenenet/pull/590) - **SWEEP:** Added
links to release notes and documentation in each NuGet package, and corrected
package descriptions.
+* [#594](https://github.com/apache/lucenenet/pull/594) - Website: Improved
content of contributing/source code page to show current information about the
Apache's two-master setup and provided additional information about
contributing source code with many links to external references. (Thanks
@rclabo)
+* [#595](https://github.com/apache/lucenenet/pull/595) - Website: Added "How
to Setup Java Debugging" page. (Thanks @rclabo)
+* [#602](https://github.com/apache/lucenenet/pull/602) - Shifted most of the
`IndexWriter` tests to `Lucene.Net.Tests._I-J` to make both
`Lucene.Net.Tests._E-I` and `Lucene.Net.Tests._I-J` run less than 2 minutes.
This cuts the total time on Azure DevOps by around 5 minutes.
+* [#603](https://github.com/apache/lucenenet/pull/603),
[#601](https://github.com/apache/lucenenet/pull/601) - Upgraded build tools for
`LuceneDocsPlugins` project
+* Upgraded J2N NuGet package dependency to 2.0.0
+* Upgraded ICU4N NuGet package dependency to 60.1.0-alpha.356
+* Upgraded RandomizedTesting.Generators NuGet package dependency to 2.7.8
+* Upgraded Morfologik.Stemming NuGet package dependency to 2.1.7
+* [#611](https://github.com/apache/lucenenet/pull/611) - **PERFORMANCE:**
Fixed `NIOFSDirectory` bottleneck on multiple instances by switching from a
static shared lock to a lock per `FileStream` instance.
+* [#611](https://github.com/apache/lucenenet/pull/611) - `Lucene.Net.Store`:
Updated the `FSDirectory` documentation to remove irrelevant Java info and
replace it with performance characteristics of the .NET implementation.
+* [#613](https://github.com/apache/lucenenet/pull/613),
[#256](https://github.com/apache/lucenenet/pull/256),
[#604](https://github.com/apache/lucenenet/pull/604),
[#605](https://github.com/apache/lucenenet/pull/605) - **PERFORMANCE:**
Factored out `WeakDictionary<TKey, TValue>` in favor of weak events using
[Prism.Core](https://github.com/PrismLibrary/Prism)
+* [#617](https://github.com/apache/lucenenet/pull/617) - **SWEEP:** Changed
"== null" to "is null"
+* [#619](https://github.com/apache/lucenenet/pull/619) - **SWEEP:**
`Lucene.Net.Spatial`: Enabled nullable reference type support
+* [#619](https://github.com/apache/lucenenet/pull/619) - **SWEEP:**
`Lucene.Net.Spatial`: Added guard clauses, where appropriate
+
+### New Features
+* [#288](https://github.com/apache/lucenenet/pull/288),
[#547](https://github.com/apache/lucenenet/pull/547) -
`Lucene.Net.TestFramework`: Fixed random seed functionality so it is
repeatable, so random tests can be more easily debugged. The random seed and
how to configure a test assembly to repeat the same result is appended to the
output message of the test (which becomes visible upon failure). The
`J2N.Randomizer` class was used to provide random numbers, which uses the same
implement [...]
+* [#588](https://github.com/apache/lucenenet/pull/588),
[#612](https://github.com/apache/lucenenet/pull/612) - `lucene-cli`: Added
multitarget support for .NET Core 3.1, .NET 5.0, and .NET 6.0
+* [#592](https://github.com/apache/lucenenet/pull/592) - Added [Source
Link](https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/sourcelink)
support and added documentation page to the API docs.
+* [#593](https://github.com/apache/lucenenet/pull/593),
[#596](https://github.com/apache/lucenenet/pull/596),
[#364](https://github.com/apache/lucenenet/pull/364) - Added Cross-Platform
Build Script
\ No newline at end of file