lakebase_text

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;

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;

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.

Langkah berikutnya