Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Erweiterung lakebase_tokenizer fügt der PostgreSQL-Volltextsuche in Lakebase eine konfigurierbare Ganzwort-Tokenisierung hinzu. Textsuchkonfigurationen, die mit der Erweiterung gebaut wurden, arbeiten mit to_tsvector, dem @@ Operator, Rangfunktionen und GIN-Indexen. Du kannst auch generierte tsvector Werte für lakebase_text das BM25-Ranking verwenden.
Die Erweiterung stellt die tokenizer_wholeword Vorlage über die Standard-Textsuchwörterbuchoberfläche von PostgreSQL bereit. Die Vorlage unterstützt Kleinbuchstaben-Umwandlung, Unicode-Normalisierung, Akzententfernung, englische Possessiv-Entfernung, benutzerdefinierte Stoppwörter, Eins-zu-eins-Synonyme und englischen Stemming.
Installieren
Installiere die Erweiterung in deiner Datenbank. Die Beispiele auf dieser Seite verwenden ein dediziertes Schema, um die Erweiterungsobjekte leicht zu identifizieren:
CREATE SCHEMA IF NOT EXISTS tokenizer_ext;
CREATE EXTENSION IF NOT EXISTS lakebase_tokenizer WITH SCHEMA tokenizer_ext;
Die Verlängerung ist verlegbar. Du kannst es bei der Installation durch ein anderes Schema ersetzen tokenizer_ext .
Erweiterung aktualisieren
Eine neue Lakebase Search-Version kann Funktionen, Korrekturen und Leistungsverbesserungen hinzufügen. PostgreSQL aktualisiert die installierte Erweiterungsversion nicht automatisch. Überprüfen Sie die installierten und aktuellsten verfügbaren Versionen:
SELECT installed_version, default_version
FROM pg_available_extensions
WHERE name = 'lakebase_tokenizer';
Aktualisieren Sie die Erweiterung auf die aktuellste verfügbare Version:
ALTER EXTENSION lakebase_tokenizer UPDATE;
ALTER EXTENSION regeneriert keine gespeicherten tsvector Werte und stellt keine abhängigen GIN oder lakebase_bm25 Indizes wieder auf. Wenn ein Update die Tokenisierungsausgabe ändert, regeneriere wiederhergestellte Werte tsvector und folge den Release Notes für die erforderliche Indexpflege.
Schneller Start mit tokenizer_wholeword
Das folgende Beispiel erstellt ein Wörterbuch aus der Vorlage tokenizer_wholeword und mappt dann gängige PostgreSQL-Token-Typen in einer Textsuchkonfiguration darauf:
CREATE TEXT SEARCH DICTIONARY documents_dict (
TEMPLATE = tokenizer_ext.tokenizer_wholeword,
Lowercase = 'true',
StripAccents = 'true',
Stemmer = 'english'
);
CREATE TEXT SEARCH CONFIGURATION documents_cfg (COPY = pg_catalog.simple);
ALTER TEXT SEARCH CONFIGURATION documents_cfg
ALTER MAPPING FOR asciiword, word, numword, hword_numpart, hword_part, hword_asciipart
WITH documents_dict;
Verwenden Sie die Konfiguration, um einen tsvector, erstellen Sie einen GIN-Index und führen Sie Volltextabfragen aus:
CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
body TEXT NOT NULL,
search_vector TSVECTOR GENERATED ALWAYS AS (
to_tsvector('documents_cfg', body)
) STORED
);
INSERT INTO documents (body) VALUES
('Cats are running near the café.'),
('A dog is sleeping in the house.');
CREATE INDEX documents_search_idx ON documents USING gin (search_vector);
SELECT id, body
FROM documents
WHERE search_vector @@ plainto_tsquery('documents_cfg', 'running café');
Verwenden Sie dieselbe Textsuchkonfiguration für Dokumente und Abfragen, sodass beide Seiten dieselbe Tokenisierungsstrategie und dieselbe Optionen anwenden.
Vorlage: tokenizer_wholeword
So funktioniert es
Für jedes Token, das vom Textsuchparser von PostgreSQL an das Wörterbuch übergeben wird, tokenizer_wholeword werden folgende Operationen angewendet:
-
Lowercase: Konvertiere das Token in Kleinbuchstaben. -
Normalize: Anwenden Sie Unicode-Normalisierung. -
StripAccents: Entfernen Sie Akzente. -
EnglishPossessive: Entfernen Sie ein englisches possessives Suffix, wenn mindestens ein Zeichen übrig bleibt. -
Stopwords: Kein Lexem ausgeben und die Verarbeitung stoppen, wenn das Token mit einem konfigurierten Stoppwort übereinstimmt. Das Token wird aus dem erzeugtentsvectorToken weggelassen. -
Synonyms: Senden Sie den konfigurierten Ersatz aus und stoppen Sie die Verarbeitung, wenn das Token mit einem Synonym übereinstimmt. -
Stemmer: Wenn kein Synonym gematcht und Stemming aktiviert ist, wenden Sie den englischen stemmer an.
Fügen Sie Stoppwörter und Synonyme hinzu
Die Vorlage tokenizer_wholeword kann benutzerdefinierte Stopwörter und Synonyme aus von Erweiterungen verwalteten SQL-Tabellen lakebase_tokenizer_stopwords laden und lakebase_tokenizer_synonyms. Die Spalte name gruppiert die Zeilen zu einer Menge, die du mit der Option " Stopwords oder Synonyms " auswählen kannst.
INSERT INTO tokenizer_ext.lakebase_tokenizer_stopwords (name, word) VALUES
('app_stopwords', 'the'),
('app_stopwords', 'and'),
('app_stopwords', 'or');
INSERT INTO tokenizer_ext.lakebase_tokenizer_synonyms (name, word, synonym) VALUES
('app_synonyms', 'usa', 'united_states'),
('app_synonyms', 'uk', 'united_kingdom');
Beziehen Sie sich auf die Mengen, wenn Sie ein tokenizer_wholeword Wörterbuch erstellen oder verändern:
ALTER TEXT SEARCH DICTIONARY documents_dict (
Stopwords = 'app_stopwords',
Synonyms = 'app_synonyms'
);
Die Erweiterung vergleicht Verschlusswörter und Quellwörter von Synonymen mit jedem Token nach Anwendung Lowercasevon , Normalize, StripAccents, und EnglishPossessive, jedoch vor der Anwendung Stemmer. Katalogeinträge werden nicht automatisch umgewandelt, daher werden sie in der exakt von den aktivierten Optionen erzeugten Form gespeichert:
-
Lowercase = 'true'Mit , verwenden Sie Kleinbuchstaben. Mit , muss dieLowercase = 'false'Großschreibung mit dem Token übereinstimmen. - Mit aktiviert speichern Sie
NormalizeEinträge im ausgewählten Unicode-Normalisierungsformular. - Mit , speichere
StripAccents = 'true'die akzentgestreifte Form. Zum Beispiel speicherncafe, um zu übereinstimmencafé. - Lagern Sie die Form vor dem Stimmen auf. Zum Beispiel entspricht
runningmitStemmer = 'english', einrunEintrag nicht mit . Fügen Sie diesen Token zum Filter hinzurunningoder ersetzen Sie es.
Set-Namen können bis zu 256 Bytes enthalten. Wörter und Synonyme können bis zu 1024 Bytes umfassen. Jedes benannte Stopwort oder Synonymset kann bis zu 100.000 Zeilen enthalten.
Ein Synonymersatz wird genau so emittiert, wie gespeichert, und wird vom Stemmer nicht verarbeitet. Synonyme unterstützen einen Ersatz für jedes Quellwort. Um einen Mehrwortersatz als ein Lexem darzustellen, verwendet man einen Separator wie einen Unterstrich, wie in united_states.
Nach der Änderung einer Menge muss der Besitzer jedes Wörterbuchs, das auf die Menge verweist, ein no-op ALTER TEXT SEARCH DICTIONARY ausführen, um ein Nachladen zu erzwingen:
ALTER TEXT SEARCH DICTIONARY documents_dict (dummy);
Die Option dummy existiert nicht auf tokenizer_wholeword. Das Weglassen eines Wertes bittet PostgreSQL, diese nicht vorhandene Option zu entfernen, was den Cache ungültig macht, ohne dass eine der konfigurierten Wörterbuchoptionen geändert wird.
Nach dem Neuladen des Wörterbuchs generieren Sie die gespeicherten tsvector Werte, indem Sie die Quellzeilen neu schreiben:
UPDATE documents SET body = body;
Rollen und Zugang
Verwenden Sie zwei Rollen, um den Anwendungszugriff von der Tokenizer-Verwaltung zu trennen:
-
app_roleverwendet bestehende Wörterbücher. Es mussUSAGEdie relevanten Schemata undSELECTdie Erweiterungskatalogtabellen enthalten, aber es muss nicht die Wörterbücher besitzen. -
tokenizer_adminverwaltet Stop-Word- und Synonym-Sets, erstellt und besitzt Wörterbücher und Textsuchkonfigurationen und führt nach Änderung einer Menge den Reload-Befehl aus.
Gewähren Sie Zugriff auf das Erweiterungsschema und die Katalogtabellen:
GRANT USAGE ON SCHEMA tokenizer_ext TO app_role, tokenizer_admin;
GRANT SELECT ON
tokenizer_ext.lakebase_tokenizer_stopwords,
tokenizer_ext.lakebase_tokenizer_synonyms
TO app_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON
tokenizer_ext.lakebase_tokenizer_stopwords,
tokenizer_ext.lakebase_tokenizer_synonyms
TO tokenizer_admin;
tokenizer_admin auch benötigt CREATE das Schema, in dem Wörterbücher und Textsuchkonfigurationen gespeichert sind. Erstelle diese Objekte als tokenizer_admin, oder übertrage ihr Eigentum daran. Schreibzugriff auf die Katalogtabellen gewährt keinen Eigentum an bestehenden Wörterbüchern.
Options
Spezifizieren Sie tokenizer_wholeword Optionen in CREATE TEXT SEARCH DICTIONARY oder ALTER TEXT SEARCH DICTIONARY. Die Optionsnamen sind nicht groß- und kleinschreibungsabhängig.
| Auswahl | Typ | Vorgabe | Description |
|---|---|---|---|
Lowercase |
boolean | true |
Wandelt Token in Kleinbuchstaben um, bevor weitere Operationen angewendet werden.
Stemmer = 'english' erfordert Lowercase = 'true'. |
Normalize |
NFC, NFD, NFKC, NFKD oder none |
none |
Verwendet das ausgewählte Unicode-Normalisierungsformular. Dies kanonisiert die Darstellung, entfernt jedoch keine Charaktere. Zum Beispiel NFC macht präkomponiert é und e gefolgt von einem kombinierten akuten Akzentäquivalent. |
EnglishPossessive |
boolean | true |
Entfernt ein nachlaufendes 's, ’s, oder 's wenn mindestens ein Zeichen vor dem Suffix steht. Ein eigenständiges Suffix bleibt unverändert. |
StripAccents |
boolean | false |
Wendet NFKD-Normalisierung an und entfernt kombinierte Markierungen.
café wird beispielsweise zu cafe. Wenn diese Option aktiviert ist, lassen Sie weg, Normalize da der NFKD-Schritt jede separate Unicode-Normalisierung überflüssig macht. |
Stopwords |
Setname | Nichts | Verwendet die benannte Menge aus tokenizer_ext.lakebase_tokenizer_stopwords. |
Synonyms |
Setname | Nichts | Verwendet die benannte Menge von Eins-zu-eins-Ersetzungen aus tokenizer_ext.lakebase_tokenizer_synonyms. |
Stemmer |
english |
Nichts | Verwendet den mitgelieferten englischen Stemmer Snowball 3.1.0. Verzichte auf diese Option, um das Stimmen zu deaktivieren. Der Stemmer enthält keine Stop-Word-Liste. |
Katalogtabellen
| Tabelle | Columns | Description |
|---|---|---|
lakebase_tokenizer_stopwords |
name text, word text |
Stores mit Namen Stop-Word-Sets für Tokenizer-Vorlagen, die . Stopwordsunterstützen. Der Primärschlüssel ist (name, word). |
lakebase_tokenizer_synonyms |
name text, word text, synonym text |
Stores benannten Eins-zu-eins-Ersatz für Tokenizer-Vorlagen, die .Synonyms Der Primärschlüssel ist (name, word). |
Nutze das BM25-Ranking mit lakebase_text
Textsuchkonfigurationen, die mit lakebase_tokenizer erstellt wurden, erzeugen Standard-PostgreSQL-Werte tsvector , die mit kompatibel lakebase_textsind. Um die Relevanzrangordnung von BM25 und die Top-K-Abfrage zu verwenden, erstellen Sie einen Index lakebase_bm25 in derselben tsvector Spalte. Für Installation, Indexerstellung und Abfragesyntax siehe lakebase_text.