Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Эта функция доступна в бета-версии. Администраторы рабочей области могут управлять доступом к этой функции на странице "Предварительные версии ". См. статью "Управление предварительными версиями Azure Databricks".
Расширение lakebase_text добавляет полнотекстовый поиск BM25 в Lakebase с помощью lakebase_bm25 типа индекса. Он совместим со стандартными tsvector типами и операторами запросов PostgreSQL.
Install
Сначала включите поиск Lakebase в параметрах проекта. Затем установите расширение:
CREATE EXTENSION IF NOT EXISTS lakebase_text;
Почему lakebase_text вместо стандартного полнотекстового поиска GIN
Встроенный полнотекстовый поиск PostgreSQL использует индексы GIN и ts_rank для оценки релевантности.
ts_rank не использует глобальную статистику корпусов, поэтому оценки ухудшаются по мере роста данных.
lakebase_text улучшает это двумя способами:
- BM25 ранжирования учитывает частоту терминов, длину документа и статистику на уровне корпуса одновременно, создавая более точные оценки релевантности, чем TF-IDF.
- Top-K pushdown использует Block-Max WAND для возврата только наиболее релевантных результатов из индекса без оценки каждого совпадения в результирующем наборе.
Быстрый старт
lakebase_bm25 Создайте индекс после вставки данных. BM25 вычисляет статистику по всему массиву во время сборки индекса, а не добавочно, поэтому индекс должен быть создан в заполненной таблице.
-- 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;
Оператор <@> возвращает отрицательный показатель BM25. Упорядочение по возрастанию оценки сначала возвращает наиболее релевантные результаты.
Пополнение из синхронизированных таблиц
Если вы загружаете исходный текст из Unity Catalog, а не вставляете его напрямую, синхронизированные таблицы могут генерировать tsvector столбец во время синхронизации, готовый к индексации lakebase_bm25 сразу после завершения синхронизации. См. раздел «Картографирование пользовательских типов» для поиска Lakebase.
Оставить индекс точным
Статистика BM25 вычисляется во время сборки индекса и обновляется с помощью VACUUM. Для большинства рабочих нагрузок регулярные VACUUM оценки точны. После массовой загрузки большого объема новых данных запустите вручную VACUUM :
VACUUM documents;
Настройка поиска
Графические интерфейсы на уровне сеанса
| Parameter | Type | Default | Описание |
|---|---|---|---|
lakebase_bm25.default_limit |
integer | 1000 |
Максимальное количество результатов, возвращаемых из индекса. |
lakebase_bm25.prefilter |
boolean | false |
При trueоценке WHERE условий перед вычислениями показателей BM25. Используйте, когда фильтры устраняют много строк и являются дешевыми для оценки. |
lakebase_bm25.enable_scan |
boolean | true |
Установите для false принудительной последовательной проверки, обходя индекс. Полезно для тестирования. |
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;
ГРАФИЧЕСКИЕ интерфейсы имеют приоритет над параметрами хранилища индексов, если оба заданы.
Параметры хранилища индексов
Задайте эти параметры во время создания индекса или с помощью ALTER INDEX:
| Parameter | Type | Default | Range | Описание |
|---|---|---|---|---|
k1 |
real | 1.2 |
от 1.2 до 2.0 | Насыщенность частоты терминов. Более высокие значения дают больше веса повторяющихся терминов. |
b |
real | 0.75 |
от 0.0 до 1.0 | Нормализация длины документа.
0.0 отключает нормализацию длины; 1.0 применяет полную нормализацию. |
default_limit |
integer | 1000 |
От 1 до 65535 | Резервное ограничение, если графический интерфейс сеанса не задан. |
prefilter |
boolean | false |
N/A | Резервный параметр префильтратора, если guC сеанса не задан. |
-- 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);
Справочник по API
Типы
bm25query_tsvector: объединяет запрос tsvector с идентификатором целевого индекса. Используется в качестве правого <@>операнда .
Операторы
| Operator | Signature | Returns | Описание |
|---|---|---|---|
<@> |
tsvector <@> bm25query_tsvector |
double precision |
Возвращает отрицательный показатель BM25. Сначала упорядочение по возрастанию, чтобы получить наиболее релевантные результаты. |
Functions
| Функция | Returns | Описание |
|---|---|---|
to_bm25query(query tsvector, index regclass) |
bm25query_tsvector |
Создает объект запроса BM25 из tsvector и идентификатора объекта индекса. |
Классы операторов
| Class | По умолчанию для | Описание |
|---|---|---|
tsvector_bm25_ops |
tsvector |
Сопоставляет tsvector столбцы с оператором <@> оценки BM25. Это класс операторов по умолчанию для tsvector с lakebase_bm25; не требуется явно указывать его. |