lakebase_text

Important

Ta funkcja jest dostępna w wersji beta. Administratorzy obszaru roboczego mogą kontrolować dostęp do tej funkcji ze strony Podglądy . Zobacz Zarządzanie wersjami zapoznawczami usługi Azure Databricks.

Rozszerzenie lakebase_text dodaje wyszukiwanie pełnotekstowe BM25 do usługi Lakebase za pomocą typu indeksu lakebase_bm25 . Jest on zgodny ze standardowym tsvector typem i operatorami zapytań bazy danych PostgreSQL.

Install

Najpierw włącz usługę Lakebase Search w ustawieniach projektu. Następnie zainstaluj rozszerzenie:

CREATE EXTENSION IF NOT EXISTS lakebase_text;

Wbudowane wyszukiwanie pełnotekstowe postgreSQL używa indeksów GIN i ts_rank oceniania istotności. ts_rank nie używa globalnych statystyk corpus, więc wyniki obniżają wydajność w miarę wzrostu danych. lakebase_text w ten sposób można poprawić na dwa sposoby:

  • Klasyfikacja BM25 odpowiada za częstotliwość terminów, długość dokumentu i statystyki całej korpusu jednocześnie, generując dokładniejsze wyniki istotności niż TF-IDF.
  • Top-K wypychanie używa Block-Max WAND, aby zwrócić tylko K najbardziej odpowiednich wyników z indeksu, bez oceniania każdego dopasowania w zestawie wyników.

Szybki start

Skompiluj lakebase_bm25 indeks po wstawieniu danych. BM25 oblicza dane statystyczne dotyczące całego indeksu w czasie kompilacji indeksu, a nie przyrostowo, dlatego indeks musi zostać utworzony w wypełnionej tabeli.

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

Operator <@> zwraca ujemny wynik BM25. Kolejność według rosnącego wyniku zwraca najpierw najbardziej odpowiednie wyniki.

Wypełnianie z zsynchronizowanych tabel

Jeśli ładujesz tekst źródłowy z Unity Catalog zamiast wstawiać go bezpośrednio, synchronizowane tabele mogą wygenerować kolumnę tsvector podczas synchronizacji, gotową do indeksowania zaraz lakebase_bm25 po zakończeniu synchronizacji. Zobacz Mapowanie niestandardowych typów dla wyszukiwania bazy jeziora.

Zachowaj dokładność indeksu

Statystyki BM25 są obliczane w czasie kompilacji indeksu i aktualizowane przez VACUUMprogram . W przypadku większości obciążeń regularne wyniki VACUUM są dokładne. Po zbiorczym załadowaniu dużej ilości nowych danych uruchom VACUUM ręcznie:

VACUUM documents;

Karty GUCs na poziomie sesji

Parameter Typ Default Description
lakebase_bm25.default_limit liczba całkowita 1000 Maksymalna liczba wyników zwróconych z indeksu.
lakebase_bm25.prefilter boolean false Gdy trueprogram oblicza WHERE warunki przed obliczeniami wyników BM25. Użyj polecenia , gdy filtry eliminują wiele wierszy i są tanie do oceny.
lakebase_bm25.enable_scan boolean true Ustaw wartość , aby false wymusić skanowanie sekwencyjne, pomijając indeks. Przydatne do testowania.
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

Interfejsy GUCs mają pierwszeństwo przed parametrami magazynu indeksu po ustawieniu obu tych parametrów.

Parametry magazynu indeksu

Ustaw te opcje w czasie tworzenia indeksu lub za pomocą polecenia ALTER INDEX:

Parameter Typ Default Range Description
k1 real 1.2 Od 1.2 do 2.0 Nasycenie częstości terminu. Wyższe wartości dają większą wagę powtarzającym się terminom.
b real 0.75 Od 0.0 do 1.0 Normalizacja długości dokumentu. 0.0 wyłącza normalizację długości; 1.0 stosuje pełną normalizację.
default_limit liczba całkowita 1000 Od 1 do 65535 Limit rezerwowy, gdy nie ustawiono interfejsu GUC sesji.
prefilter boolean false N/A Ustawienie prefiltru rezerwowego, gdy nie ustawiono interfejsu GUC sesji.
-- 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);

Odniesienie do API

Typy

bm25query_tsvector: łączy zapytanie tsvector z identyfikatorem indeksu docelowego. Używany jako prawy operand .<@>

Operatorów

Operator Signature Zwroty Description
<@> tsvector <@> bm25query_tsvector double precision Zwraca ujemny wynik BM25. Zamów rosnąco, aby najpierw uzyskać najbardziej odpowiednie wyniki.

Functions

Function Zwroty Description
to_bm25query(query tsvector, index regclass) bm25query_tsvector Tworzy obiekt zapytania BM25 z tsvector identyfikatora obiektu i indeksu.

Klasy operatorów

Class Wartość domyślna dla Description
tsvector_bm25_ops tsvector Mapuje tsvector kolumny na <@> operator oceniania BM25. Jest to domyślna klasa operatorów dla tsvector elementu z wartością lakebase_bm25. Nie trzeba jej jawnie określać.

Następne kroki