Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La lakebase_text extensión agrega la búsqueda de texto completo BM25 a Lakebase a través del tipo de lakebase_bm25 índice. Es compatible con los operadores de consulta y tipo estándar tsvector de PostgreSQL.
Install
En primer lugar, habilite Lakebase Search en la configuración del proyecto. A continuación, instale la extensión:
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Mejora la extensión y los índices
Una nueva versión de Lakebase Search puede añadir funciones, correcciones y mejoras de rendimiento. Aunque Lakebase Search se publica como parte de las actualizaciones de Lakebase, no actualiza todo automáticamente. En lakebase_text, dos cosas se actualizan por separado y llevan números de versión que no están relacionados entre sí:
-
La versión de extensión es la versión de los objetos SQL que
CREATE EXTENSION lakebase_textcrea, incluyendo sus tipos de datos, funciones, operadores y ellakebase_bm25método de acceso al índice. Esta versión es reportada porSELECT installed_version FROM pg_available_extensions WHERE name = 'lakebase_text'.ALTER EXTENSION lakebase_text UPDATEactualiza esta versión. -
El formato de almacenamiento de índice es la disposición en disco de un
lakebase_bm25índice. La extensión podría introducir formatos actualizados de almacenamiento de índice en una actualización, desbloqueando más funciones y ofreciendo un mejor rendimiento. Todos los índices recién creados usan automáticamente el último formato de almacenamiento, mientras que los índices existentes pueden actualizarse al nuevo formato despuésREINDEX INDEX CONCURRENTLYde que haya disponible un formato de almacenamiento más reciente.
La actualización no es urgente. La extensión es compatible con objetos SQL y formatos de almacenamiento de índices de versiones anteriores, pero mantenerse actualizado te mantiene en la ruta soportada y con mejor rendimiento y evita una migración mayor más adelante, así que actualiza cuando te conviene en lugar de posponerlo indefinidamente.
Nota:
La última versión de extensión disponible es reportada por SELECT default_version FROM pg_available_extensions WHERE name = 'lakebase_text'.
Por qué lakebase_text en lugar de la búsqueda de texto completo gin estándar
La búsqueda de texto completo integrada de PostgreSQL usa índices GIN y ts_rank para la puntuación de relevancia.
ts_rank no usa estadísticas globales de corpus, por lo que las puntuaciones se degradan a medida que crecen los datos.
lakebase_text mejora esto de dos maneras:
- 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, lo que produce puntuaciones de relevancia más precisas que TF-IDF.
- Top-K aplicación usa Block-Max WAND para devolver solo los resultados más relevantes de K del índice, sin puntuar todas las coincidencias en el conjunto de resultados.
Inicio rápido
Compile el lakebase_bm25 índice después de insertar datos. BM25 calcula estadísticas en todo el corpus en tiempo de compilación del índice, no incrementalmente, por lo que el índice se debe crear en una tabla rellenada.
-- 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;
El <@> operador devuelve una puntuación BM25 negativa. La ordenación por puntuación ascendente devuelve primero los resultados más relevantes.
Nota:
Un lakebase_bm25 escaneo de índice puede omitir cualquier número de filas cuyo <@> valor sea exactamente 0.0. No confíes en que las filas de distancia cero sean devueltas ni en su orden. Para evaluar cada fila, se configura lakebase_bm25.enable_scan para off usar un escaneo secuencial en su lugar.
Poblar desde tablas sincronizadas
Si cargas texto fuente desde el Catálogo de Unity en lugar de insertarlo directamente, las tablas sincronizadas pueden generar una tsvector columna durante la sincronización, lista para indexar en lakebase_bm25 cuanto termine la sincronización. Consulta Mapeado de tipos personalizado para Lakebase Search.
Mantener el índice preciso
Las estadísticas de BM25 se calculan en tiempo de compilación del índice y se actualizan mediante VACUUM. Para la mayoría de las cargas de trabajo, normalmente VACUUM mantiene las puntuaciones precisas. Después de cargar de forma masiva una gran cantidad de datos nuevos, ejecute VACUUM manualmente:
VACUUM documents;
Para mantener la consulta y actualizar el rendimiento, VACUUM debe limpiar el índice rápidamente. Para una tabla dedicada a la búsqueda de texto, Databricks recomienda establecer autovacuum_vacuum_insert_scale_factor para 0 que el umbral de autovacío activado por inserción no crezca con la tabla:
ALTER TABLE documents SET (
autovacuum_vacuum_insert_scale_factor = 0
);
Con el factor de escala establecido en 0, autovacuum_vacuum_insert_threshold determina el número fijo de tuplas insertadas que activa el autovacío. Ajusta ese umbral según tu carga de trabajo.
Advertencia
Las estadísticas globales de BM25 no están versionadas por MVCC. Si VACUUM actualiza las estadísticas mientras una transacción utiliza una instantánea antigua de MVCC, la transacción puede calcular puntuaciones usando estadísticas más recientes que su instantánea de fila. La visibilidad de la fila sigue siendo compatible con MVCC, pero las puntuaciones, las clasificaciones y los resultados de los primeros K pueden cambiar dentro de una REPEATABLE READ transacción. No confíes en posiciones BM25 estables en instantáneas a lo largo de un simultáneo VACUUM, incluyendo el autovacío.
Optimización de la búsqueda
GUCs de nivel de sesión
| Parámetro | Tipo | Predeterminado | Description |
|---|---|---|---|
lakebase_bm25.default_limit |
integer | 1000 |
Número máximo de resultados devueltos del índice. |
lakebase_bm25.prefilter |
boolean | false |
Cuando true, evalúa WHERE las condiciones antes de calcular las puntuaciones de BM25. Use cuando los filtros eliminen muchas filas y sean baratos para evaluar. |
lakebase_bm25.enable_scan |
boolean | true |
Establézcalo en false para forzar un examen secuencial y pase el índice. Útil para las pruebas. |
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;
Las GUC tienen prioridad sobre los parámetros de almacenamiento de índices cuando se establecen ambos.
Parámetros de almacenamiento de índices
Establezca estas opciones en el momento de creación del índice o con ALTER INDEX:
| Parámetro | Tipo | Predeterminado | Intervalo | Description |
|---|---|---|---|---|
k1 |
real | 1.2 |
De 1.2 a 2.0 | Saturación de frecuencia de términos. Los valores más altos proporcionan más peso a términos repetidos. |
b |
real | 0.75 |
De 0,0 a 1,0 | Normalización de longitud del documento.
0.0 deshabilita la normalización de longitud; 1.0 aplica la normalización completa. |
default_limit |
integer | 1000 |
De 1 a 65535 | Límite de reserva cuando no se establece la guC de sesión. |
prefilter |
boolean | false |
N/A | Configuración de prefiltro de reserva cuando no se establece la guC de sesión. |
-- Set parameters at index creation (use a new name — the Quick start already created documents_passage_bm25)
CREATE INDEX documents_passage_bm25_tuned ON documents USING lakebase_bm25 (vector)
WITH (default_limit = 20, k1 = 1.5);
-- Update parameters on an existing index
ALTER INDEX documents_passage_bm25_tuned SET (default_limit = 50);
Referencia de las API
Tipos
bm25query_tsvector: combina una consulta tsvector con el identificador de índice de destino. Se usa como operando derecho de <@>.
Operadores
| Operador | Signature | Returns | Description |
|---|---|---|---|
<@> |
tsvector <@> bm25query_tsvector |
double precision |
Devuelve una puntuación BM25 negativa. Ordene ascendentemente para obtener primero los resultados más relevantes. |
Functions
| Function | Returns | Description |
|---|---|---|
to_bm25query(query tsvector, index regclass) |
bm25query_tsvector |
Construye un objeto de consulta BM25 a partir de y tsvector el identificador de objeto del índice. |
Clases de operador
| Class | Valor predeterminado para | Description |
|---|---|---|
tsvector_bm25_ops |
tsvector |
Asigna tsvector columnas al operador para la <@> puntuación BM25. Esta es la clase de operador predeterminada para tsvector con lakebase_bm25; no es necesario especificarla explícitamente. |