Chore: bump Docker index version to 1 (Tantivy); add language change detection

- Reset index_version to 1 — Tantivy is a full format change so
  versioning restarts from scratch; all existing v9 installs trigger
  an automatic reindex on next container start
- Add PAPERLESS_SEARCH_LANGUAGE change detection: track raw env var in
  .index_language so changing the language setting auto-reindexes;
  raw env var (not resolved language) avoids false positives from
  OCR_LANGUAGE inference
- docs/administration.md: clarify that Docker handles the post-upgrade
  reindex automatically; bare metal users need to run
  document_index reindex manually; add that as step 4 in the
  bare metal upgrade guide

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Trenton H
2026-03-30 13:55:20 -07:00
co-authored by Claude Sonnet 4.6
parent fdf08bdc43
commit ae494d4b6a
2 changed files with 42 additions and 7 deletions
@@ -3,9 +3,14 @@
declare -r log_prefix="[init-index]"
declare -r index_version=9
# Version 1: Tantivy backend (replaces Whoosh; resets versioning from scratch)
declare -r index_version=1
declare -r data_dir="${PAPERLESS_DATA_DIR:-/usr/src/paperless/data}"
declare -r index_version_file="${data_dir}/.index_version"
declare -r index_language_file="${data_dir}/.index_language"
# Track the raw env var (not the resolved language) so inference changes
# don't cause spurious reindexes — only explicit setting changes trigger one.
declare -r search_language="${PAPERLESS_SEARCH_LANGUAGE:-}"
update_index () {
echo "${log_prefix} Search index out of date. Updating..."
@@ -13,16 +18,24 @@ update_index () {
if [[ -n "${USER_IS_NON_ROOT}" ]]; then
python3 manage.py document_index reindex --no-progress-bar
echo ${index_version} | tee "${index_version_file}" > /dev/null
echo "${search_language}" | tee "${index_language_file}" > /dev/null
else
s6-setuidgid paperless python3 manage.py document_index reindex --no-progress-bar
echo ${index_version} | s6-setuidgid paperless tee "${index_version_file}" > /dev/null
echo "${search_language}" | s6-setuidgid paperless tee "${index_language_file}" > /dev/null
fi
}
if [[ (! -f "${index_version_file}") ]]; then
if [[ ! -f "${index_version_file}" ]]; then
echo "${log_prefix} No index version file found"
update_index
elif [[ $(<"${index_version_file}") != "$index_version" ]]; then
echo "${log_prefix} index version updated"
elif [[ $(<"${index_version_file}") != "${index_version}" ]]; then
echo "${log_prefix} Index version updated"
update_index
elif [[ ! -f "${index_language_file}" ]]; then
echo "${log_prefix} No language file found"
update_index
elif [[ $(<"${index_language_file}") != "${search_language}" ]]; then
echo "${log_prefix} Search language changed"
update_index
fi