Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Important
Fitur ini ada di Beta. Admin ruang kerja dapat mengontrol akses ke fitur ini dari halaman Pratinjau . Lihat Kelola Pratinjau Azure Databricks.
Ekstensi ini lakebase_text menambahkan pencarian teks lengkap BM25 ke Lakebase melalui lakebase_bm25 jenis indeks. Ini kompatibel dengan jenis standar tsvector PostgreSQL dan operator kueri.
Install
Pertama, aktifkan Lakebase Search di pengaturan proyek Anda. Kemudian instal ekstensi:
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Mengapa lakebase_text alih-alih pencarian teks lengkap GIN standar
Pencarian teks lengkap bawaan PostgreSQL menggunakan indeks GIN dan ts_rank untuk penilaian relevansi.
ts_rank tidak menggunakan statistik korpus global, sehingga skor menurun saat data tumbuh.
lakebase_text meningkatkan hal ini dengan dua cara:
- Peringkat BM25 memperhitungkan frekuensi istilah, panjang dokumen, dan statistik seluruh korpus secara bersamaan, menghasilkan skor relevansi yang lebih akurat daripada TF-IDF.
- Top-K pushdown menggunakan Block-Max WAND untuk mengembalikan hanya hasil K yang paling relevan dari indeks, tanpa menilai setiap kecocokan dalam tataan hasil.
Cepat Mulai
lakebase_bm25 Buat indeks setelah menyisipkan data. BM25 menghitung statistik seluruh korpus pada waktu build indeks, tidak secara bertahap, sehingga indeks harus dibuat pada tabel yang diisi.
-- 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 <@> mengembalikan skor BM25 negatif. Pengurutan dengan skor naik mengembalikan hasil yang paling relevan terlebih dahulu.
Isi dari tabel yang disinkronkan
Jika Anda memuat teks sumber dari Unity Catalog daripada memasukkannya langsung, tabel yang disinkronkan dapat menghasilkan tsvector kolom selama sinkronisasi, siap diindeks lakebase_bm25 segera setelah sinkronisasi selesai. Lihat Pemetaan tipe kustom untuk Pencarian Lakebase.
Menjaga indeks tetap akurat
Statistik BM25 dihitung pada waktu build indeks dan diperbarui oleh VACUUM. Untuk sebagian besar beban kerja, secara teratur VACUUM menjaga skor tetap akurat. Setelah memuat sejumlah besar data baru secara massal, jalankan VACUUM secara manual:
VACUUM documents;
Menyetel pencarian
GUC tingkat sesi
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
lakebase_bm25.default_limit |
integer | 1000 |
Jumlah maksimum hasil yang dikembalikan dari indeks. |
lakebase_bm25.prefilter |
boolean | false |
Ketika true, mengevaluasi WHERE kondisi sebelum menghitung skor BM25. Gunakan saat filter menghilangkan banyak baris dan murah untuk dievaluasi. |
lakebase_bm25.enable_scan |
boolean | true |
Atur ke false untuk memaksa pemindaian berurutan, melewati indeks. Berguna untuk pengujian. |
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;
GUC lebih diutamakan daripada parameter penyimpanan indeks saat keduanya diatur.
Parameter penyimpanan indeks
Atur opsi ini pada waktu pembuatan indeks atau dengan ALTER INDEX:
| Parameter | Tipe | Default | Rentang | Deskripsi |
|---|---|---|---|---|
k1 |
nyata | 1.2 |
1.2 hingga 2.0 | Saturasi frekuensi istilah. Nilai yang lebih tinggi memberikan lebih banyak bobot pada istilah berulang. |
b |
nyata | 0.75 |
0,0 hingga 1,0 | Normalisasi panjang dokumen.
0.0 menonaktifkan normalisasi panjang; 1.0 menerapkan normalisasi penuh. |
default_limit |
integer | 1000 |
1 hingga 65535 | Batas fallback saat GUC sesi tidak diatur. |
prefilter |
boolean | false |
N/A | Pengaturan prafilter fallback saat GUC sesi tidak diatur. |
-- 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);
Referensi API
Jenis
bm25query_tsvector: menggabungkan kueri tsvector dengan pengidentifikasi indeks target. Digunakan sebagai operan yang tepat dari <@>.
Operators
| Operator | Signature | Returns | Deskripsi |
|---|---|---|---|
<@> |
tsvector <@> bm25query_tsvector |
double precision |
Mengembalikan skor BM25 negatif. Urutan naik untuk mendapatkan hasil yang paling relevan terlebih dahulu. |
Functions
| Function | Returns | Deskripsi |
|---|---|---|
to_bm25query(query tsvector, index regclass) |
bm25query_tsvector |
Membuat objek kueri BM25 dari tsvector pengidentifikasi objek dan indeks. |
Kelas operator
| Class | Default untuk | Deskripsi |
|---|---|---|
tsvector_bm25_ops |
tsvector |
Memetakan tsvector kolom ke <@> operator untuk penilaian BM25. Ini adalah kelas operator default untuk tsvector dengan lakebase_bm25; Anda tidak perlu menentukannya secara eksplisit. |