# ============================================================ # JonasSearch Crawler Gamma 0.1 # ============================================================ # PostgreSQL JONASSEARCH_DB_HOST=127.0.0.1 JONASSEARCH_DB_PORT=25432 JONASSEARCH_DB_NAME=jonassearch JONASSEARCH_DB_USER=jonassearch JONASSEARCH_DB_PASSWORD=MeinStarkesPasswort123! # Crawler JONASSEARCH_START_URL=https://reddit.com JONASSEARCH_WORKERS=4 # Mindestabstand zwischen Requests zur gleichen Domain JONASSEARCH_DELAY=3.0 # Host-Scheduling: blockierte/rate-limitierte Domains werden automatisch # übersprungen und später erneut versucht (mit exponentiellem Backoff). # Kandidaten, die pro Claim-Runde in der Queue geprüft werden #JONASSEARCH_CLAIM_BATCH=25 # Maximale Anzahl geprüfter Kandidaten pro Claim #JONASSEARCH_CLAIM_SCAN_LIMIT=200 # Bekannte blockierte/rate-limitierte Hosts werden direkt in der # Claim-Query ausgeschlossen (verhindert, dass ein blocked Host mit # vielen URLs die restliche Queue verdeckt). Obergrenze für diese Liste; # die am längsten blockierten Hosts werden zuerst berücksichtigt. #JONASSEARCH_CLAIM_BUSY_HOST_LIMIT=1000 # Maximale Versuche pro URL (transiente Fehler werden erneut eingereiht), # bevor der Eintrag endgültig failed wird #JONASSEARCH_MAX_ATTEMPTS=5 # Wartezeiten über dieser Grenze (Sekunden) werden nicht inline geschlafen: # das Item wird zurückgestellt und eine andere Domain gecrawlt #JONASSEARCH_MAX_INLINE_WAIT=10 # Obergrenze für die Wartezeit, wenn gerade kein Host crawlbar ist #JONASSEARCH_MAX_IDLE_SLEEP=30 # robots.txt Cache JONASSEARCH_ROBOTS_CACHE_SECONDS=86400 # HTTP JONASSEARCH_TIMEOUT=20 JONASSEARCH_MAX_CONTENT_LENGTH=5242880 # User-Agent JONASSEARCH_USER_AGENT=JonasSearchBot/0.1 (+https://jonassearch.local/bot) # ============================================================ # Rolling Updates (Launcher + Crawler) # ============================================================ # Version dieser Crawler-Codebasis (NICHT die Deployment-Generation). # Muss bei jedem verteilten Crawler-Änderung erhöht werden. JONASSEARCH_CRAWLER_VERSION=5 # Wie oft jeder Crawler außerhalb der Transaktionen nach einer neuen # Deployment-Generation sieht (Sekunden). Der Check setzt nur ein # internes Signal; beendet wird sich erst am nächsten sicheren Commit. JONASSEARCH_UPDATE_CHECK_SECONDS=30 # Verzeichnis für gestagte Crawler-Releases (releases//crawler.py). # Relative Pfade gelten relativ zur crawler.py. #JONASSEARCH_RELEASES_DIR=releases # Launcher: Wohin mit neuen Versionen? Eine der beiden Quellen setzen, # sonst kann der Launcher nur extern abgelegte Releases prüfen/aktivieren. #JONASSEARCH_UPDATE_SOURCE_URL=https://example.com/jonassearch/releases #JONASSEARCH_UPDATE_SOURCE_DIR=/srv/jonassearch/new-release # Launcher: Wartezeit nach Crash (Sekunden), bevor der Crawler neu startet #JONASSEARCH_LAUNCHER_ERROR_RESTART_DELAY=10 # Launcher: Wartezeit vor dem Neustart nach einem Update-Zyklus #JONASSEARCH_LAUNCHER_RESTART_DELAY=2 # ============================================================ # Suchmaschine (search/) – Port 8083 # ============================================================ # PostgreSQL-Textsuch-Konfiguration. MUSS zur Konfiguration passen, # mit der der DB-Trigger den Suchvektor (pages.search_vector) baut – # laut DB-Doku: 'simple'. Ansonsten finden die Queries nichts. JONASSEARCH_TS_CONFIG=simple # tsvector-Spalte der Tabelle `pages` erzwingen (optional, # wird automatisch erkannt) #JONASSEARCH_VECTOR_COLUMN=search_vector # HTTP-API + Weboberfläche (search/api.py) JONASSEARCH_API_HOST=0.0.0.0 JONASSEARCH_API_PORT=8083 # Ranking: ts_rank_cd-Gewichte (Titel=A, Überschriften=B, Inhalt=C) #JONASSEARCH_RANK_WEIGHTS=A=1.0,B=0.6,C=0.3,D=0.1 # Ranking: Aktualitätsbonus (Faktor auf den Text-Rang) #JONASSEARCH_FRESHNESS_WEIGHT=0.25 #JONASSEARCH_FRESHNESS_HALF_LIFE_DAYS=180 # Ranking: ts_rank_cd-Normalisierung (Bitmaske). 8 = Rang / # (1 + log Dokumentlänge) – riesige Seiten dominieren sonst automatisch. # 0 = keine Normalisierung. #JONASSEARCH_RANK_NORMALIZATION=8 # Fallback bei sehr häufigen Begriffen: volles Ranking wird bei # Zeitüberschreitung auf die ersten N Kandidaten (Indexreihenfolge) # begrenzt, damit die Antwort immer kommt. #JONASSEARCH_MAX_RANK_CANDIDATES=5000 # Schutz der großen DB: Statement-Timeouts (ms) #JONASSEARCH_STATEMENT_TIMEOUT_MS=10000 #JONASSEARCH_COUNT_TIMEOUT_MS=4000 # Paginierung Websuche #JONASSEARCH_RESULTS_PER_PAGE=10 #JONASSEARCH_MAX_RESULTS_PER_PAGE=50 # Bildersuche (Tab "Bilder", /api/images) # Bildkacheln pro Ergebnisseite bzw. Maximum pro Seite #JONASSEARCH_IMAGE_RESULTS_PER_PAGE=40 #JONASSEARCH_MAX_IMAGE_RESULTS_PER_PAGE=100 # Höchstens so viele Bilder pro Quellseite anzeigen (verhindert, dass # Seiten mit vielen Bildern die Ergebnisse dominieren) #JONASSEARCH_IMAGES_PER_SOURCE_PAGE=4