Files
search/search
2026-09-02 20:06:04 +02:00
..
2026-09-02 19:54:49 +02:00
2026-09-02 20:06:04 +02:00
2026-09-02 19:54:49 +02:00
2026-09-02 20:06:04 +02:00
2026-09-02 19:54:49 +02:00

JonasSearch – Suchmaschine

Volltextsuche über den Index, den crawler.py in PostgreSQL aufgebaut hat. Die Engine sucht in der Tabelle pages und nutzt dabei PostgreSQLs Volltextsuche (tsvector / tsquery).

Starten

CLI:

python3 search/cli.py "raspberry pi"
python3 search/cli.py "postgres" --domain example.com --page 2
python3 search/cli.py "amplifier" --json

HTTP-API + Suchseite:

python3 search/api.py
# Suchseite:  http://localhost:8082/
# JSON-API:   http://localhost:8082/search?q=raspberry%20pi

Als Bibliothek:

from search import SearchEngine

engine = SearchEngine()
result = engine.search("postgres", page=1, per_page=10)

for hit in result.hits:
    print(hit.position, hit.title, hit.url)

Funktionsweise

  • Index-Nutzung: Die Engine sucht automatisch die tsvector-Spalte der Tabelle pages (z. B. search_vector, die ein Trigger pflegt) und durchsucht sie per @@-Operator. Fehlt eine solche Spalte, wird der Suchvektor zur Laufzeit aus title + headings + content berechnet – die Suche funktioniert dann genauso, nur langsamer.
  • Ranking: Sortierung nach ts_rank absteigend, danach nach Crawl-Zeitpunkt.
  • Snippets: ts_headline erzeugt Ausschnitte, in denen die Suchbegriffe mit <mark> hervorgehoben sind.
  • Präfix-Suche: Jeder Begriff wird mit :* gesucht, „raspberr" findet also auch „raspberry".
  • UND-Verknüpfung: Mehrere Begriffe müssen alle vorkommen.
  • Paginierung: --page / --per-page (max. 50).
  • Filter: --domain (exakte Domain) und --tld (z. B. .de).

Umgebungsvariablen

Wie der Crawler (siehe .env.example):

Variable Bedeutung Standard
JONASSEARCH_DB_HOST DB-Host 127.0.0.1
JONASSEARCH_DB_PORT DB-Port 25432
JONASSEARCH_DB_NAME DB-Name jonassearch
JONASSEARCH_DB_USER DB-User jonassearch
JONASSEARCH_DB_PASSWORD DB-Passwort leer
JONASSEARCH_TS_CONFIG PostgreSQL-Textsuch-Konfiguration german
JONASSEARCH_VECTOR_COLUMN tsvector-Spalte erzwingen (optional) automatisch
JONASSEARCH_API_HOST Bind-Adresse der API 0.0.0.0
JONASSEARCH_API_PORT Port der API 8082

Abhängigkeiten

  • psycopg2 (DB-Zugriff)
  • python-dotenv (.env-Datei)
  • flask (nur für search/api.py)