PostgresでPDFの全文検索を行う
(tselai.com)- 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');
- FTSでは一般的に
tsvectorカラムにGINインデックスを作成して性能を改善できる
1件のコメント
おお.....