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_text extensão adiciona a pesquisa de texto completo BM25 ao Lakebase por meio do lakebase_bm25 tipo de índice. Ele é compatível com os operadores de consulta e tipo padrão tsvector do PostgreSQL.
Install
Primeiro, habilite o Lakebase Search nas configurações do projeto. Em seguida, instale a extensão:
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Atualize a extensão e os índices
Uma nova versão do Lakebase Search pode adicionar recursos, correções e melhorias de desempenho. Embora o Lakebase Search seja lançado como parte das atualizações do Lakebase, ele não atualiza tudo automaticamente. Em lakebase_text, duas coisas atualizam separadamente e carregam números de versão que não têm relação entre si:
-
A versão da extensão é a versão dos objetos SQL que
CREATE EXTENSION lakebase_textcria, incluindo 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 no disco de um
lakebase_bm25índice. A extensão pode introduzir formatos atualizados de armazenamento de índice em uma atualização, desbloqueando mais recursos 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 apósREINDEX INDEX CONCURRENTLYum formato de armazenamento mais novo estar disponível.
Atualizar 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 você no caminho suportado e com melhor desempenho e evita uma migração maior depois, então 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'.
Por que lakebase_text em vez da pesquisa de texto completo padrão do GIN
A pesquisa interna de texto completo do PostgreSQL usa índices GIN e ts_rank pontuação de relevância.
ts_rank não usa estatísticas globais de corpus, portanto, as pontuações são degradadas à medida que os dados crescem.
lakebase_text aprimora isso de duas maneiras:
- As contas de classificação BM25 para frequência de termos, comprimento do documento e estatísticas de todo o corpus simultaneamente, produzindo pontuações de relevância mais precisas do que TF-IDF.
- Top-K pushdown usa Block-Max WAND para retornar apenas os K resultados mais relevantes do índice, sem pontuar todas as correspondências no conjunto de resultados.
Início rápido
Crie o lakebase_bm25 índice depois de inserir dados. O BM25 calcula estatísticas de todo o corpus no tempo de compilação do índice, não incrementalmente, portanto, o índice deve ser criado em uma tabela populada.
-- 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 retorna uma pontuação BM25 negativa. A ordenação por pontuação crescente retorna primeiro os resultados mais relevantes.
Note
Uma lakebase_bm25 varredura de índice pode omitir qualquer número de linhas cujo <@> valor seja exatamente 0.0. Não confie em fileiras sem distância serem devolvidas ou no pedido delas. Para avaliar cada linha, defina lakebase_bm25.enable_scan para off usar uma varredura sequencial.
Preencher a partir de tabelas sincronizadas
Se você estiver carregando o texto fonte do Unity Catalog em vez de inseri-lo diretamente, 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 Lakebase Search.
Manter o índice preciso
As estatísticas BM25 são computadas no tempo de compilação do índice e atualizadas por VACUUM. Para a maioria das cargas de trabalho, as pontuações regulares VACUUM são precisas. Depois de carregar em massa uma grande quantidade de novos dados, execute VACUUM manualmente:
VACUUM documents;
Para manter a consulta e atualizar o desempenho, VACUUM é necessário limpar o índice rapidamente. Para uma tabela dedicada à busca 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 aciona o autovácuo. Ajuste esse limite de acordo com sua carga de trabalho.
Aviso
As estatísticas globais do BM25 não são versionadas pelo MVCC. Se VACUUM atualizar as estatísticas enquanto uma transação estiver usando um snapshot antigo do MVCC, a transação pode calcular as pontuações usando estatísticas mais recentes que o snapshot da linha. A visibilidade das linhas permanece em conformidade com o MVCC, mas pontuações, rankings e resultados do top-K podem mudar dentro de uma REPEATABLE READ transação. Não confie em rankings BM25 estáveis em snapshots em um simultâneo VACUUM, incluindo autovacuum.
Ajustar pesquisa
GUCs de nível de sessão
| Parâmetro | Tipo | Padrão | Description |
|---|---|---|---|
lakebase_bm25.default_limit |
inteiro | 1000 |
Número máximo de resultados retornados do índice. |
lakebase_bm25.prefilter |
boolean | false |
Quando true, avalia WHERE as condições antes de calcular pontuações BM25. Use quando os filtros eliminarem muitas linhas e forem baratos de serem avaliados. |
lakebase_bm25.enable_scan |
boolean | true |
Definido para false forçar uma verificação sequencial, ignorando 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 são definidos.
Parâmetros de armazenamento de índice
Defina estas opções no momento da criação do índice ou com ALTER INDEX:
| Parâmetro | Tipo | Padrão | 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 desabilita a normalização do comprimento; 1.0 aplica a normalização completa. |
default_limit |
inteiro | 1000 |
1 a 65535 | Limite de fallback quando o GUC da sessão não está definido. |
prefilter |
boolean | false |
N/A | Configuração do pré-filtro de fallback 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 de API
Tipos
bm25query_tsvector: combina uma consulta tsvector com o identificador de índice de destino. Usado como o operando direito de <@>.
Operadores
| Operator | Signature | Returns | Description |
|---|---|---|---|
<@> |
tsvector <@> bm25query_tsvector |
double precision |
Retorna uma pontuação BM25 negativa. Ordem crescente para obter os resultados mais relevantes primeiro. |
Functions
| Function | Returns | Description |
|---|---|---|
to_bm25query(query tsvector, index regclass) |
bm25query_tsvector |
Constrói um objeto de consulta BM25 a partir de um tsvector identificador de objeto e do índice. |
Classes de operador
| Classe | Padrão para | Description |
|---|---|---|
tsvector_bm25_ops |
tsvector |
Mapeia tsvector colunas para o <@> operador para pontuação BM25. Essa é a classe de operador padrão para tsvector com lakebase_bm25; você não precisa especificá-la explicitamente. |