1.7 KiB
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 tsvector má tvrdý 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
bodyzů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):
- dropne
documents_tsv_ginindex - dropne sloupec
tsv - přidá nový s
left(body, 800000) - 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