tsvector는 PostgreSQL에서 제공하는 전문 검색(Full-Text Search)에 최적화된 데이터 타입이다.
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에 아래 두 가지 인자를 전달한다.
english를 사용이를 통해 PostgreSQL은 입력된 문자열을 어휘소(lexeme) 단위로 분해하고, 각 어휘소의 문서 내 출현 위치 정보와 함께 tsvector 형태로 저장한다.
검색 시에는 내장 함수 to_tsquery를 활용하며, 동일하게 아래 두 가지 인자를 전달한다.
해당 함수는 입력 문자열을 어휘소로 변환하며, 이를 기존 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)