lakebase_text

Important

이 기능은 베타 버전으로 제공됩니다. 작업 영역 관리자는 미리 보기 페이지에서 이 기능에 대한 액세스를 제어할 수 있습니다. Azure Databricks 미리 보기 관리를 참조하세요.

확장은 lakebase_text 인덱스 형식을 통해 BM25 전체 텍스트 검색을 Lakebase에 lakebase_bm25 추가합니다. PostgreSQL의 표준 tsvector 형식 및 쿼리 연산자와 호환됩니다.

Install

먼저 프로젝트 설정에서 Lakebase 검색을 사용하도록 설정합니다 . 그런 다음, 확장을 설치합니다.

CREATE EXTENSION IF NOT EXISTS lakebase_text;

PostgreSQL의 기본 제공 전체 텍스트 검색은 GIN 인덱스와 ts_rank 관련성 점수를 사용합니다. ts_rank 에서는 전역 코퍼스 통계를 사용하지 않으므로 데이터가 증가함에 따라 점수가 저하됩니다. lakebase_text 는 다음 두 가지 방법으로 이를 개선합니다.

  • BM25 순위 는 용어 빈도, 문서 길이 및 코퍼스 전체 통계를 동시에 고려하여 TF-IDF보다 더 정확한 관련성 점수를 생성합니다.
  • Top-K 푸시다운 은 Block-Max WAND를 사용하여 결과 집합의 모든 일치 항목을 채점하지 않고 인덱스에서 가장 관련성이 큰 K 결과만 반환합니다.

빠른 시작

데이터를 삽입한 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 카탈로그에서 소스 텍스트를 직접 삽입하지 않고 불러온다면, 동기화된 테이블이 동기화 중에 열을 tsvector 생성해 동기화가 완료되는 즉시 바로 인덱싱 lakebase_bm25 할 수 있습니다. Lakebase Search의 사용자 지정 유형 매핑을 참조하세요.

인덱스 정확도 유지

BM25 통계는 인덱스 빌드 시 계산되고 VACUUM. 대부분의 워크로드의 경우 정기적으로 VACUUM 점수를 정확하게 유지합니다. 많은 양의 새 데이터를 대량으로 로드한 후 수동으로 실행 VACUUM 합니다.

VACUUM documents;

세션 수준 GUC

매개 변수 유형 Default Description
lakebase_bm25.default_limit integer 1000 인덱스에서 반환된 최대 결과 수입니다.
lakebase_bm25.prefilter boolean false true는 BM25 점수를 계산하기 전에 조건을 평가 WHERE 합니다. 필터가 많은 행을 제거하고 평가가 저렴할 때 사용합니다.
lakebase_bm25.enable_scan boolean true 인덱스 무시 시 순차적 검사를 강제로 수행하도록 false 설정합니다. 테스트에 유용합니다.
SET lakebase_bm25.default_limit TO 20;
SET lakebase_bm25.prefilter = on;

둘 다 설정되면 GUC가 인덱스 스토리지 매개 변수보다 우선합니다.

인덱스 스토리지 매개 변수

인덱스 생성 시 또는 다음을 사용하여 ALTER INDEX다음 옵션을 설정합니다.

매개 변수 유형 Default 범위 Description
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까지 세션 GUC가 설정되지 않은 경우 대체 제한입니다.
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 Description
<@> tsvector <@> bm25query_tsvector double precision 음수 BM25 점수를 반환합니다. 가장 관련성이 큰 결과를 먼저 얻으려면 오름차순으로 정렬합니다.

Functions

Function Returns Description
to_bm25query(query tsvector, index regclass) bm25query_tsvector 인덱스의 개체 식별자에서 tsvector BM25 쿼리 개체를 생성합니다.

연산자 클래스

클래스 기본값: Description
tsvector_bm25_ops tsvector BM25 점수 매기기를 위해 열을 연산자에 tsvector 매핑 <@> 합니다. 이 클래스는 기본 연산자 클래스 tsvector 입니다 lakebase_bm25. 명시적으로 지정할 필요가 없습니다.

다음 단계