Pular para o conteúdo principal

lakebase_text

info

Beta

Este recurso está em Beta. Os administradores do espaço de trabalho podem controlar o acesso a esse recurso na página Pré-visualizações . Consulte Gerenciar prévias do Databricks.

A extensão lakebase_text adiciona pesquisa de texto completo BM25 ao Lakebase através do tipo de índice lakebase_bm25. É compatível com o tipo tsvector padrão do PostgreSQL e operadores de consulta.

Instalar

Primeiro, habilite a Pesquisa Lakebase nas configurações do seu projeto. Em seguida, instale a extensão:

SQL
CREATE EXTENSION IF NOT EXISTS lakebase_text;

Por que lakebase_text em vez da pesquisa de texto completo GIN padrão

A pesquisa de texto completo integrada do PostgreSQL usa índices GIN e ts_rank para pontuação de relevância. ts_rank não usa estatísticas globais de corpus, portanto as pontuações se degradam conforme os dados crescem. lakebase_text aprimora isso de duas maneiras:

  • O ranking BM25 leva em conta a frequência do termo, o comprimento do documento e as estatísticas de todo o corpus simultaneamente, produzindo pontuações de relevância mais precisas do que o TF-IDF.
  • Top-K pushdown usa Block-Max WAND para retornar apenas os K resultados mais relevantes do índice, sem pontuar cada correspondência no conjunto de resultados.

Início rápido

Crie o índice lakebase_bm25 após inserir os dados. O BM25 calcula estatísticas de todo o corpus no momento da criação do índice, não incrementalmente, portanto, o índice deve ser criado em uma tabela populada.

SQL
-- 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 ascendente retorna os resultados mais relevantes primeiro.

Mantenha o índice preciso

As estatísticas BM25 são computadas no tempo de construção do índice e atualizadas pelo vacuum. Para a maioria das cargas de trabalho, o vacuum regular mantém as pontuações precisas. Após o carregamento em massa de uma grande quantidade de novos dados, execute o vacuum manualmente:

SQL
VACUUM documents;

Ajustar pesquisa

GUCs em nível de sessão

Parâmetro

Tipo

Padrão

Descrição

lakebase_bm25.default_limit

inteiro

1000

Número máximo de resultados retornados do índice.

lakebase_bm25.prefilter

boolean

false

Quando true, avalia WHERE condições antes de calcular as pontuações BM25. Use quando os filtros eliminarem muitas linhas e forem baratos para avaliar.

lakebase_bm25.enable_scan

boolean

true

Defina como false para forçar uma varredura sequencial, ignorando o índice. Útil para testes.

SQL
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

GUCs têm precedência sobre os parâmetros de armazenamento de índice quando ambos estã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

Descrição

k1

real

1.2

1,2 a 2,0

Saturação de frequência de termos. Valores mais altos dão mais peso a termos repetidos.

b

real

0.75

0,0 a 1,0

Normalização de comprimento do documento. 0.0 desativa a normalização de comprimento; 1.0 aplica 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 de pré-filtro de fallback quando o GUC da sessão não está definido.

SQL
-- Set parameters at index creation
CREATE INDEX documents_passage_bm25 ON documents USING lakebase_bm25 (vector)
WITH (default_limit = 20, k1 = 1.5);

-- Update parameters on an existing index
ALTER INDEX documents_passage_bm25 SET (default_limit = 50);

Referência de API

Tipos

bm25query_tsvector: combina uma consulta tsvector com o identificador de índice de destino. Usado como operando direito de <@>.

Operadores

Operador

Assinatura

Devolve

Descrição

<@>

tsvector <@> bm25query_tsvector

double precision

Retorna uma pontuação BM25 negativa. Ordene de forma ascendente para obter os resultados mais relevantes primeiro.

Funções

Função

Devolve

Descrição

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 operador

Aula

Default para

Descrição

tsvector_bm25_ops

tsvector

Mapeia as colunas tsvector para o operador <@> para a pontuação BM25. Esta é a classe de operador default para tsvector com lakebase_bm25; você não precisa especificá-lo explicitamente.

Passos seguintes