18P by xguru 30일전 | favorite | 댓글 1개
  • 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 인덱스를 생성하여 성능을 개선할 수 있음