Important
이 기능은 베타 버전으로 제공됩니다. 작업 영역 관리자는 미리 보기 페이지에서 이 기능에 대한 액세스를 제어할 수 있습니다. Azure Databricks 미리 보기 관리를 참조하세요.
확장은 lakebase_text 인덱스 형식을 통해 BM25 전체 텍스트 검색을 Lakebase에 lakebase_bm25 추가합니다. PostgreSQL의 표준 tsvector 형식 및 쿼리 연산자와 호환됩니다.
Install
먼저 프로젝트 설정에서 Lakebase 검색을 사용하도록 설정합니다 . 그런 다음, 확장을 설치합니다.
CREATE EXTENSION IF NOT EXISTS lakebase_text;
표준 GIN 전체 텍스트 검색 대신 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. 명시적으로 지정할 필요가 없습니다. |