Pular para o conteúdo principal

Pesquisa Lakebase

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.

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.

Pesquisa por palavra-chave versus pesquisa vetorial para a consulta "fast sports car." Pesquisa por palavra-chave (lakebase_text) corresponde apenas a documentos que contêm as palavras digitadas e ignora sinônimos como "quick automobile" e "Ferrari 488 supercar." Pesquisa vetorial (lakebase_vector) posiciona a consulta e os documentos no mesmo espaço de incorporação e retorna os vizinhos mais próximos por significado, incluindo sinônimos.

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ão tsvector e 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

Após seu projeto ter acesso, habilite o Lakebase Search nas configurações do seu projeto:

  1. No seu projeto Lakebase, clique em Configurações na navegação à esquerda.
  2. Em Lakebase Search , clique em Ativar Lakebase Search .
atenção

Habilitando o Lakebase Search:

  • Reinicia todos os computes no seu projeto, descartando quaisquer conexões ativas
  • Torna as extensões lakebase_vector e lakebase_text disponí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:

SQL
-- 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:

nota

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).

SQL
-- 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.

SQL
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

lakebase_vector

Pesquisa vetorial rede neurais artificiais (ANN), compatível com pgvector

lakebase_ann

lakebase_text

Pesquisa de texto completo BM25, compatível com FTS

lakebase_bm25