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