Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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などのキーワード(予約語)を大文字で書ける?
    • 書けない。大文字と小文字を区別しているため。
myokoym
small application creator
https://myokoym.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away