Added
WhitespaceAnalyser: splits only on whitespace, preserving punctuation and case; no token filters applied.KeywordAnalyser: treats the complete field value as a single token.SimpleAnalyser: letter-only tokenisation with lowercase normalisation and no stop-word removal.WhitespaceTokeniser: single-pass span scanner splitting onchar.IsWhiteSpacewith correct offsets.KeywordTokeniser: returns empty or one full-span token.LetterTokeniser: splits on non-letter characters (digits and punctuation excluded) with correct offsets.LengthFilter: removes tokens whose text length falls outside an inclusive min/max range; in-place compaction with no extra allocation.TruncateTokenFilter: truncates token text to a configurable maximum length; adjusts end offset deterministically.UniqueTokenFilter: removes duplicate tokens globally or within the same position; preserves first occurrence order.DecimalDigitFilter: normalises Unicode decimal digits (Arabic-Indic, extended Arabic-Indic, full-width) to ASCII digits; no-op tokens are not reallocated.ReverseStringFilter: reverses token text; single-character tokens are skipped; offsets are unchanged.ElisionFilter: removes elided article prefixes before straight or curly apostrophes; defaults to the standard French elision set; start offset is adjusted to the post-apostrophe position.KeywordMarkerFilter: marks configured token texts for stemming bypass in compatible analysers.ShingleFilter: emits contiguous token shingles with configurable min/max size, optional unigram output, and configurable separator; shingle offsets span the first to last source token.WordDelimiterFilter: splits compound tokens on delimiter punctuation, case-change boundaries, acronym-word boundaries, and letter-digit boundaries; supports preserve-original, concatenate-words, and concatenate-numbers modes.- Benchmark suites
analysis-parityandanalysis-filterscovering lightweight analyser throughput vs Lucene.NET and per-filter allocation on no-op and mutating paths. - Native AOT compatibility metadata for the core package, with a dedicated
Rowles.LeanCorpus.Example.NativeAotsmoke executable and localscripts\aot-smoke.ps1validation script.
Changed
- Core JSON persistence now uses source-generated
System.Text.Jsonmetadata for commit files, segment metadata, index stats, segment stats, search analytics, and slow-query log entries. - Regex-based character filters and regexp queries no longer force compiled regular expressions, improving Native AOT compatibility.
StemmedAnalysernow accepts an optionalKeywordMarkerFilterto skip stemming for marked tokens.LanguageAnalysernow accepts an optionalKeywordMarkerFilterto skip stemming for marked tokens.
Fixed
- Reduced hot-path allocations in
WhitespaceAnalyser,KeywordAnalyser, andSimpleAnalyserby reusing result buffers and caching repeated token text, matching the low-allocation pattern used byStandardAnalyser.