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_text extensão adiciona pesquisa em texto completo BM25 ao Lakebase através do lakebase_bm25 tipo de índice. É compatível com os operadores padrão tsvector de tipo e consulta do PostgreSQL.
Install
Primeiro, ativa o Lakebase Search nas definições do teu projeto. Depois instala a extensão:
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Atualizar a extensão e os índices
Uma nova versão do Lakebase Search pode adicionar funcionalidades, correções e melhorias de desempenho. Embora o Lakebase Search seja lançado como parte das atualizações do Lakebase, não atualiza tudo automaticamente. Em lakebase_text, duas coisas são atualizadas separadamente e têm números de versão que não estão relacionados entre si:
-
A versão da extensão é a versão dos objetos SQL que
CREATE EXTENSION lakebase_textcria, incluindo os seus tipos de dados, funções, operadores e olakebase_bm25método de acesso ao índice. Esta versão é reportada porSELECT installed_version FROM pg_available_extensions WHERE name = 'lakebase_text'.ALTER EXTENSION lakebase_text UPDATEAtualiza esta versão. -
O formato de armazenamento de índice é o layout em disco de um
lakebase_bm25índice. A extensão pode introduzir formatos de armazenamento de índice atualizados numa atualização, desbloqueando mais funcionalidades e oferecendo melhor desempenho. Todos os índices recém-criados usam automaticamente o formato de armazenamento mais recente, enquanto os índices existentes podem ser atualizados para o novo formato depoisREINDEX INDEX CONCURRENTLYde um formato de armazenamento mais recente estar disponível.
A atualização não é urgente. A extensão é compatível com objetos SQL e formatos de armazenamento de índice de versões anteriores, mas manter-se atualizado mantém-no no caminho suportado e com melhor desempenho e evita uma migração maior mais tarde, por isso atualize quando for conveniente em vez de adiar indefinidamente.
Note
A versão mais recente disponível da extensão é reportada por SELECT default_version FROM pg_available_extensions WHERE name = 'lakebase_text'.
Porquê lakebase_text em vez da pesquisa integral padrão do GIN
A pesquisa de texto integral incorporada no PostgreSQL utiliza índices GIN e ts_rank para pontuação de relevância.
ts_rank não utiliza estatísticas globais de corpus, pelo que as pontuações degradam-se à medida que os dados crescem.
lakebase_text melhora isto de duas formas:
- A classificação BM25 contabiliza simultaneamente a frequência de termos, o comprimento do documento e as estatísticas a nível de corpus, produzindo pontuações de relevância mais precisas do que a TF-IDF.
- Top-K pushdown usa Block-Max VARINHA para devolver apenas os K resultados mais relevantes do índice, sem marcar todas as correspondências do conjunto de resultados.
Início rápido
Constrói o lakebase_bm25 índice depois de inserir os dados. O BM25 calcula estatísticas a nível de corpo no momento da construção do índice, não de forma incremental, pelo que o índice deve ser criado numa tabela preenchida.
-- Create a table with a generated tsvector column
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
passage TEXT,
vector TSVECTOR GENERATED ALWAYS AS (to_tsvector('english', passage)) STORED
);
-- Insert data before building the BM25 index
INSERT INTO documents (passage) VALUES
('Postgres is a powerful open-source relational database.'),
('Vector search finds semantically similar results.'),
('BM25 ranking improves full-text search relevance scores.');
-- Create the BM25 index on the populated table
CREATE INDEX documents_passage_bm25 ON documents USING lakebase_bm25 (vector);
-- Query: lower score means more relevant
SELECT id, passage,
vector <@> to_bm25query(to_tsvector('english', 'database'), 'documents_passage_bm25') AS score
FROM documents
ORDER BY score
LIMIT 5;
O <@> operador devolve uma pontuação BM25 negativa. Ordenar por pontuação crescente retorna primeiro os resultados mais relevantes.
Note
Uma lakebase_bm25 varridura de índice pode omitir qualquer número de linhas cujo <@> valor seja exatamente 0.0. Não confie em remas de distância zero serem devolvidas ou na sua encomenda. Para avaliar cada linha, defina lakebase_bm25.enable_scan para off usar uma varredura sequencial.
Preencher a partir de tabelas sincronizadas
Se estiveres a carregar o texto fonte do Unity Catalog em vez de o inserires diretamente, as tabelas sincronizadas podem gerar uma tsvector coluna durante a sincronização, pronta para indexar assim lakebase_bm25 que a sincronização terminar.
Veja Mapeamento de tipos personalizado para a Pesquisa Lakebase.
Mantenha o índice preciso
As estatísticas do BM25 são calculadas no momento da compilação do índice e atualizadas por VACUUM. Para a maioria das cargas de trabalho, o regular VACUUM mantém as pontuações precisas. Depois de carregar em massa uma grande quantidade de novos dados, execute VACUUM manualmente:
VACUUM documents;
Para manter o desempenho da consulta e atualização, VACUUM deve limpar o índice rapidamente. Para uma tabela dedicada à pesquisa de texto, o Databricks recomenda definir autovacuum_vacuum_insert_scale_factor para 0 que o limiar de autovácuo ativado por inserção não cresça com a tabela:
ALTER TABLE documents SET (
autovacuum_vacuum_insert_scale_factor = 0
);
Com o fator de escala definido para 0, autovacuum_vacuum_insert_threshold determina o número fixo de tuplas inseridas que ativam o autovácuo. Ajusta esse limiar consoante a tua carga de trabalho.
Aviso
As estatísticas globais do BM25 não são versões MVCC. Se VACUUM atualizar as estatísticas enquanto uma transação estiver a usar um snapshot MVCC mais antigo, a transação pode calcular as pontuações usando estatísticas mais recentes do que o snapshot da linha. A visibilidade das linhas mantém-se conforme ao MVCC, mas as pontuações, classificações e resultados do top-K podem mudar dentro de uma REPEATABLE READ transação. Não confie em classificações BM25 instantâneas ao longo de um simultâneo VACUUM, incluindo autoaspirum.
Pesquisa de sintonia
GUCs ao nível da sessão
| Parâmetro | Tipo | Default | Description |
|---|---|---|---|
lakebase_bm25.default_limit |
número inteiro | 1000 |
Número máximo de resultados devolvidos do índice. |
lakebase_bm25.prefilter |
boolean | false |
Quando true, avalia WHERE as condições antes de calcular as pontuações BM25. Use quando os filtros eliminam muitas linhas e são baratos de avaliar. |
lakebase_bm25.enable_scan |
boolean | true |
Defina para false forçar uma varredura sequencial, contornando o índice. Útil para testes. |
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;
Os GUCs têm precedência sobre os parâmetros de armazenamento de índice quando ambos estão definidos.
Parâmetros de armazenamento indexados
Defina estas opções no momento da criação do índice ou com ALTER INDEX:
| Parâmetro | Tipo | Default | Intervalo | Description |
|---|---|---|---|---|
k1 |
real | 1.2 |
1.2 a 2.0 | Saturação da frequência do termo. Valores mais altos dão mais peso a termos repetidos. |
b |
real | 0.75 |
0.0 a 1.0 | Normalização do comprimento do documento.
0.0 desativa a normalização de comprimento; 1.0 Aplica a normalização total. |
default_limit |
número inteiro | 1000 |
1 a 65535 | Limite de retenção quando o GUC da sessão não está definido. |
prefilter |
boolean | false |
N/A | Configuração de pré-filtro de reserva quando o GUC da sessão não está definido. |
-- Set parameters at index creation (use a new name — the Quick start already created documents_passage_bm25)
CREATE INDEX documents_passage_bm25_tuned ON documents USING lakebase_bm25 (vector)
WITH (default_limit = 20, k1 = 1.5);
-- Update parameters on an existing index
ALTER INDEX documents_passage_bm25_tuned SET (default_limit = 50);
Referência da API
Tipos
bm25query_tsvector: combina uma consulta tsvector com o identificador de índice alvo. Usado como o operando direito de <@>.
Operadores
| Operador | Signature | Devoluções | Description |
|---|---|---|---|
<@> |
tsvector <@> bm25query_tsvector |
double precision |
Devolve uma pontuação negativa BM25. Encomenda ascendente para obter primeiro os resultados mais relevantes. |
Funções
| Function | Devoluções | Description |
|---|---|---|
to_bm25query(query tsvector, index regclass) |
bm25query_tsvector |
Constrói um objeto de consulta BM25 a partir de um tsvector e do identificador de objeto do índice. |
Classes de operadores
| Class | Padrão para | Description |
|---|---|---|
tsvector_bm25_ops |
tsvector |
Mapeia tsvector as colunas para o <@> operador para a pontuação do BM25. Esta é a classe de operador padrão para tsvector com lakebase_bm25; não é necessário especificá-la explicitamente. |