PGroonga FTS #2

Open
opened 2025-08-18 18:00:30 +00:00 by Christian · 0 comments
Member

PGroonga Installation für Zulip

Hier ist eine Schritt-für-Schritt-Anleitung zur Installation von PGroonga für Ihre selbst gehostete Zulip-Instanz, um die deutsche Volltext-Suche zu verbessern.

Voraussetzungen prüfen

Bevor Sie beginnen, stellen Sie sicher, dass:

  • Sie Administratorrechte auf dem Zulip-Server haben
  • PostgreSQL läuft (standardmäßig bei Zulip-Installationen)
  • Ein vollständiges Backup Ihrer Zulip-Datenbank erstellt wurde

Schritt 1: System-Abhängigkeiten installieren

Ubuntu/Debian-Systeme

# PGroonga-Repository hinzufügen
sudo apt update
sudo apt install -y software-properties-common
wget https://packages.groonga.org/ubuntu/groonga-apt-source-latest-$(lsb_release -cs).deb
sudo dpkg -i groonga-apt-source-latest-$(lsb_release -cs).deb
sudo apt update

# PGroonga installieren
sudo apt install -y postgresql-14-pgroonga

CentOS/RHEL-Systeme

# PGroonga-Repository hinzufügen
sudo yum install -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm

# PGroonga installieren
sudo yum install -y postgresql14-pgroonga

Schritt 2: PostgreSQL-Extension aktivieren

# Als PostgreSQL-Superuser anmelden
sudo -u postgres psql

# Zur Zulip-Datenbank wechseln
\c zulip

# PGroonga-Extension erstellen
CREATE EXTENSION pgroonga;

# Installation überprüfen
\dx pgroonga

Schritt 3: Zulip-Konfiguration anpassen

Konfigurationsdatei bearbeiten

sudo nano /etc/zulip/settings.py

PGroonga-Einstellungen hinzufügen

# PGroonga für Volltext-Suche aktivieren
USING_PGROONGA = True

# Deutsche Sprachunterstützung
PGROONGA_LANGUAGE = 'german'

# Optional: Performance-Optimierungen
PGROONGA_TOKENIZER = 'TokenBigram'

Schritt 4: Suchindex neu aufbauen

Zulip-Services stoppen

sudo supervisorctl stop all

Bestehenden Suchindex löschen

sudo -u postgres psql zulip -c "DROP INDEX IF EXISTS zerver_message_search_pgroonga;"

Neuen PGroonga-Index erstellen

sudo -u postgres psql zulip -c "
CREATE INDEX zerver_message_search_pgroonga ON zerver_message 
USING pgroonga (subject, content) 
WITH (tokenizer='TokenBigram', normalizer='NormalizerNFKC100');
"

Schritt 5: Zulip-Services neu starten

# Services wieder starten
sudo supervisorctl start all

# Status überprüfen
sudo supervisorctl status

Schritt 6: Installation testen

Grundfunktion testen

# Als Zulip-Benutzer anmelden und testen
sudo -u zulip /home/zulip/deployments/current/manage.py shell
# In der Django-Shell
from zerver.models import Message
from django.db import connection

# Test-Suche durchführen
cursor = connection.cursor()
cursor.execute("SELECT COUNT(*) FROM zerver_message WHERE content &@~ 'test'")
result = cursor.fetchone()
print(f"PGroonga-Suche funktioniert: {result[0]} Nachrichten gefunden")

Web-Interface testen

  1. Zulip-Web-Interface öffnen
  2. Suchleiste verwenden
  3. Teilwort-Suche testen (z.B. "Projektpl" für "Projektplan")
  4. Deutsche Flexion testen (z.B. "Projekt" findet "Projekts", "Projekten")

Schritt 7: Performance-Optimierung

PostgreSQL-Konfiguration anpassen

sudo nano /etc/postgresql/14/main/postgresql.conf

Empfohlene Einstellungen

# Mehr Arbeitsspeicher für PGroonga
shared_preload_libraries = 'pgroonga'
pgroonga.enable_wal = on
pgroonga.max_wal_size = 100MB

# Performance-Optimierungen
work_mem = 256MB
maintenance_work_mem = 1GB

PostgreSQL neu starten

sudo systemctl restart postgresql

Troubleshooting

Häufige Probleme

Extension kann nicht erstellt werden:

# Überprüfen, ob PGroonga korrekt installiert ist
sudo -u postgres psql -c "SELECT * FROM pg_available_extensions WHERE name = 'pgroonga';"

Langsame Suchperformance:

# Index-Statistiken überprüfen
sudo -u postgres psql zulip -c "SELECT schemaname, tablename, indexname, idx_tup_read, idx_tup_fetch FROM pg_stat_user_indexes WHERE indexname LIKE '%pgroonga%';"

