Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A lakebase_tokenizer extensão adiciona tokenização configurável de palavra inteira à busca de texto integral do PostgreSQL no Lakebase. Configurações de busca por texto construídas com a extensão trabalham com to_tsvector, o @@ operador, funções de ranking e índices GIN. Você também pode usar os valores gerados tsvector com lakebase_text para o ranking do BM25.
A extensão fornece o tokenizer_wholeword modelo por meio da interface padrão de dicionário de busca de texto do PostgreSQL. O template suporta conversão minúscula, normalização Unicode, remoção de acento, remoção possessiva em inglês, palavras de parada personalizadas, sinônimos um-para-um e stemming em inglês.
Install
Instale a extensão no seu banco de dados. Os exemplos nesta página usam um esquema dedicado para facilitar a identificação dos objetos de extensão:
CREATE SCHEMA IF NOT EXISTS tokenizer_ext;
CREATE EXTENSION IF NOT EXISTS lakebase_tokenizer WITH SCHEMA tokenizer_ext;
A extensão é realocável. Você pode substituir tokenizer_ext por outro esquema quando instalar.
Atualizar a extensão
Uma nova versão do Lakebase Search pode adicionar recursos, correções e melhorias de desempenho. O PostgreSQL não atualiza automaticamente a versão instalada da extensão. Verifique as versões instaladas e as mais recentes disponíveis:
SELECT installed_version, default_version
FROM pg_available_extensions
WHERE name = 'lakebase_tokenizer';
Atualize a extensão para a versão mais recente disponível:
ALTER EXTENSION lakebase_tokenizer UPDATE;
ALTER EXTENSION não regenera valores armazenados tsvector nem reconstrói GIN ou lakebase_bm25 índices dependentes. Se uma atualização alterar a saída da tokenização, regenere os valores armazenados tsvector e siga as notas de lançamento para qualquer manutenção de índice necessária.
Começo rápido com tokenizer_wholeword
O exemplo a seguir cria um dicionário a partir do tokenizer_wholeword modelo, depois mapeia tipos comuns de tokens PostgreSQL para ele em uma configuração de busca por texto:
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;
Use a configuração para produzir um tsvector, crie um índice GIN e execute consultas em texto completo:
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é');
Use a mesma configuração de busca por texto para documentos e consultas, de modo que ambos os lados apliquem a mesma estratégia e opções de tokenização.
Modelo: tokenizer_wholeword
Como funciona
Para cada token passado ao dicionário pelo parser de busca de texto do PostgreSQL, tokenizer_wholeword aplica-se as seguintes operações:
-
Lowercase: Converta o token para minúscula. -
Normalize: Aplicar a normalização Unicode. -
StripAccents: Remova os sotaques. -
EnglishPossessive: Remover um sufixo possessivo inglês quando pelo menos um caractere permanecer. -
Stopwords: Não emita lexema e pare o processamento se o token corresponder a uma palavra de parada configurada. O token é omitido do geradotsvector. -
Synonyms: Emita o substituto configurado e pare o processamento se o token corresponder a um sinônimo. -
Stemmer: Se nenhum sinônimo correspondido e stemming estiver ativado, aplique o stemmer inglês.
Adicionar palavras de som e sinônimos
O tokenizer_wholeword template pode carregar palavras de parada e sinônimos personalizados a partir de tabelas lakebase_tokenizer_stopwords SQL gerenciadas por extensões e lakebase_tokenizer_synonyms. A name coluna agrupa as linhas em um conjunto que você seleciona com a Stopwords opção de dicionário ou Synonyms .
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');
Consulte os conjuntos ao criar ou alterar um tokenizer_wholeword dicionário:
ALTER TEXT SEARCH DICTIONARY documents_dict (
Stopwords = 'app_stopwords',
Synonyms = 'app_synonyms'
);
A extensão compara palavras de parada e palavras-fonte sinônimos com cada token após aplicar , , , e EnglishPossessive, mas antes de aplicar Stemmer. StripAccentsNormalizeLowercase As entradas do catálogo não são transformadas automaticamente, então armazene-as exatamente na forma produzida por essas opções habilitadas:
- Com
Lowercase = 'true', use entradas minúsculas. Com , aLowercase = 'false'capitalização deve corresponder ao token. - Com ativado, armazene
Normalizeas entradas no formulário selecionado de normalização Unicode. - Com
StripAccents = 'true', armazene a forma com acentuado removido. Por exemplo, armazenecafepara correspondercaféa . - Guarde o formulário antes de despedaçar. Por exemplo, com
Stemmer = 'english', umarunentrada não corresponderunninga . Adicionerunningpara filtrar ou substituir esse token.
Nomes de conjuntos podem conter até 256 bytes. Palavras e sinônimos podem conter até 1024 bytes. Cada conjunto de palavra parada nomeada ou sinônimo pode conter até 100.000 linhas.
Uma substituição de sinônimo é emitida exatamente como armazenada e não é processada pelo haste. Sinônimos suportam uma substituição para cada palavra-fonte. Para representar uma substituição multipalavra como um lexema, use um separador como um sublinhado, como em united_states.
Após mudar um conjunto, o proprietário de cada dicionário que faz referência ao conjunto deve executar um no-op ALTER TEXT SEARCH DICTIONARY para forçar uma recarga:
ALTER TEXT SEARCH DICTIONARY documents_dict (dummy);
A dummy opção não existe em tokenizer_wholeword. Omitir um valor pede ao PostgreSQL que remova essa opção inexistente, o que invalida o cache sem alterar nenhuma das opções configuradas do dicionário.
Após recarregar o dicionário, regenere os valores armazenados tsvector reescrevendo as linhas de origem:
UPDATE documents SET body = body;
Funções e acesso
Use dois papéis para separar o acesso de aplicações da administração do tokenizador:
-
app_roleUtiliza dicionários já existentes. Ele precisaUSAGEdos esquemas relevantes eSELECTdas tabelas de catálogo de extensões, mas não precisa possuir os dicionários. -
tokenizer_admingerencia conjuntos de palavras paradas e sinônimos, cria e possui dicionários e configurações de busca de texto, e executa o comando reload após a alteração de um conjunto.
Conceda acesso ao esquema de extensão e às tabelas de catálogo:
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 também necessidades CREATE no esquema onde dicionários e configurações de busca de texto são armazenados. Crie esses objetos como tokenizer_admin, ou transfira sua propriedade para eles. O acesso de escrita às tabelas de catálogo não concede a propriedade dos dicionários existentes.
Opções
Especifique tokenizer_wholeword opções em CREATE TEXT SEARCH DICTIONARY ou ALTER TEXT SEARCH DICTIONARY. Os nomes das opções são indiferentes a maiúsculas e minúsculas.
| Opção | Tipo | Default | Description |
|---|---|---|---|
Lowercase |
booleano | true |
Converte tokens para minúsculas antes de aplicar outras operações.
Stemmer = 'english' requer Lowercase = 'true'. |
Normalize |
NFC, NFD, NFKC, NFKD ou none |
none |
Aplica o formulário selecionado de normalização Unicode. Isso canoniciza a representação, mas não remove caracteres. Por exemplo, NFC faz pré-composto é e e seguido por um equivalente combinando acento agudo. |
EnglishPossessive |
booleano | true |
Remove um elemento final 's, ’s, ou 's quando pelo menos um caractere precede o sufixo. Um sufixo independente permanece inalterado. |
StripAccents |
booleano | false |
Aplica normalização NFKD e remove marcas de combinação. Por exemplo, café se tornará cafe. Quando essa opção estiver ativada, omita Normalize porque o passo NFKD torna qualquer normalização Unicode separada redundante. |
Stopwords |
Nome do conjunto | None | Usa o conjunto nomeado de tokenizer_ext.lakebase_tokenizer_stopwords. |
Synonyms |
Nome do conjunto | None | Usa o conjunto nomeado de substitutos um-para-um de tokenizer_ext.lakebase_tokenizer_synonyms. |
Stemmer |
english |
None | Usa o stemmer inglês Snowball 3.1.0 incluído. Omita essa opção para desabilitar o stemming. O stemmer não inclui uma lista de palavras finales. |
Tabelas de catálogo
| Tabela | Columns | Description |
|---|---|---|
lakebase_tokenizer_stopwords |
name text, word text |
Lojas nomearam conjuntos de palavras finais para templates tokenizadores que suportam Stopwords. A chave primária é (name, word). |
lakebase_tokenizer_synonyms |
name text, word text, synonym text |
Lojas nomearam substitutos um-para-um para modelos de tokenizador que suportam Synonyms. A chave primária é (name, word). |
Use o ranking BM25 com lakebase_text
Configurações de busca por texto construídas com lakebase_tokenizer produzem valores padrão PostgreSQL tsvector compatíveis com lakebase_text. Para usar a classificação de relevância do BM25 e a recuperação top-K, crie um lakebase_bm25 índice na mesma tsvector coluna. Para sintaxe de instalação, criação de índice e consulta, veja lakebase_text.