Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'estensione lakebase_tokenizer aggiunge una tokenizzazione configurabile per intera parola alla ricerca full-text di PostgreSQL su Lakebase. Le configurazioni di ricerca testuale costruite con l'estensione lavorano con to_tsvector, l'operatore @@ , le funzioni di ranking e gli indici GIN. Puoi anche usare i valori generati tsvector con lakebase_text per il ranking BM25.
L'estensione fornisce il tokenizer_wholeword template tramite l'interfaccia standard del dizionario di ricerca testuale di PostgreSQL. Il template supporta la conversione minuscola, la normalizzazione Unicode, la rimozione dell'accento, la rimozione possessiva inglese, le parole di stop personalizzate, sinonimi uno a uno e lo stemming inglese.
Install
Installa l'estensione nel tuo database. Gli esempi in questa pagina utilizzano uno schema dedicato per rendere gli oggetti di estensione facili da identificare:
CREATE SCHEMA IF NOT EXISTS tokenizer_ext;
CREATE EXTENSION IF NOT EXISTS lakebase_tokenizer WITH SCHEMA tokenizer_ext;
L'estensione è spostabile. Puoi sostituirlo tokenizer_ext con un altro schema quando lo installi.
Aggiornare l'estensione
Una nuova versione di Lakebase Search può aggiungere funzionalità, correzioni e miglioramenti delle prestazioni. PostgreSQL non aggiorna automaticamente la versione installata dell'estensione. Controlla le versioni installate e le più recenti disponibili:
SELECT installed_version, default_version
FROM pg_available_extensions
WHERE name = 'lakebase_tokenizer';
Aggiorna l'estensione all'ultima versione disponibile:
ALTER EXTENSION lakebase_tokenizer UPDATE;
ALTER EXTENSION non rigenera i valori memorizzati tsvector né ricostruisce GIN o lakebase_bm25 indici dipendenti. Se un aggiornamento modifica l'output di tokenizzazione, rigenerare i valori memorizzati tsvector e rispettare le note di rilascio per eventuali riserve di manutenzione dell'indice.
Inizio rapido con tokenizer_wholeword
Il seguente esempio crea un dizionario dal tokenizer_wholeword template, poi mappa i tipi comuni di token PostgreSQL ad esso in una configurazione di ricerca testuale:
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;
Usa la configurazione per produrre un tsvector, crea un indice GIN ed esegui query full-text:
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é');
Usa la stessa configurazione di ricerca testuale per documenti e query, così che entrambe le parti applichino la stessa strategia e opzioni di tokenizzazione.
Modello: tokenizer_wholeword
Come funziona
Per ogni token passato al dizionario dal parser di ricerca testuale di PostgreSQL, tokenizer_wholeword applica queste operazioni:
-
Lowercase: Converti il token in minuscolo. -
Normalize: Applicare la normalizzazione Unicode. -
StripAccents: Rimuovere gli accenti. -
EnglishPossessive: Rimuovere un suffisso possessivo inglese quando rimane almeno un carattere. -
Stopwords: Non emettere lexema e interrompere l'elaborazione se il token corrisponde a una parola di arresto configurata. Il token viene omesso dal generatoretsvector. -
Synonyms: Emette il sostituto configurato e interrompi l'elaborazione se il token corrisponde a un sinonimo. -
Stemmer: Se non è abilitato alcun sinonimo corrispondente e stemming, applicare lo stemmer inglese.
Aggiungi parole di stop e sinonimi
Il tokenizer_wholeword template può caricare stop-word personalizzati e sinonimi da tabelle lakebase_tokenizer_stopwords SQL gestite dalle estensioni e lakebase_tokenizer_synonymsda . La name colonna raggruppa le righe in un insieme che selezioni con l'opzione Stopwords o Synonyms dizionario.
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');
Fai riferimento agli insiemi quando crei o modifichi un tokenizer_wholeword dizionario:
ALTER TEXT SEARCH DICTIONARY documents_dict (
Stopwords = 'app_stopwords',
Synonyms = 'app_synonyms'
);
L'estensione confronta le parole stop e le parole sorgente sinonimie con ciascun token dopo aver applicato , , , e EnglishPossessive, ma prima di applicare Stemmer. StripAccentsNormalizeLowercase Le voci del catalogo non vengono trasformate automaticamente, quindi memorizzale nella forma esatta prodotta da quelle opzioni abilitate:
- Con
Lowercase = 'true', usa voci minuscole. ConLowercase = 'false', la maiuscolo deve corrispondere al token. - Con abilitato, memorizza
Normalizele voci nel modulo di normalizzazione Unicode selezionato. - Con
StripAccents = 'true', conserva la forma con accento striato. Ad esempio, memorizzacafeper farlo corrisponderecaféa . - Conserva il modulo prima di stallarlo. Ad esempio, con
Stemmer = 'english', unarunvoce non corrisponderunninga . Aggiungirunningal filtro o sostituisci quel token.
I nomi dei set possono contenere fino a 256 byte. Parole e sinonimi possono contenere fino a 1024 byte. Ogni stop-word o insieme di sinonimi nominati può contenere fino a 100.000 righe.
Un sostituto sinonimo viene emesso esattamente come immagazzinato e non viene processato dal stemmer. I sinonimi supportano una sostituzione per ogni parola di origine. Per rappresentare una sostituzione multiparola come un unico lexema, si usa un separatore come un sottolineo, come in united_states.
Dopo aver cambiato un set, il proprietario di ogni dizionario che fa riferimento al set deve eseguire un no-op ALTER TEXT SEARCH DICTIONARY per forzare un ricaricamento:
ALTER TEXT SEARCH DICTIONARY documents_dict (dummy);
L'opzione dummy non esiste su tokenizer_wholeword. Omettendo un valore, PostgreSQL chiede a PostgreSQL di rimuovere questa opzione inesistente, che invalida la cache senza modificare nessuna delle opzioni configurate dal dizionario.
Dopo aver ricaricato il dizionario, rigenerare i valori memorizzati tsvector riscrivendo le righe sorgente:
UPDATE documents SET body = body;
Ruoli e accesso
Usa due ruoli per separare l'accesso alle applicazioni dall'amministrazione del tokenizer:
-
app_roleutilizza dizionari esistenti. DeveUSAGEessere utilizzato sugli schemi rilevanti eSELECTsulle tabelle del catalogo delle estensioni, ma non deve possedere i dizionari. -
tokenizer_admingestisce insiemi stop-word e sinonimi, crea e possiede dizionari e configurazioni di ricerca testuale, ed esegue il comando reload dopo aver cambiato un set.
Concedi l'accesso allo schema di estensione e alle tabelle del catalogo:
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 Serve anche CREATE nello schema dove sono memorizzati dizionari e configurazioni di ricerca testuale. Crea questi oggetti come tokenizer_admin, oppure trasferiscine la proprietà. L'accesso di scrittura alle tabelle cataloghe non garantisce la proprietà dei dizionari esistenti.
Options
Specifica tokenizer_wholeword le opzioni in CREATE TEXT SEARCH DICTIONARY o ALTER TEXT SEARCH DICTIONARY. I nomi delle opzioni non sono distinti dalla maiuscola e maiuscola.
| Option | Tipo | Impostazione predefinita | Description |
|---|---|---|---|
Lowercase |
Boolean | true |
Converte i token in minuscole prima di applicare altre operazioni.
Stemmer = 'english' richiede Lowercase = 'true'. |
Normalize |
NFC, NFD, NFKC, NFKD o none |
none |
Applica il modulo di normalizzazione Unicode selezionato. Questo canonica la rappresentazione ma non rimuove i caratteri. Ad esempio, NFC rende precomposto é e e seguito da un equivalente di accento acuto combinato. |
EnglishPossessive |
Boolean | true |
Rimuove un elemento finale 's, ’s, o 's quando almeno un carattere precede il suffisso. Un suffisso autonomo rimane invariato. |
StripAccents |
Boolean | false |
Applica la normalizzazione NFKD e rimuove i marchi di combinazione. Ad esempio, café diventa cafe. Quando questa opzione è abilitata, omettela Normalize perché il passaggio NFKD rende ridondante qualsiasi normalizzazione Unicode separata. |
Stopwords |
Nome del set | Nessuno | Usa l'insieme nominato da tokenizer_ext.lakebase_tokenizer_stopwords. |
Synonyms |
Nome del set | Nessuno | Utilizza l'insieme nominato dei sostituti uno a uno da tokenizer_ext.lakebase_tokenizer_synonyms. |
Stemmer |
english |
Nessuno | Utilizza lo stemmer inglese Snowball 3.1.0 incluso in bundle. Ometti questa opzione per disabilitare lo stemming. Lo stemmer non include una lista di parole finali. |
Tabelle catalogo
| Table | Columns | Description |
|---|---|---|
lakebase_tokenizer_stopwords |
name text, word text |
Gli store hanno nominato stop-word set per template tokenizer che supportano Stopwords. la chiave primaria è (name, word). |
lakebase_tokenizer_synonyms |
name text, word text, synonym text |
I negozi hanno nominato sostituti uno a uno per template di tokenizzatore che supportano Synonyms. la chiave primaria è (name, word). |
Usa il ranking BM25 con lakebase_text
Le configurazioni di ricerca testuale costruite con lakebase_tokenizer producono valori standard PostgreSQL tsvector compatibili con lakebase_text. Per usare la classifica di rilevanza BM25 e il recupero top-K, crea un lakebase_bm25 indice sulla stessa tsvector colonna. Per l'installazione, la creazione di indici e la sintassi delle query, vedi lakebase_text.