Volltextsuche in PostgreSQL

Prev Next

Die Volltextsuche (FTS) ermöglicht einen ausgereiften Ansatz bei der Textsuche in Totara, insbesondere innerhalb des Katalogs. Details zur Einrichtung mit PostgresSQL finden Sie auf dieser Seite.  

Standardmäßig unterstützt die PostgreSQL-Datenbank die Volltextsuche in Phrasen, Wörtern und Teilsuchen vom Anfang des Wortes (z. B. "Edu*" gibt Elemente zurück, die das Wort "Ausbildung" enthalten).

Sprache

PostgreSQL verwendet standardmäßig die englische Konfiguration für die Volltextsuche (FTS). Eine Liste der verfügbaren Optionen finden Sie in den Ergebnissen von "SELECT cfgname FROM pg_ts_config;". Beispiel:

$CFG->dboptions['ftslanguage'] = 'english';
 $CFG->dboptions['ftslanguage'] = 'simple';
$CFG->dboptions['ftslanguage'] = 'german';

PostgreSQL unterstützt keine japanischen und anderen Sprachen mit sehr kurzen Wörtern ohne Leerzeichen dazwischen. Aktivieren Sie die folgende Einstellung, um eine grundlegende experimentelle Unterstützung dieser Sprachen zu erhalten:

$CFG->dboptions['fts3bworkaround'] = true;
FTS-Tabellen können nach jeder dieser Änderungen erneut ausgefüllt werden, indem Sie Folgendes ausführen:
php admin/cli/fts_repopulate_tables.php

Mindestlänge des Suchbegriffs

PostgreSQL hat keine spezifischen Standardlängenanforderungen und kann alle Wörter finden, vorausgesetzt, sie sind Wörter, die häufig in einem Wörterbuch gefunden werden. 

Wörter stoppen

Stoppwörter sind Wörter, die von Index- und Suchanfragen ausgeschlossen werden. Sie hängen von der Sprache ab, die bei der Indizierung und Suche verwendet wird, sowie von der Wörterbuchpräsenz für die Datenbankinstallation.

Wenn ein Nutzer beispielsweise nach "Hotels in Wellington" sucht, schließt das System "in" aus der Suche aus.

Weitere Details zu PostgreSQL-Stoppwörtern finden Sie in der PostgreSQL-Hilfedokumentation.

Morphologische Suche

Ein wichtiger Aspekt ist, dass PostgreSQL keine erweiterten Sprachfunktionen unterstützt. Daher müssen Sie ein bestimmtes Hunspell-Wörterbuch für die Sprache installieren, die Sie verwenden möchten. Es gibt einige Orte, von denen Sie die Sprachen herunterladen können, z. B. LibreOffice Extensions und Mozilla Addons.

Unten finden Sie ein Beispiel für die Aktivierung der morphologischen Suche in PostgreSQL in Ubuntu 18.04 für die schwedische Sprache. Dies ist kein definitiver Leitfaden, sondern ein Beispiel dafür, wie dies in einem bestimmten Fall erfolgen kann. Weitere Informationen finden Sie in der PostgreSQL-Dokumentation.

Wenn wir beispielsweise die schwedische Sprache verwenden, funktioniert Folgendes nicht sofort:

-- This will return {äppelträd} as lexemes instead of {äppelträd,äppel,träd} as we would expect
select * from ts_debug('pg_catalog.swedish', 'äppelträd');

Damit PostgreSQL die obigen Daten korrekt interpretieren kann, müssen Sie das schwedische Hunspell-Wörterbuch wie folgt installieren:

  1. Gehen Sie zu Mozilla Addons und laden Sie das schwedische Wörterbuch herunter (klicken Sie mit der rechten Maustaste auf die Schaltfläche Zu Firefox hinzufügen und klicken Sie auf den Link Speichern unter).
  2. Die heruntergeladene Datei extrahieren (manchmal hat die heruntergeladene Datei keine Erweiterung, also einfach .oxt hinzufügen)
  3. Kopieren Sie die Dateien *.aff, *.dic in das Verzeichnis tsearch_data von PostgreSQL und benennen Sie sie in sv_se.affix und sv_se.dict um.
  4. Bestätigen Sie, dass die Dateien UTF-8-codiert sind. Im Folgenden wird die aktuelle Codierung der Dateien ausgedruckt: 
file -i sv_se.*

If the files are not UTF-8 encoded you can execute the following commands (just replace ISO-8859-1 with the encoding output from above):

iconv -f ISO-8859-1 -t UTF-8//TRANSLIT sv_se.affix -o sv_se.affix
iconv -f ISO-8859-1 -t UTF-8//TRANSLIT sv_se.dict -o sv_se.dict

  1. Führen Sie die folgenden Befehle in PostgreSQL aus:
CREATE TEXT SEARCH DICTIONARY sv_hunspell(
 Template = ispell,
 DictFile = sv_se,
 AffFile = sv_se,
 Stopwords = swedish
 );
 
 CREATE TEXT SEARCH CONFIGURATION sv_hunspell(parser = default);
ALTER TEXT SEARCH CONFIGURATION sv_hunspell ALTER MAPPING FOR asciiword, asciihword, hword_asciipart,word, hword, hword_part WITH sv_hunspell;
Oben wird das Wörterbuch installiert und Sie können es dann wie folgt verwenden:
-- This will return the expected {äppelträd,äppel,träd} lexemes:
select * from ts_debug('sv_hunspell', 'äppelträd');

 

Join the Totara Community for more resources to help you get the most out of Totara. 


© Copyright 2025 Totara Learning Solutions. All rights reserved. Some content originally obtained via GPLv3 license and continues to be available under GPLv3. All other content is the sole copyright of Totara Learning Solutions.