スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

Solr+Flexはいい感じ

ここ2週間くらいはお仕事で全文検索サーバーApache Solrを使ってました。Solrは要するに「全文検索エンジンLuceneの機能をRESTで呼び出せるサーバー(Jettyベース)」です。今回、要件としてファセット検索をさくさく使いたいというニーズがあったので、RDBではなくSolrでいこうということになりました。

Solrを使うにあたって参考になった書籍とサイト

今回は最新バージョンのSolr 1.4を使用したのですが、タイミングよくSolr 1.4をみっちり解説した書籍が出てて大変参考になりました。バイブル認定です!


あとはもちろん、関口さんのLucene本ですね(ちょっと発売から日が経ってしまいましたが)。

それに、以下の各ページが参考になりました。

日本語大丈夫?

まず気がかりだったのが、Solr 1.4で日本語問題なく扱える?って疑問でした。やっぱりSenとか形態素解析ツールを自分で組み込む必要があるのかなぁ〜と思ってましたが、結果的には、今回のプロトタイピングの要件的にはSolr 1.4標準のbi-gramインデックスで問題なく日本語検索できました。唯一、同義語辞書(synonyms.txt)が日本語ではうまく動かなかったです。日本語ベースでのインデックス構築等は、こちらのサイトが大変参考になりました。

FlexE4Xを使うといい感じ

今回、Solrに対してリクエストを送信するクライアントにはFlexページを使用しました。つまり、サーバーサイドのコーディングは(いまのところ)一切行っていません。FlexからSolrのREST APIに基づいてHTTPリクエストを送ると、検索結果がXMLで返ってきます。このXMLActionScript3のE4Xで処理します。E4Xを使うとXMLの取り扱いが大変ラクで、JavaXPath使うよりお手軽に望みの値を取り出せます。E4Xで抽出したファセットデータ等をFlexで作ったファセット表示コンポーネントやパンくずコンポーネントにセットすれば、簡単にファセット検索のUIが実装できるという仕組みです。

インポートツールはAIRで作った

それと、Solrのもうひとつの難関は、既存データのインポートです。SolrにはRDBCSVからSolrのインデックスを構築するためのツールDataImportHandlerが付属しています。が、やはり実際には要件にあわせて既存データを加工するなどのニーズがあり、既存データを読み込んで加工・修正し、XML形式でSolrに逐一POSTするツールがほしくなります。

そこで今回は、AIRでインポートツールを作りました。最近はこのようにちょっとしたスクリプト的用途にAIRを使うことが多いです。AIRならば、

  • ローカルファイルを自由に触れる
  • HTTPリクエスト発行も簡単
  • E4XXMLも取り扱い容易
  • もれなくUIが付いてくる
  • Win、MacLinuxでそのまま動く

ってメリットがあり、意外に小回りがきくのです。「AIRスクリプティング」はお勧めです!

ということで、Solr+Flexはなかなかいい感じでした。