mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-08-19 09:13:24 +00:00
The v2 whoosh schema had plural notes/custom_fields TEXT fields (notes indexed the joined note texts, custom_fields indexed joined "name : value" strings), so "notes:foo" and "custom_fields:foo" were valid fielded searches in released paperless and through the deleted translation layer. On the whoosh-compat registry those names are JSON fields addressable only via subpaths, and the bare spelling silently demoted to an unfielded text search of the words themselves, matching unrelated documents that merely contain "notes" or "custom". parse_user_query now rewrites the bare prefixes live to the same targets migration 0017 chose for the singular whoosh-era spellings: notes: becomes notes.note: and custom_fields: becomes custom_fields.value:, with 0017's lookbehind guard so subpath spellings and words merely ending in the prefix are untouched. Prefix substitution only; values ride through unchanged, and every value shape lands in a documented outcome downstream (ranges, wildcards and exists on JSON subpaths are typed errors, not crashes). The inherited trade-off stands: custom_fields.value: drops the name-matching half of v2's combined indexing, with custom_fields.name: available for it. Acceptance tests pin the rewrite with decoy documents whose content contains the literal prefix words, which the old demotion matched and the fielded search must not, plus untouched-subpath controls. docs/usage.md documents the bare prefixes as subpath shorthand. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WMsn6DgzbvSqh1pwy66VVF