はじめに
Groongaコミュニティにはgroonga-devというメーリングリストがあり、月に20〜40通程度のペースでやりとりが行われています。
バックナンバーはOSDNのMLアーカイブで見ることができるのですが、残念ながらこのアーカイブでは全文検索する手段が用意されていません。そこで、Groongaを使って全文検索できるようにする方法を考えてみました。 1
全文検索するためには、主に以下の3ステップが必要です。
- 情報を集める(クロール)
- インデックスを作る
- 検索インターフェイスを作る
今回はクロールについて書きます。
クロール先
まず、どこからクロールしてくるか決める必要があります。候補は以下の2つです。
- A. 記事ごとののHTMLからスクレイピング
- B. 月ごとにまとめられたテキストファイルを利用
Aの場合、開発の手間もサーバーの負荷もかかりそうです。できればBにしたいのですが、アーカイブにどのような情報が含まれているのか念のため確認しておく必要があります(極端な例ですが、タイトルだけで本文が含まれていないなどの可能性があるためです)。Bのファイルの中身を見てみると、メール形式になっていて必要な情報は含まれていそうなので、こちら選びます。
月ごとにまとめられたテキストファイルのURLは
"https://ja.osdn.net/projects/groonga/lists/archive/dev/#{年(YYYY)}-#{月(英語)}.txt"
という形式になっています。groonga-devは2009年の2月にsenna-devから移行する形でスタートしたので、ダウンロード対象は2009年の2月から現在までのファイルです。
サンプルスクリプト
月ごとのテキストファイルをクロールするサンプルスクリプト(Ruby)はこちらです。
ポイントは以下の2点です。
- HTTPSでアクセスする
- ファイルのエンコーディングはEUC-JPなので、UTF-8に変換する
クロールするときの注意点として、差分更新のときに前回取得したときの最終月のファイルを取得し直す必要がありますが、上のスクリプトではこの点は考慮していません。
おわりに
groonga-devを全文検索する一環として、MLアーカイブをクロールする方法を簡単にまとめました。
次回はクロールしてきたファイルをパースしてGroongaデータベースを作成する方法について書きたいと思います。
-
groonga-devに限らず、OSDNのメーリングリストであれば汎用的に使える仕組みになる想定です。 ↩