tsvector 개요

tsvector는 PostgreSQL에서 제공하는 전문 검색(Full-Text Search)에 최적화된 데이터 타입이다.

tsvector의 사용 방법

tsvector의 기본적인 활용 절차는 다음과 같다.

select to_tsvector('english', $$I went to pizza store to eat pizza$$);
              to_tsvector
----------------------------------------
 'eat':7 'pizza':4,8 'store':5 'went':2
(1 row)

상기 예시에서 확인할 수 있듯이, PostgreSQL 내장 함수인 to_tsvector에 아래 두 가지 인자를 전달한다.

  1. 텍스트 분석 구성(Text Search Configuration) — 상기 예시에서는 english를 사용
  2. 대상 문자열

이를 통해 PostgreSQL은 입력된 문자열을 어휘소(lexeme) 단위로 분해하고, 각 어휘소의 문서 내 출현 위치 정보와 함께 tsvector 형태로 저장한다.

tsquery를 활용한 검색 수행

검색 시에는 내장 함수 to_tsquery를 활용하며, 동일하게 아래 두 가지 인자를 전달한다.

  1. 텍스트 분석 구성
  2. 검색 대상 문자열

해당 함수는 입력 문자열을 어휘소로 변환하며, 이를 기존 tsvector와 매칭 연산자(@@)를 통해 비교함으로써 검색 일치 여부를 판별할 수 있다.

select to_tsquery('english', 'hamburger');
 to_tsquery
------------
 'hamburg'
(1 row)

select to_tsvector('english', $$I went to pizza store to eat pizza$$) @@ to_tsquery('english', 'pizza');
 ?column?
----------
 t
(1 row)

select to_tsvector('english', $$I went to pizza store to eat pizza$$) @@ to_tsquery('english', 'hamburger');
 ?column?
----------
 f
(1 row)

한국어 어휘소 분석 문제 및 해결 방안