Aller au contenu principal

lakebase_text

info

Bêta

Cette fonctionnalité est en Bêta. Les administrateurs du Workspace peuvent contrôler l'accès à cette fonctionnalité à partir de la page Previews . Consultez Gérer les aperçus Databricks.

L'extension lakebase_text ajoute la recherche en texte intégral BM25 à Lakebase via le type d'index lakebase_bm25. Il est compatible avec le type tsvector standard et les opérateurs de requête de PostgreSQL.

Installer

Tout d'abord, activez la recherche Lakebase dans les paramètres de votre projet. Puis installez l'extension :

SQL
CREATE EXTENSION IF NOT EXISTS lakebase_text;

Pourquoi lakebase_text au lieu de la recherche en texte intégral GIN standard ?

La recherche en texte intégral intégré de PostgreSQL utilise des index GIN et ts_rank pour le scoring de pertinence. ts_rank n'utilise pas de statistiques de corpus globales, de sorte que les scores se dégradent à mesure que les données augmentent. lakebase_text améliore cela de deux manières :

  • Le classement BM25 tient compte de la fréquence des termes, de la longueur des documents et des statistiques à l'échelle du corpus simultanément, ce qui produit des scores de pertinence plus précis que le TF-IDF.
  • Top-K pushdown utilise Block-Max WAND pour renvoyer uniquement les K résultats les plus pertinents de l'index, sans évaluer chaque correspondance dans le jeu de résultats.

Quick start

Créez l’index lakebase_bm25 après l’insertion de données. BM25 calcule des statistiques à l’échelle du corpus au moment de la création de l’index, et non de manière incrémentielle. L’index doit donc être créé sur une table renseignée.

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

L’opérateur <@> renvoie un score BM25 négatif. Le classement par score croissant renvoie d'abord les résultats les plus pertinents.

Maintenir l'index précis

Les statistiques BM25 sont calculées au moment de la création de l'index et mises à jour par VACUUM. Pour la plupart des charges de travail, un VACUUM régulier maintient des scores précis. Après le chargement en masse d'une grande quantité de nouvelles données, exécutez VACUUM manuellement :

SQL
VACUUM documents;

Optimiser la recherche

GUCs au niveau de la session

parameter

Type

Par défaut

Description

lakebase_bm25.default_limit

entier

1000

Nombre maximal de résultats renvoyés par l'index.

lakebase_bm25.prefilter

booléen

false

Lorsque true, évalue WHERE conditions avant de calculer les scores BM25. Utilisez lorsque les filtres éliminent de nombreuses lignes et sont peu coûteux à évaluer.

lakebase_bm25.enable_scan

booléen

true

Définissez sur false pour forcer une analyse séquentielle, en ignorant l'index. Utile pour les tests.

parameter

Type

Par défaut

Description

lakebase_bm25.default_limit

entier

1000

Nombre maximal de résultats renvoyés par l'index.

lakebase_bm25.prefilter

booléen

false

Lorsque true, évalue WHERE conditions avant de calculer les scores BM25. Utilisez lorsque les filtres éliminent de nombreuses lignes et sont peu coûteux à évaluer.

lakebase_bm25.enable_scan

booléen

true

Définissez sur false pour forcer une analyse séquentielle, en ignorant l'index. Utile pour les tests.

SQL
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

Les GUC l'emportent sur les paramètres de stockage d'index lorsque les deux sont définis.

Paramètres de stockage d'index

Définissez ces options au moment de la création de l'index ou avec ALTER INDEX:

parameter

Type

Par défaut

Plage

Description

k1

réel

1.2

De 1,2 à 2,0

Saturation de la fréquence des termes. Des valeurs plus élevées accordent plus de poids aux termes répétés.

b

réel

0.75

0,0 à 1,0

Normalisation de la longueur du document. 0.0 désactive la normalisation de la longueur ; 1.0 applique la normalisation complète.

default_limit

entier

1000

de 1 à 65535

Limite de fallback lorsque le GUC de session n'est pas défini.

prefilter

booléen

false

N/A

Paramètre de préfiltre fallback lorsque le GUC de session n'est pas défini.

parameter

Type

Par défaut

Plage

Description

k1

réel

1.2

De 1,2 à 2,0

Saturation de la fréquence des termes. Des valeurs plus élevées accordent plus de poids aux termes répétés.

b

réel

0.75

0,0 à 1,0

Normalisation de la longueur du document. 0.0 désactive la normalisation de la longueur ; 1.0 applique la normalisation complète.

default_limit

entier

1000

de 1 à 65535

Limite de fallback lorsque le GUC de session n'est pas défini.

prefilter

booléen

false

N/A

Paramètre de préfiltre fallback lorsque le GUC de session n'est pas défini.

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

Référence de l'API

Types

bm25query_tsvector: Combine une query tsvector avec l’identifiant de l’index cible. Utilisé comme opérande de droite de <@>.

Opérateurs

Opérateur

Signature

Renvoie

Description

<@>

tsvector <@> bm25query_tsvector

double precision

Renvoie un score BM25 négatif. Triez par ordre croissant pour obtenir les résultats les plus pertinents en premier.

Opérateur

Signature

Renvoie

Description

<@>

tsvector <@> bm25query_tsvector

double precision

Renvoie un score BM25 négatif. Triez par ordre croissant pour obtenir les résultats les plus pertinents en premier.

Fonctions

Fonction

Renvoie

Description

to_bm25query(query tsvector, index regclass)

bm25query_tsvector

Construit un objet de query BM25 à partir d'un tsvector et de l'identificateur d'objet de l'index.

Fonction

Renvoie

Description

to_bm25query(query tsvector, index regclass)

bm25query_tsvector

Construit un objet de query BM25 à partir d'un tsvector et de l'identificateur d'objet de l'index.

Classes d'opérateurs

Classe

Default pour

Description

tsvector_bm25_ops

tsvector

Mappe tsvector colonnes à l'opérateur <@> pour la notation BM25. Il s'agit de la classe d'opérateur default pour tsvector avec lakebase_bm25; vous n'avez pas besoin de la spécifier explicitement.

Classe

Default pour

Description

tsvector_bm25_ops

tsvector

Mappe tsvector colonnes à l'opérateur <@> pour la notation BM25. Il s'agit de la classe d'opérateur default pour tsvector avec lakebase_bm25; vous n'avez pas besoin de la spécifier explicitement.

Étapes suivantes