PDF
groonga

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

More than 3 years have passed since last update.

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などのキーワード(予約語)を大文字で書ける?


    • 書けない。大文字と小文字を区別しているため。