lakebase_text

Important

Cette fonctionnalité est en version bêta. Les administrateurs d’espace de travail peuvent contrôler l’accès à cette fonctionnalité à partir de la page Aperçus . Consultez Gérer les préversions d’Azure 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 les opérateurs de requête et de type standard tsvector de PostgreSQL.

Installer

Tout d’abord, activez La recherche Lakebase dans les paramètres de votre projet. Installez ensuite l’extension :

CREATE EXTENSION IF NOT EXISTS lakebase_text;

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

  • Les comptes de classement BM25 pour la fréquence des termes, la longueur du document et les statistiques à l’échelle du corpus simultanément, produisant des scores de pertinence plus précis que TF-IDF.
  • Top-K pushdown utilise Block-Max WAND pour retourner uniquement les résultats les plus pertinents de l’index, sans marquer chaque correspondance dans le jeu de résultats.

Démarrage rapide

Générez l’index lakebase_bm25 après l’insertion de données. BM25 calcule les statistiques à l’échelle du corpus au moment de la génération d’index, et non de façon incrémentielle, de sorte que l’index doit être créé sur une table remplie.

-- 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 <@> retourne un score BM25 négatif. L’ordre par score croissant retourne d’abord les résultats les plus pertinents.

Peupler à partir de tables synchronisées

Si vous chargez le texte source depuis le catalogue Unity au lieu de l’insérer directement, les tables synchronisées peuvent générer une tsvector colonne pendant la synchronisation, prête à être indexée lakebase_bm25 dès que la synchronisation est terminée. Voir Mappage personnalisé de types pour la recherche Lakebase.

Conserver l’index exact

Les statistiques BM25 sont calculées au moment de la génération d’index et mises à jour par VACUUM. Pour la plupart des charges de travail, les scores sont réguliers VACUUM . Après le chargement en bloc d’une grande quantité de nouvelles données, exécutez VACUUM manuellement :

VACUUM documents;

GuCs au niveau de la session

Paramètre Type Default Description
lakebase_bm25.default_limit entier 1000 Nombre maximal de résultats retournés à partir de l’index.
lakebase_bm25.prefilter booléen false Quand true, évalue les WHERE conditions avant de calculer les scores BM25. Utilisez quand les filtres éliminent de nombreuses lignes et sont bon marché pour évaluer.
lakebase_bm25.enable_scan booléen true Définissez cette option pour false forcer une analyse séquentielle, en contournant l’index. Utile pour les tests.
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

Les guCs sont prioritaires 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 d’index ou avec ALTER INDEX:

Paramètre Type Default Plage Description
k1 real 1.2 1.2 à 2.0 Saturation de la fréquence des termes. Les valeurs plus élevées donnent plus de poids aux termes répétés.
b real 0.75 0.0 à 1.0 Normalisation de la longueur du document. 0.0 désactive la normalisation de longueur ; 1.0 applique la normalisation complète.
default_limit entier 1000 1 à 65535 Limite de secours lorsque le GUC de session n’est pas défini.
prefilter booléen false N/A Paramètre de préfiltrage de secours 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 d’API

Types

bm25query_tsvector: combine une requête tsvector avec l’identificateur d’index cible. Utilisé comme opérande droit de <@>.

Opérateurs

Opérateur Signature Returns Description
<@> tsvector <@> bm25query_tsvector double precision Retourne un score BM25 négatif. Ordre croissant pour obtenir d’abord les résultats les plus pertinents.

Functions

Fonction Returns Description
to_bm25query(query tsvector, index regclass) bm25query_tsvector Construit un objet de requête BM25 à partir d’un tsvector identificateur d’objet et de l’index.

Classes d’opérateurs

Classe Valeur par défaut pour Description
tsvector_bm25_ops tsvector Mappe les tsvector colonnes à l’opérateur pour le <@> scoring BM25. Il s’agit de la classe d’opérateur par défaut pour tsvector laquelle lakebase_bm25vous n’avez pas besoin de la spécifier explicitement.

Étapes suivantes