AI 요약
Timescale에서 개발한 'pg_textsearch'는 PostgreSQL 17 및 18 버전을 위해 설계된 현대적인 관련도 기반 전문 검색 확장 기능입니다. 이 프로젝트는 과거 'Tapir'라는 이름으로 시작되었으며, 현재 v1.0.0 버전으로 정식 출시되어 프로덕션 환경에서 즉시 사용 가능한 안정성을 확보했습니다. 검색 랭킹의 표준 알고리즘인 BM25를 구현하였으며, 사용자는 k1 및 b와 같은 파라미터를 직접 설정하여 검색 결과의 정확도를 조정할 수 있습니다. 특히 대규모 데이터 처리를 위해 Block-Max WAND 최적화 기술과 병렬 인덱스 구축 기능을 도입하여 상위 K개 결과(top-k queries)를 도출하는 속도를 혁신적으로 높였습니다. SQL 내에서 단순한 <@> 연산자를 통해 검색어와의 관련도 점수를 계산하고 정렬할 수 있어 기존 Postgres 사용자들에게 익숙한 개발 경험을 제공합니다.
핵심 인사이트
- 공식 출시 및 호환성: PostgreSQL 17 및 18 버전을 지원하는
pg_textsearchv1.0.0이 정식 릴리스되었습니다. - BM25 알고리즘 도입: 단순 텍스트 매칭을 넘어 $k_1$ 및 $b$ 파라미터 설정이 가능한 현대적인 BM25 랭킹 시스템을 제공합니다.
- 고성능 최적화: Block-Max WAND 최적화 기법을 적용하여 대량의 데이터 중 최적의 검색 결과(top-k)를 빠르게 추출합니다.
- 확장성 기능: 대규모 테이블을 위한 병렬 인덱스 구축(Parallel index builds)과 파티셔닝된 테이블 지원을 포함합니다.
주요 디테일
- 과거 이력: 프로젝트의 원래 이름은 'Tapir(Textual Analysis for Postgres Information Retrieval)'였으며, 현재도 소스 코드와 마스코트에서 그 흔적을 확인할 수 있습니다.
- 사용자 정의 설정: Postgres의 기본 텍스트 설정(English, French, German 등)과 완벽하게 호환되며,
bm25(content) WITH (text_config='english')와 같은 문법으로 인덱스를 생성합니다. - 쿼리 연산자:
<@>연산자를 사용해 점수를 산출하며, Postgres가 오름차순(ASC) 인덱스 스캔만 지원하는 한계를 극복하기 위해 점수를 음수로 반환하여 정렬 효율성을 높였습니다. - 설치 및 구동:
shared_preload_libraries설정을 통해 로드되며, 사전 빌드된 바이너리는 Linux 및 macOS(amd64/arm64) 환경을 지원합니다. - 실행 계획 최적화: 소규모 데이터셋에서는 순차 스캔을 선호할 수 있으나, BM25 계산에 필요한 문서 통계(평균 길이 등) 산출 시에는 항상 인덱스를 활용하도록 설계되었습니다.
향후 전망
- 별도 검색 엔진 대체: Elasticsearch와 같은 외부 검색 엔진 없이도 Postgres 내에서 고성능 관련도 검색이 가능해짐에 따라 시스템 아키텍처 단순화에 기여할 것으로 보입니다.
- 지속적 기능 확장: 현재 ROADMAP.md를 통해 추가 기능 업데이트를 예고하고 있어, 텍스트 분석 및 검색 관련 기능이 더욱 강화될 것으로 예상됩니다.
출처:hackernews
