lakebase_text
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 :
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.
-- 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 :
VACUUM documents;
Optimiser la recherche
GUCs au niveau de la session
parameter | Type | Par défaut | Description |
|---|---|---|---|
| entier |
| Nombre maximal de résultats renvoyés par l'index. |
| booléen |
| Lorsque |
| booléen |
| Définissez sur |
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 |
|---|---|---|---|---|
| réel |
| 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. |
| réel |
| 0,0 à 1,0 | Normalisation de la longueur du document. |
| entier |
| de 1 à 65535 | Limite de fallback lorsque le GUC de session n'est pas défini. |
| booléen |
| N/A | Paramètre de préfiltre fallback lorsque le GUC de session n'est pas défini. |
-- 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 |
|---|---|---|---|
|
|
| Renvoie un score BM25 négatif. Triez par ordre croissant pour obtenir les résultats les plus pertinents en premier. |
Fonctions
Fonction | Renvoie | Description |
|---|---|---|
|
| Construit un objet de query BM25 à partir d'un |
Classes d'opérateurs
Classe | Default pour | Description |
|---|---|---|
|
| Mappe |