Búsqueda de Lakebase

Importante

Esta característica se encuentra en su versión beta. Los administradores del área de trabajo pueden controlar el acceso a esta característica desde la página Vistas previas . Consulte Administrar versiones preliminares de Azure Databricks.

Lakebase Search añade búsqueda híbrida por vector y búsqueda por palabras clave a los proyectos de Lakebase. Habilitela una vez en la configuración del proyecto y, a continuación, instale las lakebase_vector extensiones y lakebase_text Postgres para empezar a crear características de búsqueda.

Lakebase Search proporciona dos métodos de búsqueda complementarios. Use por sí mismo o combínelos para la búsqueda híbrida:

  • La búsqueda de vectores (semántica) busca filas cuyo significado es más cercano a la consulta, incluso cuando no comparten palabras. Se consulta con una inserción (un vector numérico generado por un modelo) y el índice devuelve los vectores más cercanos por distancia. Úselo para preguntas, recomendaciones y generación aumentada de recuperación (RAG) en lenguaje natural. Desarrollado con lakebase_vector.
  • La búsqueda de palabras clave (texto completo) clasifica las filas por su grado de coincidencia con los términos exactos de la consulta, mediante la puntuación de relevancia bm25. Úselo para nombres, códigos y búsquedas de términos exactos en los que la redacción es importante. Desarrollado con lakebase_text.
  • La búsqueda híbrida ejecuta las búsquedas y combina los resultados en una lista clasificada, por lo que se obtienen coincidencias de términos semánticamente similares y exactos. Úselo cuando las consultas combinen la intención con términos específicos, el caso más común en la búsqueda en el mundo real.

Búsqueda por palabras clave frente a búsqueda vectorial para la consulta

Cómo funciona

En segundo plano, Lakebase Search se basa en dos extensiones de Postgres:

  • lakebase_vector añade búsqueda vectorial aproximada de vecinos más cercanos (ANN) mediante el tipo de índice lakebase_ann. Es un complemento desplegable para pgvector: los mismos tipos vectoriales, operadores de distancia y sintaxis de consulta funcionan sin modificaciones. Internamente, utiliza partición IVF con cuantificación RaBitQ, que admite índices de más de mil millones de vectores en un único índice y se crea entre 50 y 100 veces más rápido que HNSW. Los índices están respaldados por almacenamiento y sobreviven a scale-to-zero sin necesidad de calentamiento.

  • lakebase_text añade la búsqueda de texto completo BM25 mediante el tipo de índice lakebase_bm25. Es compatible con los tipos estándar tsvector y los operadores de consulta de PostgreSQL. La clasificación BM25 tiene en cuenta la frecuencia de términos, la longitud del documento y las estadísticas en todo el corpus simultáneamente. El pushdown Top-K (Block-Max WAND) recupera solo los K resultados más relevantes del índice, en lugar de puntuar cada coincidencia.

Puedes ofrecer búsquedas sobre datos procedentes del lakehouse, no solo sobre datos escritos directamente en Postgres. Utiliza tablas sincronizadas para sincronizar una tabla de Unity Catalog en Lakebase, y asigna sus columnas a tipos Postgres listos para búsqueda durante la sincronización:

Una vez completada la sincronización, cree un índice lakebase_ann o lakebase_bm25 en la columna sincronizada y ofrezca búsquedas de baja latencia a sus aplicaciones junto con sus datos operativos. Para la configuración de mapeo, véase Mapeado de tipos personalizados para Lakebase Search.

Requirements

  • Postgres 16 o posterior
  • Acceso beta para el proyecto. Lakebase Search está en beta; póngase en contacto con su representante de cuenta de Databricks para solicitarlo.
  • La habilitación de Lakebase Search en un proyecto es irreversible

Una vez que el proyecto tenga acceso, habilite Lakebase Search en la configuración del proyecto:

  1. En el proyecto de Lakebase, haga clic en Configuración en el panel de navegación izquierdo.
  2. En Búsqueda de Lakebase, haga clic en Habilitar búsqueda de Lakebase.

Advertencia

Habilitación de Lakebase Search:

  • Reinicia todos los procesos del proyecto, quitando las conexiones activas.
  • Hace que las lakebase_vector extensiones y lakebase_text estén disponibles para instalar
  • No se puede desactivar una vez habilitado

Instalar extensiones

Después de habilitar Lakebase Search, instale las extensiones en la base de datos:

-- 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;

Empieza ahora

En el ejemplo siguiente se crea una documents tabla con una columna vectorial y una columna de búsqueda de texto completo y, a continuación, se ejecutan consultas de vectores y palabras clave:

Note

En estos ejemplos se usan vectores literales pequeños como '[0.1, 0.2, 0.3]' para la ilustración. En una aplicación real, genere incrustaciones externamente con un modelo de inserción y, a continuación, almacene el resultado en la VECTOR columna. En Databricks, puede consultar un modelo de inserción mediante Model Serving (por ejemplo, con ai_query en un cuaderno o Databricks SQL) e insertar los vectores resultantes en Lakebase. La VECTOR(n) columna y el índice deben usar la misma dimensión n que la salida del 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;

En el siguiente ejemplo de búsqueda híbrida se reutilizan la documents tabla y los índices de Introducción. Recupera los principales candidatos de cada búsqueda de forma independiente y, a continuación, los combina en una única clasificación mediante La fusión de clasificación recíproca (RRF): los resultados que se clasifican bien en cualquiera de las búsquedas o en ambas búsquedas puntúan más 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 obtiene sus propios 40 mejores candidatos. RANK() asigna el mismo rango a las puntuaciones empatadas. La constante 60 atenúa la influencia de los resultados de baja clasificación, y d.id desempata los resultados para una paginación estable. Ajusta el valor LIMIT por lista y la constante RRF según tus datos. Otros métodos de fusión, como la puntuación ponderada, también son válidos.

Extensions

Extension Purpose Tipo de índice
lakebase_vector Búsqueda de vectores de ANN, compatible con pgvector lakebase_ann
lakebase_text Búsqueda de texto completo BM25, compatible con FTS lakebase_bm25