Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

0.17.0 Release Notes

This documents the 0.17.0 release candidate. Publication of this manual is not a release tag, a merged-PR assertion or first-customer production approval.

0.17.0 optimizes initial fulltext index construction and reconstruction (#1261). It retains the existing posting-list storage format, analyzers, BM25 scoring and synchronous maintenance of subsequent document updates.

Grouped fulltext construction

Instead of loading and rewriting a growing posting list for every document, the builder stages document postings, sorts them and writes each complete term list once. Document encounter order is preserved within each list. Node and relationship indexes use the same builder; graph scan errors propagate rather than silently producing an incomplete index.

Sorting reuses PATINADB_SORTMERGE_RUN_BYTES (default 128 MiB) and temporary files under the process temporary directory (TMPDIR on Unix). This bounds the sort run buffer, not total process memory: merge readers, the largest posting list, serialization and database caches need additional RAM. Provide temporary disk space; ordinary completion, cancellation and errors remove scratch files, but a hard process kill can leave temporary directories behind.

Index creation remains synchronous and uses the existing atomic DDL boundary. No thread-pool setting, asynchronous update mode or on-disk migration is added. Existing indexes need not be rebuilt for compatibility.

Validation and scope

On 334,770 real Apache Jira summaries, standard analyzer, one summary property, local Ryzen 7 3800X/NVMe, the paired 2026-09-10 runs under #1261 measured:

Metric0.16.0 baseline0.17.0
Complete initial index build1727.563 s7.950 s
Peak build RSS876.578 MiB464.113 MiB
Allocated database directory after build1375772672 bytes477433856 bytes
Mixed 2 reads/s + 0.1 updates/s read p9074.563 ms66.816 ms

The measured build is 217.31 times faster; this is one complete build per implementation, not a hardware-independent guarantee. Warm Top-10/20 p90 across the tested forms is 2.173–63.868 ms. No search algorithm change is claimed.

Differential tests cover all four analyzers, in-memory and spilled construction, posting bytes, query scores, subsequent updates and deletion. A regression guard checks one final write per distinct term list. The Jira benchmark checks exact hit sets, independent single-term BM25, Top-10/20, update visibility and reopen. Measured results are recorded in docs/fulltext-benchmark-1261.md under #1261.

This is not a qualification of 10M tickets, large ticket bodies, WAN fan-out, high-rate writes or concurrent queries during initial construction. Subsequent updates still rewrite affected lists. See Full-Text Search.