lucene-rs 0.2.0

A Rust port of Apache Lucene's core: Lucene104 postings, BM25, block-max top-k search (MaxScore, block-max conjunction), segments, merges, analyzers and a query parser
Documentation
# Lint policy

lucene-rs uses the strict clippy configuration from [xearch](https://github.com/pc-style/xearch):
`clippy::pedantic` and `clippy::nursery` denied, plus `unwrap_used`, `expect_used`, `panic`,
`indexing_slicing`, `arithmetic_side_effects`, `as_conversions`, `string_slice` and friends.
CI runs `cargo clippy --workspace --all-targets --all-features -- -D warnings`.

## Where lints are relaxed, and why

**Numeric kernels.** A few modules are line-by-line ports of Lucene's bit-level code and sit on
the hottest paths (decoding 256-value blocks, skipping, scoring, collecting):

- `src/codec/*` (ForUtil/PForUtil, postings writer and reader, byte I/O)
- `src/search/{bulk,term_scorer,collector,util,scorer}.rs`
- `src/sim.rs`, `src/index/{buffer,terms,segment_writer}.rs`

These modules start with one `#![allow(...)]` that relaxes only `indexing_slicing`,
`arithmetic_side_effects`, `as_conversions` and the `cast_*` lints. Rewriting ~1,300 index,
offset and cast sites with checked operations would cost measurable speed and break the 1:1
correspondence with the Java source, which is what makes the port reviewable against Lucene.
Every other lint, including `unwrap_used`, `expect_used` and `panic`, still applies there.

Slice indexing in those modules is still bounds-checked: a corrupt index makes a search panic,
it never reads out of bounds. Files carry CRC32 footers; `DirectoryReader::check_integrity`
verifies them.

**`unsafe_code`.** Set to `deny` rather than `forbid`, with exactly two audited exceptions:

1. `index/segment.rs`: memory-mapping index files (`memmap2::Mmap::map`). Index files are
   written once and never modified in place.
2. `codec/postings_reader.rs`: an AVX2 prefix sum for doc-ID deltas (compiled only with
   `target_feature = "avx2"`; a scalar fallback is used otherwise). About 3% on conjunctions
   and disjunctions.

**Generated code.** `src/codec/forutil_gen.rs` is generated by `scripts/gen_forutil.py` and
allows all lints.

**Tests.** Test files relax unwrap/indexing/numeric lints at file level; the randomized
reference model is plain float math over synthetic data. `clippy.toml` also enables clippy's
`allow-*-in-tests` options.