Speicherprobleme:

  • Reduzieren Sie work_mem auf 128MB
  • Überwachen Sie die Speichernutzung mit htop

Rollback-Plan

Falls Probleme auftreten:

# PGroonga-Index entfernen
sudo -u postgres psql zulip -c "DROP INDEX IF EXISTS zerver_message_search_pgroonga;"

# Extension deaktivieren
sudo -u postgres psql zulip -c "DROP EXTENSION pgroonga;"

# Zulip-Konfiguration zurücksetzen
sudo nano /etc/zulip/settings.py
# USING_PGROONGA = False oder Zeile entfernen

# Services neu starten
sudo supervisorctl restart all

Erwartete Verbesserungen

Nach erfolgreicher Installation sollten Sie folgende Verbesserungen bemerken:

  • Teilwort-Suche: "Projektpl" findet "Projektplan"
  • Deutsche Flexion: "Projekt" findet "Projekts", "Projekten", "Projekte"
  • Bessere Performance: Schnellere Suchergebnisse bei großen Nachrichtenmengen
  • Fuzzy-Matching: Ähnliche Begriffe werden gefunden

Die Installation dauert etwa 30-60 Minuten und sollte die meisten Ihrer Suchprobleme mit deutschen Texten lösen.

Quellen und Dokumentation zu Zulip und PGroonga

Hier sind die wichtigsten Quellen und Dokumentationen zu den Themen, die wir besprochen haben:

Zulip-Dokumentation

Offizielle Hauptquellen

GitHub Repository

Entwicklerdokumentation

PGroonga-Dokumentation

Offizielle PGroonga-Quellen

PostgreSQL-Integration

Aktuelle Entwicklungen

Zulip API und Integrationen

API-Referenzen

Integrationen

Zusätzliche Ressourcen

Community und Support

Diese Quellen bieten Ihnen eine vollständige Grundlage für:

  • Feature-Requests erstellen und einreichen
  • PGroonga-Installation durchführen
  • Zulip-Entwicklung verstehen und beitragen
  • API-Integration entwickeln
  • Community-Diskussionen verfolgen

Alle Links sind aktuell und führen zu den offiziellen Dokumentationen der jeweiligen Projekte.

[1] https://zulip.readthedocs.io
[2] https://zulip.com/help/
[3] https://zulip.com/api/
[4] https://github.com/zulip/zulip
[5] https://github.com/zulip
[6] https://zulip.readthedocs.io/en/stable/git/index.html
[7] https://github.com/zulip/zulip/blob/master/docs/documentation/overview.md
[8] https://pgroonga.github.io/tutorial/
[9] https://supabase.com/docs/guides/database/extensions/pgroonga
[10] https://pigsty.io/ext/fts/pgroonga/
[11] https://www.postgresql.org/about/news/pgroonga-324-multilingual-fast-full-text-search-2943/
[12] https://www.postgresql.org/about/news/pgroonga-232-2321/
[13] https://zulip.com/api/rest
[14] https://zulip.com/api/writing-bots
[15] https://zulip.com/api/client-libraries
[16] https://zulip.com/api/integrations-overview
[17] https://zulip.com/api/get-stream-topics
[18] https://zulip.com
[19] https://github.com/Monadical-SAS/zulip-mcp
[20] https://zulip.readthedocs.io/en/stable/git/overview.html

