Examine 3.10.1 and 4.0.1 released
Examine 3.10.1 and 4.0.1 are out on NuGet now. Both are patch releases and the main reason for them is a fix for an analyzer issue that could cause queries to be parsed with the wrong analyzer.
The analyzer fix
This was reported in #613 and it's been lurking for a long time, but it's an edge case that only shows up if something uses the index's analyzer before the index's field value types have been resolved on startup. With a normal startup that doesn't happen, which is why it hasn't come up before. LuceneIndex.FieldAnalyzer is lazily created and cached, but the per-field analyzer mappings were populated lazily too, so if the analyzer was used first, the PerFieldAnalyzerWrapper would cache the default analyzer for those fields. That stuck around for the life of the index, so any searcher created from it kept using the default analyzer for fields that were configured to use something else.
So if you had a field configured with a KeywordAnalyzer, a native query like this:
someField:"contentPage"
could end up parsed as:
someField:contentpage
which is the StandardAnalyzer lower casing it, and then you get no results and a bit of head scratching.
The fix in #621 is quite small: the field value types are now resolved before the analyzer wrapper is constructed, so it can't cache a fallback analyzer for a configured field. There's a regression test for it too.
Other changes
- A few small allocation improvements in
OrderedDictionary.Values,LuceneIndex.GetFieldNamesandLuceneSearchQueryBase. These came from the agentic perf workflows I have running on the repo, which open PRs for this sort of thing that I then review. - The docs site is updated for v4 and the v1/v2 docs are now marked as unsupported.
A new release process
These are also the first releases shipped with the new release process. Previously I'd tag a release, wait for the build, download the zip of packages, unzip them and push them to NuGet from my terminal. Now pushing a tag builds the packages and then waits for me to approve the deployment in GitHub. Once approved, it publishes to NuGet with trusted publishing (so no API keys sitting around) and creates the GitHub release with the packages attached. I also switched versioning from GitVersion to MinVer, which just uses the tag, which is all I wanted anyway.
That's mostly only interesting to me, but it does mean releases should happen a bit more often now that there's less toil involved :)
Release notes for each are on GitHub: v3.10.1 and v4.0.1.
Happy Searching!