Pesquisa Lakebase
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.
O Lakebase Search adiciona pesquisa híbrida de vetores e palavras-chave a projetos de autoscale do Lakebase. Habilite-o uma vez nas configurações do seu projeto e, em seguida, instale as extensões Postgres lakebase_vector e lakebase_text para começar a criar recursos de pesquisa.
Pesquisa vetorial, por palavra-chave e híbrida
Lakebase Search fornece dois métodos de pesquisa complementares. Use-os individualmente ou combine-os para pesquisa híbrida:
- Pesquisa vetorial (semântica) encontra linhas cujo significado é o mais próximo da sua consulta, mesmo quando não compartilham nenhuma palavra. Você consulta com uma incorporação (um vetor numérico produzido por um modelo), e o índice retorna os vetores mais próximos por distância. Use-o para perguntas em linguagem natural, recomendações e geração aumentada de recuperação (RAG). Com tecnologia da
lakebase_vector. - A pesquisa por palavra-chave (texto completo) classifica as linhas pela correspondência com os termos exatos na sua consulta, usando a pontuação de relevância BM25. Use-o para nomes, códigos e pesquisas de termos exatos onde a redação importa. Com tecnologia da
lakebase_text. - A pesquisa híbrida executa ambas as pesquisas e combina os resultados em uma única lista classificada, para que você obtenha correspondências semanticamente semelhantes e de termos exatos juntas. Use-o quando as consultas misturam intenção com termos específicos, o caso mais comum na pesquisa do mundo real.

