LoginSignup
8
9

More than 5 years have passed since last update.

GroongaでPDFを全文検索する(概要編)

Last updated at Posted at 2016-03-25

Groongaで学ぶ全文検索 2016-03-25 - Groonga | Doorkeeperのメモ。

目的

  • PDFのテキストを検索したい
  • Groongaは手段

おおまかな流れ

  • 1. インデックスを作る
    • 毎回grep(シーケンシャル検索)するのは遅い
  • 2. 検索する

こまかい流れ

1. インデックスを作る

  • 1-1. 生データ用のテーブルを作る
  • 1-2. PDFからテキスト(生データ)を抽出する
  • 1-3. 生データをテーブルに入れる
  • 1-4. インデックス用のテーブルを作る
    • すでにデータが入っているので、テーブルを作成したタイミングでインデックスが作成される(静的インデックス構築)。
    • 先にインデックス用のテーブルを作成した場合、データを入れたタイミングで都度インデックスが作成される(動的インデックス構築)。

1-1. 生データ用のテーブルを作る

  • テーブル
    • TABLE_HASH_KEYが無難
    • キーにはPDFファイルのフルパスを入れる
    • 重複しないならファイル名だけでも可
  • カラム
    • bodyカラム
    • PDFから抽出したテキストを入れる
    • 型に注意

1-2. PDFからテキスト(生データ)を抽出する

1-3. 生データをテーブルに入れる

  • Groongaにデータを入れるloadコマンドはJSON形式
  • エスケープが必要
  • 抽出してエスケープしてGroongaのコマンドを出力するスクリプトを書けばコピペしなくて済む

1-4. インデックス用のテーブルを作る

  • はじめのうちはおすすめ設定のテンプレを使おう
  • テーブル
  • カラム
    • COLUMN_INDEX
      • インデックスカラム
    • WITH_POSITOIN
      • 位置情報(文書内のどこに出現したか)をインデックスに含めるかどうか

2. 検索する

  • selectコマンド
  • --queryオプションでキーワードを指定
  • --output_collumnオプションでほしいカラムを指定

まとめ

  • GroongaでPDF検索を実現できる
  • HonyomiというGroongaを使ったPDFの全文検索エンジンがあるので、一から作らなくてもHonyomiを使えばいいかも
    • GitHubにソースコードが公開されているのでカスタマイズも可

雑談したこと

  • GroongaのGは大文字
    • コマンド名を指す場合は小文字
  • テーブル名の先頭は大文字にしたほうがよい?
    • 統一されていればどちらでもよいのでは
    • チュートリアルでは先頭大文字になっている
    • 最近は先頭小文字が流行り?(Rails界隈など)
  • SQLのようにselectなどのキーワード(予約語)を大文字で書ける?
    • 書けない。大文字と小文字を区別しているため。
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9