March 13, 2010
100万件以上の規模をデータを扱うWebサービスで、低コストで全文検索エンジンをサイトに組み込みたいと思った時に多く使われているのが、
1.MySQL + Senna
2.Apache Solr
3.Hyper Estraier
他にもあるかもしれませんが、この辺の選択肢なのかと思います。
どれも様々なところでの採用実績があるかと思いますが、今回は、日本でも大規模なデータ量を活用する情報サイトでも活用されている(ことを僕が知っている)、Apache Solrの本をいただいたので紹介してみたいと思います。
Apache SolorはオープンソースでPureJavaで作られている全文検索エンジンです。
サーブレットコンテナ上で動作し、Webサーバなどのクライアントからは、HTTPでリクエスト、レスポンスを処理します。
上記3種類の検索エンジンの違いとしては、Hyper Estraierは使ったことないので書けないのですが(TokyoTyrant/tokyo Cabinetにはお世話になっております)いわゆる基本的な全文検索のありようについては、そんなに変わるものではないのかなと思っています。
MySQL + Sennaは、何より、お手軽なのが最大の魅力で、既にレプリケーションされているMySQL 5.0x環境があれば、バイナリパッケージで提供されているTritonnを使うことで、さくっと高度な全文検索を追加できます。
モバツイでも昔からログ周りでは利用させていただいておりましたが、今は、フレンド検索で利用しています。主に日本人で構成された140万人のツイッターユーザーをプロフィールや名前、locationで検索するのに利用しています。(今、Sennaな人達は、groongaという全く新しい検索エンジンに取り組んでいて、こちらも注目です)
Apaceh Solrに関しては、もうちょっとリッチな検索機能として、ハイライトと呼ばれる検索に該当したキーワードを自動強調表示をする、とか、結果をランダムソートするなどの機能がありますが、一番、お金につながりそうなのが、ファセット機能だと思っていてます。
これは、検索結果が所属するカテゴリ毎のヒット数を自動的に抽出できる機能です。
よくECサイトで、「カテゴリ毎の商品数」というのが表示されていますが、あれを検索キーワードに対して動的に抽出することができます。
↑こういうのです。
その結果、ドリルダウンと呼ばれるUIで、カテゴリをどんどん深堀していっても、下位カテゴリで絞り込まれた検索ヒット数を再帰的に表示することができる、というわけです。
これは高いユーザーエクスペリエンスの実現に、重要な機能と言えます。
何もシステム的なサポートがないのにやろうとすると、カテゴリの数だけ違ったクエリの全文検索ループを回す必要が出てきて、非現実的です。
決まったカテゴリであれば、定期的にバッチで更新すれば良いのですが、動的な検索キーワードには対応できません
本書を見ていると、Solrのファセット機能もやってる処理は、そんなに違いないようですが、Solr内部で処理してくれることで、余計な処理を繰り返すことなく、最適化された状態で、実用的に利用できる、と考えるのが良いでしょう。
本書はSolrのインストールの仕方から、各種言語からの呼び出し方法(て言ってもhttp通信でXMLやらjsonが返ってくる、twitter apiみたいな仕組みなんですけどね)という基礎から、技術的な仕組みの説明は欠かさず、さらに、分散検索やレプリケーション、その他、仕組み上起こりうる問題点等、先々まで使えるノウハウが惜しみなく記述されている一冊だと思います。
(地味にありがたかったのが、TomcatじゃなくてJettyでも実運用できますよーという一文だったり)
初心者過ぎずマニア過ぎず、丁寧に書かれており、エンジニアなら読みやすい文章です。
Solrは、ツイッタークライアント界隈でも、「twitter検索」で使われていたりしますが、モバツイでも、今後の機能追加に利用させていただこうと思っています。
で、これはTipsなのですが、Apache Solrの情報は当然、ネットを検索すると出てくるのですが、問題点が一個あって、Apache Solrのバージョン1.2とバージョン1.3以降で、何やら仕組みが変ったようで、昔の情報と1.3以降の情報を混乱するとワケワカになるという事態が起きます。
今はblogベースの記事が多いので、日付では切り分けがつくのですが、いかんせんバージョン番号まで書いてくれてる人は多くありません。書いたタイミングでは最新なので、後から見ると、わからなくなってるケースが多いです。
というあたりが、Apache Solrを使う場合には、切実に本書をお勧めしたい理由です。
そういう情報の蓄積を、本書にまとめていただいたという側面だけでも、十分、お金を払う価値があると思います。
以下、2008年の記事ですが、こちらもどうぞ。
Apache Solrを使ってみた。