Como funciona
Por trás dos panos, o Lakebase Search é construído sobre duas extensões do Postgres:
-
O lakebase_vector adiciona busca vetorial de vizinho mais próximo aproximada (ANN) via o tipo de índice
lakebase_ann. É um complemento imediato para pgvector: os mesmos tipos de vetor, operadores de distância e sintaxe de consulta funcionam sem modificação. Internamente, ele usa o particionamento IVF com quantização RaBitQ, que suporta índices de mais de 1 bilhão de vetores em um único índice e é construído até 50 a 100 vezes mais rápido que HNSW. Os índices são apoiados por armazenamento e sobrevivem à escala para zero sem pré-aquecimento. -
lakebase_text adiciona pesquisa de texto completo BM25 através do tipo de índice
lakebase_bm25. É compatível com os tipos padrãotsvectore operadores de consulta do PostgreSQL. A classificação BM25 considera simultaneamente a frequência de termos, o tamanho do documento e as estatísticas de todo o corpus. Top-K pushdown (Block-Max WAND) recupera apenas os K resultados mais relevantes do índice, em vez de pontuar cada correspondência.
Requisitos
- Postgres 16 ou posterior
- Acesso beta para o seu projeto. O Lakebase Search está em versão beta; entre em contato com seu representante de account da Databricks para solicitá-lo.
- Habilitar a pesquisa Lakebase em um projeto é irreversível
Habilitar o Lakebase Search
Após seu projeto ter acesso, habilite o Lakebase Search nas configurações do seu projeto:
- No seu projeto Lakebase, clique em Configurações na navegação à esquerda.
- Em Lakebase Search , clique em Ativar Lakebase Search .
Habilitando o Lakebase Search:
- Reinicia todos os computes no seu projeto, descartando quaisquer conexões ativas
- Torna as extensões
lakebase_vectorelakebase_textdisponíveis para instalação - Não pode ser desativado uma vez habilitado
Instalar extensões
Após habilitar o Lakebase Search, instale as extensões em seu banco de dados:
-- Required: vector search (CASCADE installs pgvector as a dependency)
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
-- Required: BM25 full-text search
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Começar
O exemplo a seguir cria uma tabela documents com uma coluna vetorial e uma coluna de pesquisa de texto completo, e depois executa consultas vetoriais e de palavra-chave:
Estes exemplos usam vetores literais pequenos como '[0.1, 0.2, 0.3]' para ilustração. Em uma aplicação real, gere incorporações externamente com um modelo de incorporação e, depois, armazene o resultado na coluna VECTOR. No Databricks, você pode consultar um modelo de incorporação usando o Mosaic AI Model Serving — por exemplo, com ai_query em um notebook ou Databricks SQL — e depois inserir os vetores resultantes no Lakebase. A coluna VECTOR(n) e o índice devem usar a mesma dimensão n que a saída do seu modelo (comumente de 384 a 1536).
-- Create a table with a vector column and a tsvector column
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
body TEXT NOT NULL,
embedding VECTOR(3),
body_tsv TSVECTOR
);
-- Create a vector search index
CREATE INDEX ON documents USING lakebase_ann (embedding vector_cosine_ops);
-- Insert sample data and populate the tsvector column
INSERT INTO documents (title, body, embedding, body_tsv) VALUES
('Postgres overview', 'Postgres is an open-source relational database.', '[0.1, 0.2, 0.3]', to_tsvector('english', 'Postgres is an open-source relational database.')),
('Vector search guide', 'Vector search finds semantically similar results.', '[0.4, 0.5, 0.6]', to_tsvector('english', 'Vector search finds semantically similar results.')),
('Full-text search', 'BM25 ranking improves keyword search relevance.', '[0.7, 0.8, 0.9]', to_tsvector('english', 'BM25 ranking improves keyword search relevance.'));
-- Build the BM25 index after inserting data
-- BM25 computes corpus statistics at build time, not incrementally
CREATE INDEX documents_body_bm25 ON documents USING lakebase_bm25 (body_tsv);
-- Vector similarity search
SELECT id, title
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, 0.3]'
LIMIT 5;
-- BM25 keyword search (lower score = more relevant)
SELECT id, title,
body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
FROM documents
ORDER BY score
LIMIT 5;
Combine os resultados com pesquisa híbrida
O seguinte exemplo de pesquisa híbrida reutiliza a tabela documents e os índices de Começar. Ele recupera os principais candidatos de cada pesquisa independentemente, depois os combina em uma única classificação usando a Reciprocal Rank Fusion (RRF): os resultados que se classificam bem em uma ou ambas as pesquisas pontuam mais alto.
WITH vector_ranked AS (
SELECT id, RANK() OVER (ORDER BY dist) AS rank
FROM (
SELECT id, embedding <=> '[0.1, 0.2, 0.3]' AS dist
FROM documents
ORDER BY dist
LIMIT 40
) v
),
keyword_ranked AS (
SELECT id, RANK() OVER (ORDER BY score) AS rank
FROM (
SELECT id, body_tsv <@> to_bm25query(to_tsvector('english', 'database'), 'documents_body_bm25') AS score
FROM documents
ORDER BY score
LIMIT 40
) k
)
SELECT d.id, d.title,
COALESCE(1.0 / (60 + v.rank), 0) + COALESCE(1.0 / (60 + k.rank), 0) AS rrf_score
FROM documents d
LEFT JOIN vector_ranked v ON d.id = v.id
LEFT JOIN keyword_ranked k ON d.id = k.id
WHERE v.id IS NOT NULL OR k.id IS NOT NULL
ORDER BY rrf_score DESC, d.id
LIMIT 10;
Cada CTE obtém seus próprios 40 candidatos principais. RANK() atribui a mesma classificação a pontuações empatadas. A constante 60 diminui a influência de resultados de baixa classificação, e d.id desempata para uma paginação estável. Ajuste o LIMIT por lista e a constante RRF para seus dados. Outros métodos de fusão, como a pontuação ponderada, também são válidos.
Extensões
Extensão | Propósito | Tipo de índice |
|---|---|---|
Pesquisa vetorial rede neurais artificiais (ANN), compatível com pgvector |
| |
Pesquisa de texto completo BM25, compatível com FTS |
|