Groongaで学ぶ全文検索 2016-03-25 - Groonga | Doorkeeperのメモ。
目的
- PDFのテキストを検索したい
 - Groongaは手段
 
おおまかな流れ
- 
- インデックスを作る
 
- 毎回grep(シーケンシャル検索)するのは遅い
 
 - 
- 検索する
 
 
こまかい流れ
1. インデックスを作る
- 1-1. 生データ用のテーブルを作る
 - 1-2. PDFからテキスト(生データ)を抽出する
 - 1-3. 生データをテーブルに入れる
 - 1-4. インデックス用のテーブルを作る
- すでにデータが入っているので、テーブルを作成したタイミングでインデックスが作成される(静的インデックス構築)。
 - 先にインデックス用のテーブルを作成した場合、データを入れたタイミングで都度インデックスが作成される(動的インデックス構築)。
 
 
1-1. 生データ用のテーブルを作る
- テーブル
- 
TABLE_HASH_KEYが無難 - キーにはPDFファイルのフルパスを入れる
 - 重複しないならファイル名だけでも可
 
 - 
 - カラム
- bodyカラム
 - PDFから抽出したテキストを入れる
 - 型に注意
 
 
1-2. PDFからテキスト(生データ)を抽出する
- 
Popplerなどを使う
- Popplerに付属している
pdftotextコマンドでPDFからテキストを取り出せる - Ruby/Popplerを使えばRubyらしい書き方でPopplerを使える
 - 参考: Ruby で PDF と戯れるの巻 - Qiita
 
 - Popplerに付属している
 - Origamiというgemもある
 
1-3. 生データをテーブルに入れる
- Groongaにデータを入れるloadコマンドはJSON形式
 - エスケープが必要
 - 抽出してエスケープしてGroongaのコマンドを出力するスクリプトを書けばコピペしなくて済む
 
1-4. インデックス用のテーブルを作る
- はじめのうちはおすすめ設定のテンプレを使おう
 - テーブル
- 
TABLE_PAT_KEY- パトリシアトライ
 
 - 
TokenBigram- N-gramの一種
 
 - 
NormalizerAuto- 全角半角や大文字小文字を正規化
 
 
 - 
 - カラム
- 
COLUMN_INDEX- インデックスカラム
 
 - 
WITH_POSITOIN- 位置情報(文書内のどこに出現したか)をインデックスに含めるかどうか
 
 
 - 
 
2. 検索する
- 
selectコマンド - 
--queryオプションでキーワードを指定 - 
--output_collumnオプションでほしいカラムを指定 
まとめ
- GroongaでPDF検索を実現できる
 - 
HonyomiというGroongaを使ったPDFの全文検索エンジンがあるので、一から作らなくてもHonyomiを使えばいいかも
- GitHubにソースコードが公開されているのでカスタマイズも可