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)が日本語ではうまく動かなかったです。日本語ベースでのインデックス構築等は、こちらのサイトが大変参考になりました。
FlexでE4Xを使うといい感じ
今回、Solrに対してリクエストを送信するクライアントにはFlexページを使用しました。つまり、サーバーサイドのコーディングは(いまのところ)一切行っていません。FlexからSolrのREST APIに基づいてHTTPリクエストを送ると、検索結果がXMLで返ってきます。このXMLをActionScript3のE4Xで処理します。E4Xを使うとXMLの取り扱いが大変ラクで、JavaでXPath使うよりお手軽に望みの値を取り出せます。E4Xで抽出したファセットデータ等をFlexで作ったファセット表示コンポーネントやパンくずコンポーネントにセットすれば、簡単にファセット検索のUIが実装できるという仕組みです。
インポートツールはAIRで作った
それと、Solrのもうひとつの難関は、既存データのインポートです。SolrにはRDBやCSVからSolrのインデックスを構築するためのツールDataImportHandlerが付属しています。が、やはり実際には要件にあわせて既存データを加工するなどのニーズがあり、既存データを読み込んで加工・修正し、XML形式でSolrに逐一POSTするツールがほしくなります。
そこで今回は、AIRでインポートツールを作りました。最近はこのようにちょっとしたスクリプト的用途にAIRを使うことが多いです。AIRならば、
ってメリットがあり、意外に小回りがきくのです。「AIRでスクリプティング」はお勧めです!
ということで、Solr+Flexはなかなかいい感じでした。