Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Important
Tato funkce je v beta verzi. Správci pracovního prostoru můžou řídit přístup k této funkci ze stránky Previews . Viz Manage Azure Databricks preview.
Rozšíření lakebase_text přidá fulltextové vyhledávání BM25 do Lakebase prostřednictvím typu indexu lakebase_bm25 . Je kompatibilní se standardním tsvector typem a operátory dotazů PostgreSQL.
Install
Nejprve v nastavení projektu povolte službu Lakebase Search . Pak nainstalujte rozšíření:
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Proč lakebase_text místo standardního fulltextového vyhledávání GIN
Integrované fulltextové vyhledávání PostgreSQL používá indexy GIN a ts_rank pro vyhodnocování relevance.
ts_rank nepoužívá globální statistiku korpusu, takže skóre se snižuje při růstu dat.
lakebase_text zlepšuje tuto možnost dvěma způsoby:
- Hodnocení BM25 současně vytváří přesnější skóre relevance než TF-IDF.
- Top-K pushdown používá Block-Max WAND k vrácení jenom nejrelevavantnějších výsledků z indexu, aniž by se v sadě výsledků hodnotily všechny shody.
Rychlý start
lakebase_bm25 Po vložení dat vytvořte index. BM25 vypočítá statistiky pro celý soubor v době sestavení indexu, nikoli přírůstkově, takže index musí být vytvořen v naplněné tabulce.
-- 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;
Operátor <@> vrátí záporné skóre BM25. Seřazení vzestupným skóre vrátí jako první nejrelevantní výsledky.
Zachování přesného indexu
Statistiky BM25 se počítají v době sestavení indexu a aktualizují .VACUUM U většiny úloh pravidelně VACUUM udržuje přesné skóre. Po hromadném načtení velkého množství nových dat spusťte VACUUM ručně:
VACUUM documents;
Ladění hledání
Gucs na úrovni relace
| Parametr | Typ | Výchozí | Description |
|---|---|---|---|
lakebase_bm25.default_limit |
integer | 1000 |
Maximální počet výsledků vrácených z indexu |
lakebase_bm25.prefilter |
boolean | false |
Když truevyhodnotí WHERE podmínky před výpočtem skóre BM25. Použijte, když filtry eliminují mnoho řádků a jsou levné k vyhodnocení. |
lakebase_bm25.enable_scan |
boolean | true |
Nastavte na false vynucení sekvenčního prohledávání a vynechání indexu. Užitečné pro testování. |
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;
Pokud jsou obě nastavené, mají guc přednost před parametry úložiště indexu.
Parametry úložiště indexu
Nastavte tyto možnosti při vytváření indexu nebo pomocí ALTER INDEX:
| Parametr | Typ | Výchozí | Rozmezí | Description |
|---|---|---|---|---|
k1 |
real | 1.2 |
1.2 až 2.0 | Nasycení frekvence termínu. Vyšší hodnoty dávají větší váhu opakovaným termínům. |
b |
real | 0.75 |
0.0 až 1.0 | Normalizace délky dokumentu
0.0 zakazuje normalizaci délky; 1.0 použije úplnou normalizaci. |
default_limit |
integer | 1000 |
1 až 65535 | Náhradní limit, pokud není nastavená hodnota GUC relace. |
prefilter |
boolean | false |
N/A | Nastavení záložního předfiltru, pokud není nastavená hodnota GUC relace. |
-- 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);
Referenční informace k rozhraní API
Typy
bm25query_tsvector: Kombinuje dotaz tsvector s identifikátorem cílového indexu. Používá se jako pravý operand <@>.
Operators
| Operator | Signature | Returns | Description |
|---|---|---|---|
<@> |
tsvector <@> bm25query_tsvector |
double precision |
Vrátí záporné skóre BM25. Seřazení vzestupně, aby se nejdřív získaly nejrelevavantnější výsledky. |
Functions
| Function | Returns | Description |
|---|---|---|
to_bm25query(query tsvector, index regclass) |
bm25query_tsvector |
Vytvoří objekt dotazu BM25 z tsvector identifikátoru objektu indexu. |
Třídy operátorů
| Class | Výchozí hodnota pro | Description |
|---|---|---|
tsvector_bm25_ops |
tsvector |
Namapuje tsvector sloupce na <@> operátora pro bodování BM25. Toto je výchozí třída operátoru pro tsvector ; lakebase_bm25nemusíte ji explicitně zadávat. |