전체 용어 목록

전문 검색

PostgreSQL의 전문 검색은 어떻게 동작하나요?

전문 검색은 정확한 부분 문자열이 아니라 단어를 기준으로 문서를 매칭하며, tsvector, tsquery, @@ 연산자를 사용합니다. GIN 인덱스를 사용하면 빨라집니다.

PostgreSQL의 내장 전문 검색은 문서를 토큰으로 파싱하고, 이를 어휘소(lexeme)로 정규화한 뒤(예: 단어를 어간으로 줄임) 결과를 tsvector로 저장합니다. 검색 쿼리는 tsquery이며, @@ 연산자는 문서가 쿼리와 일치하는지 검사합니다.

english 같은 텍스트 검색 구성은 텍스트를 단어로 나누는 방법, 무시할 흔한 단어, 어간 추출 방식을 결정합니다. ts_rank 같은 순위 함수는 관련성에 따라 결과를 정렬합니다. 검색을 빠르게 하려면 tsvector 식에 GIN 인덱스를 만들고, 쿼리에서도 인덱스와 같은 구성을 사용하세요.

예제

이 예제는 기사 본문을 tsvector로 인덱싱하고 search와 postgres를 모두 포함하는 행을 찾습니다. 기사 1만 일치합니다.

CREATE TABLE articles (id int PRIMARY KEY, body text NOT NULL);
INSERT INTO articles VALUES
  (1, 'Postgres supports full text search with tsvector and tsquery'),
  (2, 'Indexes make lookups fast');

CREATE INDEX articles_fts ON articles USING gin (to_tsvector('english', body));

SELECT id
FROM articles
WHERE to_tsvector('english', body) @@ to_tsquery('english', 'search & postgres');

확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.

출처

PostgreSQL 공식 문서(영문)입니다.

관련 용어