BM25 색인 만들기 및 관리

이 문서에서는 PostgreSQL용 AlloyDB에서 전체 텍스트 검색을 최적화하기 위해 BM25 (Best Matching 25) 색인을 만드는 방법을 보여줍니다. 여기에는 순위 검색, 포화 매개변수 구성, 정규화 가중치 조정을 비롯한 일반적인 사용 사례의 예가 제공됩니다.

BM25는 문서가 특정 쿼리와 얼마나 관련이 있는지 추정하는 데 널리 사용되는 확률적 순위 지정 알고리즘입니다. BM25는 용어 빈도 (TF), 역 문서 빈도 (IDF), 문서 길이 정규화를 평가하여 표준 텍스트 검색보다 더 정확한 검색 순위를 제공합니다.

시작하기 전에

BM25 색인을 사용하려면 pg_textsearch 확장 프로그램을 사용 설정하고 다음 요구사항을 충족해야 합니다.

pg_textsearch 확장 프로그램 사용 설정

각 데이터베이스에 대해 pg_textsearch 확장 프로그램을 사용 설정해야 합니다.

  1. psql 또는 다른 클라이언트를 사용하여 AlloyDB 데이터베이스에 연결합니다. 자세한 내용은 클러스터 인스턴스에 연결을 참조하세요.
  2. 다음 SQL 명령어를 실행하여 확장 프로그램을 만듭니다.

    CREATE EXTENSION IF NOT EXISTS pg_textsearch;
    

BM25 색인 만들기

다음 예에서는 BM25 유사성 쿼리를 위해 텍스트 데이터의 색인을 생성하는 콘텐츠 column이 있는 documents라는 테이블을 만듭니다.

  1. documents라는 테이블을 만듭니다.

    CREATE TABLE documents (
      id SERIAL PRIMARY KEY,
      title TEXT NOT NULL,
      content TEXT NOT NULL
    );
    
  2. 샘플 데이터로 테이블을 채웁니다.

    INSERT INTO documents (title, content) VALUES
      ('Database systems', 'AlloyDB is a fully managed PostgreSQL-compatible database service'),
      ('Google Cloud FTS', 'Full-text search lets you identify natural-language documents'),
      ('Probabilistic Ranking', 'BM25 uses term frequency and document length normalization');
    
  3. content 열에 BM25 색인을 만듭니다.

    CREATE INDEX idx_docs_bm25
    ON documents
    USING bm25 (content)
    WITH (text_config = 'english');
    

색인은 WITH 절에서 세 가지 매개변수를 지원합니다.

  • text_config (필수): 사용할 PostgreSQL 텍스트 검색 구성(예: english).
  • k1 (선택사항): 용어 빈도 포화 매개변수. 기본값은 1.2입니다.
  • b (선택사항): 문서 길이 정규화 매개변수. 기본값은 0.75입니다.

BM25 색인을 사용하여 쿼리

BM25 색인에 대해 관련성 순위를 실행하려면 <@> 연산자를 사용합니다.

<@> 연산자는 음수 BM25 점수를 반환합니다. 이는 PostgreSQL이 연산자에서 오름차순 (ASC) 색인 검색만 지원하기 때문입니다. 점수가 낮을수록 (음수일수록) 관련성이 더 높습니다.

BM25 점수를 기준으로 오름차순으로 정렬된 검색어를 실행합니다.

SELECT title, content, content <@> 'database system' AS score
FROM documents
ORDER BY content <@> 'database system' ASC
LIMIT 5;

출력은 가장 낮은 음수 점수로 관련성이 높은 문서를 상단에 표시합니다.

      title       |                            content                                   |  score
------------------+----------------------------------------------------------------------+----------
 Database systems | AlloyDB is a fully managed PostgreSQL-compatible database service    | -0.9971461892127991
 Google Cloud FTS | Full-text search lets you identify natural-language documents        | 0
 Probabilistic ranking | BM25 uses term frequency and document length normalization      | 0
(3 rows)

BM25 색인 매개변수 조정

매개변수를 조정하여 다양한 유형의 문서 컬렉션의 순위를 최적화할 수 있습니다.

  • k1 증가: 쿼리어가 여러 번 반복되어 문서 점수가 지속적으로 증가하도록 하려는 경우.
  • b 증가: 긴 문서가 기타 용어를 포함하는 경우 더 큰 페널티를 받도록 하려는 경우.

용어 빈도를 우선시하는 짧은 문서에 맞게 맞춤설정된 색인을 만들려면 k11.5로, b0.8로 설정합니다.

CREATE INDEX idx_docs_bm25_tuned
ON documents
USING bm25 (content)
WITH (text_config = 'english', k1 = 1.5, b = 0.8);

다음 단계