Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A lakebase_tokenizer extensão adiciona tokenização configurável de palavra inteira à pesquisa de texto completo do PostgreSQL no Lakebase. Configurações de pesquisa por texto construídas com a extensão funcionam com to_tsvector, o @@ operador, funções de classificação e índices GIN. Também podes usar os valores gerados tsvector com lakebase_text para o ranking do BM25.
A extensão fornece o tokenizer_wholeword modelo através da interface padrão de dicionário de pesquisa de texto do PostgreSQL. O template suporta conversão minúscula, normalização Unicode, remoção de acentos, remoção possessiva inglesa, palavras de parada personalizadas, sinónimos um-para-um e stemming inglês.
Install
Instale a extensão na sua base de dados. Os exemplos nesta página utilizam um esquema dedicado para tornar os objetos de extensão fáceis de identificar:
CREATE SCHEMA IF NOT EXISTS tokenizer_ext;
CREATE EXTENSION IF NOT EXISTS lakebase_tokenizer WITH SCHEMA tokenizer_ext;
A extensão é realocável. Podes substituir tokenizer_ext por outro esquema quando o instalares.
Atualizar a extensão
Uma nova versão do Lakebase Search pode adicionar funcionalidades, 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 necessária do índice.
Início rápido com tokenizer_wholeword
O exemplo seguinte cria um dicionário a partir do tokenizer_wholeword modelo, depois mapeia tipos comuns de tokens PostgreSQL para ele numa configuração de pesquisa de 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, criar um índice GIN e executar 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 pesquisa de texto para documentos e consultas, de modo a que ambos os lados apliquem a mesma estratégia e opções de tokenização.
Modelo: tokenizer_wholeword
Como funciona
Para cada token passado para o dicionário pelo parser de pesquisa de texto do PostgreSQL, tokenizer_wholeword aplicam-se estas operações:
-
Lowercase: Converter o token para minúsculas. -
Normalize: Aplicar a normalização Unicode. -
StripAccents: Remove os sotaques. -
EnglishPossessive: Remover um sufixo possessivo inglês quando resta pelo menos um carácter. -
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: Emitir a substituição configurada e parar o processamento se o token corresponder a um sinónimo. -
Stemmer: Se nenhum sinónimo for compatível e o stemming estiver ativado, aplicar o stemmer inglês.
Adicionar palavras de stop e sinónimos
O tokenizer_wholeword modelo pode carregar stop-words e sinónimos personalizados a partir de tabelas lakebase_tokenizer_stopwords SQL geridas por extensões e lakebase_tokenizer_synonyms. A name coluna agrupa as linhas num conjunto que selecionas com a Stopwords opção de dicionário.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 quando 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ónimo 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, por isso armazene-as exatamente na forma produzida por essas opções ativadas:
- Com
Lowercase = 'true', use entradas minúsculas. ComLowercase = 'false', a capitalização deve corresponder à ficha. - Com ativado, armazene
Normalizeas entradas no formulário selecionado de normalização Unicode. - Com
StripAccents = 'true', armazene a forma com acento. Por exemplo, armazenecafepara correspondercaféa . - Guarde o formulário antes de fazer o stem. Por exemplo, com
Stemmer = 'english', umarunentrada não corresponderunninga . Adicionarrunningpara filtrar ou substituir esse token.
Os nomes dos conjuntos podem conter até 256 bytes. Palavras e sinónimos podem conter até 1024 bytes. Cada conjunto de palavra final ou sinónimo nomeado pode conter até 100.000 linhas.
Uma substituição de sinónimo é emitida exatamente como armazenada e não é processada pelo caule. Os sinónimos suportam uma substituição para cada palavra-fonte. Para representar uma substituição de múltiplas palavras como um lexema, use um separador como sublinhado, como em united_states.
Após alterar 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 esta opção inexistente, o que invalida a cache sem alterar nenhuma das opções configuradas pelo 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 à aplicação da administração do tokenizador:
-
app_roleutiliza dicionários existentes. PrecisaUSAGEdos esquemas relevantes eSELECTdas tabelas de catálogo de extensões, mas não precisa de possuir os dicionários. -
tokenizer_admingere conjuntos de palavras paradas e sinónimos, cria e possui dicionários e configurações de pesquisa de texto, e executa o comando reload após alterar 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 são armazenados dicionários e configurações de pesquisa de texto. Crie estes objetos como tokenizer_admin, ou transfira a 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 maiúsculas.
| Option | Tipo | Predefinição | Description |
|---|---|---|---|
Lowercase |
boolean | true |
Converte tokens para minúsculas antes de aplicar outras operações.
Stemmer = 'english' requer Lowercase = 'true'. |
Normalize |
NFC, NFD, NFKC, NFKDou none |
none |
Aplica o formulário selecionado de normalização Unicode. Isto canonicaliza a representação, mas não remove caracteres. Por exemplo, NFC torna pré-composto é e e seguido por um equivalente combinante de acento agudo. |
EnglishPossessive |
boolean | true |
Remove um elemento final 's, ’s, ou 's quando pelo menos um carácter precede o sufixo. Um sufixo independente mantém-se inalterado. |
StripAccents |
boolean | false |
Aplica a normalização NFKD e remove as marcas de combinação. Por exemplo, café passa a cafe. Quando esta opção estiver ativada, omita-a Normalize porque o passo NFKD torna redundante qualquer normalização Unicode separada. |
Stopwords |
Nome do conjunto | None | Usa o conjunto nomeado de tokenizer_ext.lakebase_tokenizer_stopwords. |
Synonyms |
Nome do conjunto | None | Utiliza o conjunto nomeado de substituições um-para-um de tokenizer_ext.lakebase_tokenizer_synonyms. |
Stemmer |
english |
None | Usa o stemmer inglês Snowball 3.1.0 incluído. Omita esta opção para desativar o stemming. O stemmer não inclui uma lista de palavra final. |
Tabelas de catálogo
| Tabela | Columns | Description |
|---|---|---|
lakebase_tokenizer_stopwords |
name text, word text |
As lojas nomearam conjuntos de palavras paradas para modelos tokenizadores que suportam Stopwords. A chave primária é (name, word). |
lakebase_tokenizer_synonyms |
name text, word text, synonym text |
As lojas nomearam substitutos um-para-um para modelos de tokenizador que suportam Synonyms. A chave primária é (name, word). |
Usa o ranking BM25 com lakebase_text
Configurações de pesquisa de texto construídas com lakebase_tokenizer produzem valores PostgreSQL tsvector padrão compatíveis com lakebase_text. Para usar a classificação de relevância BM25 e a recuperação top-K, crie um lakebase_bm25 índice na mesma tsvector coluna. Para instalação, criação de índices e sintaxe de consulta, veja lakebase_text.