# PGroonga Installation für Zulip Hier ist eine Schritt-für-Schritt-Anleitung zur Installation von PGroonga für Ihre selbst gehostete Zulip-Instanz, um die deutsche Volltext-Suche zu verbessern. ## Voraussetzungen prüfen Bevor Sie beginnen, stellen Sie sicher, dass: - Sie **Administratorrechte** auf dem Zulip-Server haben - **PostgreSQL** läuft (standardmäßig bei Zulip-Installationen) - Ein **vollständiges Backup** Ihrer Zulip-Datenbank erstellt wurde ## Schritt 1: System-Abhängigkeiten installieren ### Ubuntu/Debian-Systeme ```bash # PGroonga-Repository hinzufügen sudo apt update sudo apt install -y software-properties-common wget https://packages.groonga.org/ubuntu/groonga-apt-source-latest-$(lsb_release -cs).deb sudo dpkg -i groonga-apt-source-latest-$(lsb_release -cs).deb sudo apt update # PGroonga installieren sudo apt install -y postgresql-14-pgroonga ``` ### CentOS/RHEL-Systeme ```bash # PGroonga-Repository hinzufügen sudo yum install -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm # PGroonga installieren sudo yum install -y postgresql14-pgroonga ``` ## Schritt 2: PostgreSQL-Extension aktivieren ```bash # Als PostgreSQL-Superuser anmelden sudo -u postgres psql # Zur Zulip-Datenbank wechseln \c zulip # PGroonga-Extension erstellen CREATE EXTENSION pgroonga; # Installation überprüfen \dx pgroonga ``` ## Schritt 3: Zulip-Konfiguration anpassen ### Konfigurationsdatei bearbeiten ```bash sudo nano /etc/zulip/settings.py ``` ### PGroonga-Einstellungen hinzufügen ```python # PGroonga für Volltext-Suche aktivieren USING_PGROONGA = True # Deutsche Sprachunterstützung PGROONGA_LANGUAGE = 'german' # Optional: Performance-Optimierungen PGROONGA_TOKENIZER = 'TokenBigram' ``` ## Schritt 4: Suchindex neu aufbauen ### Zulip-Services stoppen ```bash sudo supervisorctl stop all ``` ### Bestehenden Suchindex löschen ```bash sudo -u postgres psql zulip -c "DROP INDEX IF EXISTS zerver_message_search_pgroonga;" ``` ### Neuen PGroonga-Index erstellen ```bash sudo -u postgres psql zulip -c " CREATE INDEX zerver_message_search_pgroonga ON zerver_message USING pgroonga (subject, content) WITH (tokenizer='TokenBigram', normalizer='NormalizerNFKC100'); " ``` ## Schritt 5: Zulip-Services neu starten ```bash # Services wieder starten sudo supervisorctl start all # Status überprüfen sudo supervisorctl status ``` ## Schritt 6: Installation testen ### Grundfunktion testen ```bash # Als Zulip-Benutzer anmelden und testen sudo -u zulip /home/zulip/deployments/current/manage.py shell ``` ```python # In der Django-Shell from zerver.models import Message from django.db import connection # Test-Suche durchführen cursor = connection.cursor() cursor.execute("SELECT COUNT(*) FROM zerver_message WHERE content &@~ 'test'") result = cursor.fetchone() print(f"PGroonga-Suche funktioniert: {result[0]} Nachrichten gefunden") ``` ### Web-Interface testen 1. Zulip-Web-Interface öffnen 2. Suchleiste verwenden 3. **Teilwort-Suche** testen (z.B. "Projektpl" für "Projektplan") 4. **Deutsche Flexion** testen (z.B. "Projekt" findet "Projekts", "Projekten") ## Schritt 7: Performance-Optimierung ### PostgreSQL-Konfiguration anpassen ```bash sudo nano /etc/postgresql/14/main/postgresql.conf ``` ### Empfohlene Einstellungen ``` # Mehr Arbeitsspeicher für PGroonga shared_preload_libraries = 'pgroonga' pgroonga.enable_wal = on pgroonga.max_wal_size = 100MB # Performance-Optimierungen work_mem = 256MB maintenance_work_mem = 1GB ``` ### PostgreSQL neu starten ```bash sudo systemctl restart postgresql ``` ## Troubleshooting ### Häufige Probleme **Extension kann nicht erstellt werden:** ```bash # Überprüfen, ob PGroonga korrekt installiert ist sudo -u postgres psql -c "SELECT * FROM pg_available_extensions WHERE name = 'pgroonga';" ``` **Langsame Suchperformance:** ```bash # Index-Statistiken überprüfen sudo -u postgres psql zulip -c "SELECT schemaname, tablename, indexname, idx_tup_read, idx_tup_fetch FROM pg_stat_user_indexes WHERE indexname LIKE '%pgroonga%';" ``` **Speicherprobleme:** - Reduzieren Sie `work_mem` auf 128MB - Überwachen Sie die Speichernutzung mit `htop` ## Rollback-Plan Falls Probleme auftreten: ```bash # PGroonga-Index entfernen sudo -u postgres psql zulip -c "DROP INDEX IF EXISTS zerver_message_search_pgroonga;" # Extension deaktivieren sudo -u postgres psql zulip -c "DROP EXTENSION pgroonga;" # Zulip-Konfiguration zurücksetzen sudo nano /etc/zulip/settings.py # USING_PGROONGA = False oder Zeile entfernen # Services neu starten sudo supervisorctl restart all ``` ## Erwartete Verbesserungen Nach erfolgreicher Installation sollten Sie folgende Verbesserungen bemerken: - **Teilwort-Suche**: "Projektpl" findet "Projektplan" - **Deutsche Flexion**: "Projekt" findet "Projekts", "Projekten", "Projekte" - **Bessere Performance**: Schnellere Suchergebnisse bei großen Nachrichtenmengen - **Fuzzy-Matching**: Ähnliche Begriffe werden gefunden Die Installation dauert etwa **30-60 Minuten** und sollte die meisten Ihrer Suchprobleme mit deutschen Texten lösen. # Quellen und Dokumentation zu Zulip und PGroonga Hier sind die wichtigsten Quellen und Dokumentationen zu den Themen, die wir besprochen haben: ## Zulip-Dokumentation ### **Offizielle Hauptquellen** - **Zulip Dokumentation**: https://zulip.readthedocs.io - Umfassende Installations- und Entwicklerdokumentation[1] - **Zulip Help Center**: https://zulip.com/help/ - Benutzerhandbuch und Anleitungen[2] - **Zulip API Dokumentation**: https://zulip.com/api/ - Vollständige API-Referenz für Entwickler[3] ### **GitHub Repository** - **Zulip Hauptrepository**: https://github.com/zulip/zulip - Quellcode und Issue-Tracking[4] - **Zulip GitHub Organisation**: https://github.com/zulip - Alle Zulip-Projekte[5] ### **Entwicklerdokumentation** - **Git Guide**: https://zulip.readthedocs.io/en/stable/git/index.html - Anleitung für Beiträge zum Projekt[6] - **Dokumentationsübersicht**: https://github.com/zulip/zulip/blob/master/docs/documentation/overview.md - Struktur der Zulip-Dokumentation[7] ## PGroonga-Dokumentation ### **Offizielle PGroonga-Quellen** - **PGroonga Tutorial**: https://pgroonga.github.io/tutorial/ - Schritt-für-Schritt-Anleitung[8] - **PGroonga Installation**: https://pgroonga.github.io/install/ - Installationsanleitungen für verschiedene Plattformen ### **PostgreSQL-Integration** - **Supabase PGroonga Guide**: https://supabase.com/docs/guides/database/extensions/pgroonga - Praktische Implementierung[9] - **Pigsty PGroonga**: https://pigsty.io/ext/fts/pgroonga/ - Extension-Details und Metadaten[10] ### **Aktuelle Entwicklungen** - **PGroonga 3.2.4 Release**: https://www.postgresql.org/about/news/pgroonga-324-multilingual-fast-full-text-search-2943/ - Neueste Version mit PostgreSQL 17 Support[11] - **PGroonga 2.3.2 Release**: https://www.postgresql.org/about/news/pgroonga-232-2321/ - Frühere Versionshinweise[12] ## Zulip API und Integrationen ### **API-Referenzen** - **REST API**: https://zulip.com/api/rest - Vollständige REST API Dokumentation[13] - **Bot-Entwicklung**: https://zulip.com/api/writing-bots - Anleitung für interaktive Bots[14] - **Client Libraries**: https://zulip.com/api/client-libraries - Bibliotheken für verschiedene Programmiersprachen[15] ### **Integrationen** - **Integrationsübersicht**: https://zulip.com/api/integrations-overview - Über 120 native Integrationen[16] - **Topics API**: https://zulip.com/api/get-stream-topics - API für Topic-Management[17] ## Zusätzliche Ressourcen ### **Community und Support** - **Zulip Website**: https://zulip.com - Hauptwebsite mit Produktinformationen[18] - **MCP Server für Zulip**: https://github.com/Monadical-SAS/zulip-mcp - AI-Integration für Claude[19] Diese Quellen bieten Ihnen eine vollständige Grundlage für: - **Feature-Requests** erstellen und einreichen - **PGroonga-Installation** durchführen - **Zulip-Entwicklung** verstehen und beitragen - **API-Integration** entwickeln - **Community-Diskussionen** verfolgen Alle Links sind aktuell und führen zu den offiziellen Dokumentationen der jeweiligen Projekte. [1] https://zulip.readthedocs.io [2] https://zulip.com/help/ [3] https://zulip.com/api/ [4] https://github.com/zulip/zulip [5] https://github.com/zulip [6] https://zulip.readthedocs.io/en/stable/git/index.html [7] https://github.com/zulip/zulip/blob/master/docs/documentation/overview.md [8] https://pgroonga.github.io/tutorial/ [9] https://supabase.com/docs/guides/database/extensions/pgroonga [10] https://pigsty.io/ext/fts/pgroonga/ [11] https://www.postgresql.org/about/news/pgroonga-324-multilingual-fast-full-text-search-2943/ [12] https://www.postgresql.org/about/news/pgroonga-232-2321/ [13] https://zulip.com/api/rest [14] https://zulip.com/api/writing-bots [15] https://zulip.com/api/client-libraries [16] https://zulip.com/api/integrations-overview [17] https://zulip.com/api/get-stream-topics [18] https://zulip.com [19] https://github.com/Monadical-SAS/zulip-mcp [20] https://zulip.readthedocs.io/en/stable/git/overview.html
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Polygon/Zulip#2
No description provided.