Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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;
Aktualizacja rozszerzenia i indeksów
Nowa wersja Lakebase Search może dodać funkcje, poprawki i poprawę wydajności. Chociaż Lakebase Search jest udostępniany w ramach aktualizacji Lakebase, nie aktualizuje wszystkiego automatycznie. W lakebase_text, dwie rzeczy aktualizują się osobno i mają numery wersji, które nie są ze sobą powiązane:
-
Wersja rozszerzenia to wersja obiektów SQL, która
CREATE EXTENSION lakebase_texttworzy, w tym ich typy danych, funkcje, operatory oraz metodęlakebase_bm25dostępu indeksowego. Ta wersja jest relacjonowana przezSELECT installed_version FROM pg_available_extensions WHERE name = 'lakebase_text'.ALTER EXTENSION lakebase_text UPDATEAktualizuje tę wersję. -
Format pamięci indeksowej to układ indeksu
lakebase_bm25na dysku. Rozszerzenie może wprowadzić zaktualizowane formaty pamięci indeksowej w aktualizacji, odblokowując więcej funkcji i zapewniając lepszą wydajność. Wszystkie nowo utworzone indeksy automatycznie korzystają z najnowszego formatu pamięci, natomiast istniejące indeksy można zaktualizować do nowego formatu poREINDEX INDEX CONCURRENTLYudostępnieniu nowszego formatu pamięci.
Aktualizacja nie jest pilna. Rozszerzenie jest kompatybilne z obiektami SQL i formatami pamięci rejestracyjnej z starszych wersji, ale pozostawanie aktualnym pozostaje na wspieranej, najlepiej działającej ścieżce i unika większej migracji w przyszłości, więc aktualizuj ją wtedy, gdy jest wygodnie, zamiast odkładać ją w nieskończoność.
Note
Najnowsza dostępna wersja rozszerzenia jest zgłaszana przez SELECT default_version FROM pg_available_extensions WHERE name = 'lakebase_text'.
Dlaczego lakebase_text zamiast standardowego wyszukiwania pełnotekstowego GIN
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.
Note
Skanowanie lakebase_bm25 indeksowe może pominąć dowolną liczbę wierszy, których <@> wartość wynosi dokładnie 0.0. Nie polegaj na zwrotach rzędów zerowych ani na ich kolejności. Aby ocenić każdy wiersz, ustaw lakebase_bm25.enable_scan sekwencyjne off skanowanie zamiast tego.
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;
Aby utrzymać wydajność zapytań i aktualizacji, VACUUM należy szybko wyczyścić indeks. Dla tabeli dedykowanej wyszukiwaniu tekstowemu Databricks zaleca ustawienie autovacuum_vacuum_insert_scale_factor tak, 0 aby próg automatycznego próżnienia wyzwalany przez wstawkę nie rósł wraz z tabelą:
ALTER TABLE documents SET (
autovacuum_vacuum_insert_scale_factor = 0
);
Przy współczynniku skalowania ustawionym na , 0autovacuum_vacuum_insert_threshold określa stałą liczbę wstawionych krotek, które wywołują autopkurzę. Dostosuj ten próg do swojego obciążenia.
Ostrzeżenie
Globalne statystyki BM25 nie są wersjonowane przez MVCC. Jeśli VACUUM aktualizacja statystyk podczas korzystania z starszego snapshotu MVCC jest aktualizowana, transakcja może obliczać wyniki na podstawie statystyk nowszych niż jej migawka wiersza. Widoczność wierszy pozostaje zgodna z MVCC, ale wyniki, rankingi i wyniki z pierwszej klasy mogą się zmieniać w ramach transakcji REPEATABLE READ . Nie polegaj na stabilnych rankingach BM25 w zestawieniu VACUUMz jednoczesnym , w tym autovacuum.
Dostrajanie wyszukiwania
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ć. |