- pgPDF는 PDF 파일을 SQL로 읽을 수 있는 Postgres 확장임(poppler의 래퍼)
SELECT pdf_read_file('/path/file.pdf') → text
- 데이터 저장 방식
- PDF 파일 내용은 텍스트(txt)와 바이너리(bytes) 형태로 테이블에 저장함
- 각 PDF의 tsvector도 저장함. tsvector는 문서를 텍스트 검색에 최적화된 형태로 나타냄
- tsvector 생성은 비용이 크지만 1회만 수행하면 되므로 생성(generated) 컬럼에 저장하는 것이 좋음
- FTS 쿼리는 txt 컬럼이 아닌 tsvector에 대해 수행됨
- FTS 쿼리 실행하기
- FTS는 일반적으로
tsvector @@ tsquery
연산자를 사용함
- tsquery는 tsvector에 대한 매칭 필터를 정의함
- 이 외에도 다양한 종류의 tsquery가 있음:
plainto_tsquery
, phraseto_tsquery
, websearch_to_tsquery
-
SELECT name FROM pdfs WHERE tsvec_en @@ to_tsquery('english', 'Postgres & Sharding');
- tsvector 컬럼에 GIN 인덱스를 생성하여 성능을 개선할 수 있음