Files
janssen/Soubory/enrich_fulltext_v1.2.md

1.7 KiB

enrich_fulltext_v1.2

Verze: 1.2 Datum: 2026-06-03 Skript: enrich_fulltext_v1.2.py

Změna proti v1.1

Velký XLSX (#400 MDD3003_EAT detail report_30jun25.xlsx, 5 242 128 znaků textu) způsobil pád:

psycopg.errors.ProgramLimitExceeded:
  string is too long for tsvector (1114090 bytes, max 1048575 bytes)

PostgreSQL tsvectortvrdý limit ~1 MB binární velikosti — nelze obejít.

Řešení: tsv se generuje z prvních 800 000 znaků sloupce body:

tsv tsvector GENERATED ALWAYS AS (
    to_tsvector('soubory'::regconfig, left(coalesce(body, ''), 800000))
) STORED
  • sloupec body zůstává plný (až 5 MB) — pro náhledy, snippet, ts_headline
  • vyhledávání (tsv @@ q) ignoruje obsah za 800 000. znakem
  • u rozsáhlých XLSX/PDF (např. data exporty) je 800 KB stále víc než 100 000 slov — pro fulltext bohatě stačí

Migrace

SCHEMA_SQL při startu zkontroluje, zda současný výraz tsv obsahuje left(. Pokud ne (starý sloupec z v1.0/v1.1):

  1. dropne documents_tsv_gin index
  2. dropne sloupec tsv
  3. přidá nový s left(body, 800000)
  4. index se vytvoří znovu na konci SCHEMA_SQL

Bezpečné spustit opakovaně.

extractor_version

Posunuto na 1.2 → všechny řádky z v1.0/v1.1 se přeparsují (potřebné už proto, že migrace tsv změnila co je v indexu).

Vše ostatní

Beze změny proti v1.1:

  • DOCX fallback přes raw word/document.xml
  • NUL byte strip
  • Limity souborů (PDF 500 MB, XLSX 200 MB, ostatní 300 MB), text max 5 MB
  • Inkrementálně podle sha256 + extractor_version

Spuštění

python U:\PythonProject\Janssen\Soubory\enrich_fulltext_v1.2.py