lakebase_text

Это важно

Эта функция доступна в бета-версии. Администраторы рабочей области могут управлять доступом к этой функции на странице "Предварительные версии ". См. статью "Управление предварительными версиями Azure Databricks".

Расширение lakebase_text добавляет полнотекстовый поиск BM25 в Lakebase с помощью lakebase_bm25 типа индекса. Он совместим со стандартными tsvector типами и операторами запросов PostgreSQL.

Install

Сначала включите поиск Lakebase в параметрах проекта. Затем установите расширение:

CREATE EXTENSION IF NOT EXISTS lakebase_text;

Встроенный полнотекстовый поиск 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; не требуется явно указывать его.

Дальнейшие действия