Lakebase Search

Important

Este recurso está em versão Beta. Os administradores do espaço de trabalho podem controlar o acesso a esse recurso na página Visualizações . Ver Gerir as pré-visualizações de Azure Databricks.

O Lakebase Search adiciona pesquisa híbrida por vetores e palavras-chave aos projetos Lakebase. Ative-o uma vez nas definições do projeto, depois instala as lakebase_vector extensões e lakebase_text Postgres para começares a construir funcionalidades de pesquisa.

A Lakebase Search oferece dois métodos de pesquisa complementares. Use qualquer um isoladamente, ou combine-os para pesquisa híbrida:

  • A pesquisa vetorial (semântica) encontra linhas cujo significado é o mais próximo da sua consulta, mesmo quando não partilham palavras. Faz uma consulta com uma representação vetorial (um vetor numérico produzido por um modelo), e o índice devolve os vetores mais próximos com base na distância. Utilize-o para perguntas de linguagem natural, recomendações e geração aumentada por recuperação (RAG). Alimentado por lakebase_vector.
  • A pesquisa por palavras-chave (texto completo) classifica as linhas de acordo com o quão bem correspondem exatamente aos termos da sua consulta, usando a pontuação de relevância do BM25. Use-o para nomes, códigos e consultas de termos exatos onde a redação importa. Alimentado por lakebase_text.
  • A pesquisa híbrida executa ambas as pesquisas e combina os resultados numa única lista ordenada, para obter correspondências semanticamente semelhantes e de termos exatos. 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 vetorial para a consulta

Como funciona

No fundo, o Lakebase Search baseia-se em duas extensões da Postgres:

  • lakebase_vector adiciona pesquisa vetorial por vizinho mais próximo aproximado (ANN) através do tipo de índice lakebase_ann. É um substituto direto para o pgvector: os mesmos tipos de vetores, operadores de distância e sintaxe de consulta funcionam sem necessidade de modificações. Internamente, utiliza particionamento IVF com quantização RaBitQ, que suporta índices com mais de mil milhões de vetores num só índice e é construído até 50–100 vezes mais rapidamente do que o HNSW. Os índices são armazenados e sobrevivem à escala até zero sem aquecimento.

  • lakebase_text adiciona pesquisa em texto completo do BM25 através do lakebase_bm25 tipo índice. É compatível com os tipos padrão tsvector e operadores de consulta do PostgreSQL. A classificação BM25 contabiliza simultaneamente a frequência dos termos, o comprimento do documento e as estatísticas a nível de corpus. Top-K pushdown (Block-Max WAND) recupera apenas os K resultados mais relevantes do índice, em vez de pontuar todos os jogos.

Pode disponibilizar pesquisa sobre dados provenientes do lakehouse, não apenas sobre dados gravados diretamente no Postgres. Use tabelas sincronizadas para sincronizar uma tabela do Unity Catalog com o Lakebase, e mapeie as suas colunas para tipos Postgres prontos para pesquisa durante a sincronização:

Depois de a sincronização estar concluída, crie um índice lakebase_ann ou lakebase_bm25 na coluna sincronizada e disponibilize pesquisa de baixa latência às suas aplicações, a par dos seus dados operacionais. Para a configuração do mapeamento, veja Mapeamento de tipos personalizado para a Pesquisa Lakebase.

Requirements

  • Postgres 16 ou depois
  • Acesso beta para o seu projeto. O Lakebase Search está em fase beta; Contacte o seu representante de conta Databricks para solicitar.
  • Ativar a Pesquisa Lakebase num projeto é irreversível

Depois de o seu projeto ter acesso, ative a Pesquisa Lakebase nas definições do projeto:

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

Warning

Ativação da Pesquisa Lakebase:

  • Reinicia todos os computadores no teu projeto, perdendo todas as ligações ativas
  • Disponibiliza as lakebase_vector extensões e lakebase_text para instalação
  • Não pode ser desligado depois de ativado

Instalar extensões

Depois de ativar o Lakebase Search, instale as extensões na sua base 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;

Introdução

O exemplo seguinte cria uma documents tabela com uma coluna vetorial e uma coluna de pesquisa em texto completo, depois executa consultas vetoriais e palavras-chave:

Note

Estes exemplos usam vetores literais pequenos, como '[0.1, 0.2, 0.3]' para ilustração. Numa aplicação real, gere embeddings externamente com um modelo de embeddings e, em seguida, armazene o resultado na coluna VECTOR. No Databricks, pode consultar um modelo de embedding usando o Model Serving — por exemplo, num ai_query notebook ou no Databricks SQL — e depois inserir os vetores resultantes no Lakebase. A coluna e o VECTOR(n) índice devem usar a mesma dimensão n da saída do seu modelo (normalmente 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;

O seguinte exemplo de pesquisa híbrida reutiliza a tabela e os documents índices do Get Started. Recolhe os melhores candidatos de cada pesquisa de forma independente e depois combina-os numa única classificação usando a Fusão de Classificação Recíproca (RRF): resultados que têm boa classificação em uma ou ambas as pesquisas obtêm pontuações mais elevadas.

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 recolhe os seus próprios 40 melhores candidatos. RANK() atribui a mesma classificação às pontuações empatadas. A constante 60 diminui a influência de resultados com classificação inferior, e d.id desfaz empates para uma paginação estável. Ajuste a per-lista LIMIT e a constante RRF para os seus dados. Outros métodos de fusão, como a pontuação ponderada, também são válidos.

Extensions

Extension Purpose Tipo de índice
lakebase_vector Pesquisa vetorial ANN, compatível com pgvector lakebase_ann
lakebase_text Pesquisa em texto completo BM25, compatível com FTS lakebase_bm25