GrailsからSolrを呼び出すサンプル

| コメントをどうぞ

今年も残すところあと6時間ほどになりました。
今年一年を振り返ると、苦しいこと、辛いこと、、、あれ、目から熱い水がこぼれてくるぞ。
どうもこんにちわ、DiceK Mikamiです。

さて、今年最後のテーマは“Grailsを使って、Apache Solrで検索したデータを取得する”です。
 
 

Apache Solrとは

Apache Solrは、Apache Luceneをコアに持つJavaで書かれたオープンソースの検索エンジンです。国内外の大規模検索サービスで利用実績を持ちます。
国内で言えばAmebaや価格.comなどで使われているそうです。
Solrの特徴として、ファセット検索が挙げられます。
ファセット検索(ファセットナビゲーション、ファセット分析とも)とは、様々なカテゴリー(例えば、分類や期間)を前もって用意しておき、それをユーザーが選択することで検索を行うと言うものです。
また、その検索条件もヒット数などに基づいて提供されるので、“ハズレ”がありません。
「検索したはいいけど1件もヒットしなかった」などということは、このファセット検索においてはありえないのです。
Solrはこのファセット検索のインターフェースを持っています。
 

環境

  • Grails: 2.2.0-RC1
  • Java: 1.7.0_10-ea
  • Apache Solr: 4.0.0
  • solr-solrj: 4.0.0-BETA

 

サンプル

さて、RESTインターフェースを持っているのであれば、AjaxリクエストなりHTTP Clientなりで接続すれば良い訳ですが、それではあまりにも面白くない。
ということで、今回はSolrが持っているJavaクライアントsolrjを利用してみようと思います。
イメージは下図のような感じです。


 

Mavenリポジトリから取得する設定

Grailsには膨大な数のプラグインが存在します。
もちろんその中にもsolrjはあるのですが、なんとも残念なことに古いものしかありません。
ですので、BuildConfig.groovyに少し細工をしましょう。

/grails-app/conf/BuildConfig.groovy

dependencies {
    compile 'org.apache.solr:solr-solrj:4.0.0-BETA'
}

これで起動時にsolrjをMavenリポジトリからダウンロードしてくれます。
(サンプルでは4.0.0-BETAとなっていますが、適宜gradleの記法にあわせて書き換えて下さい)
 

実際に利用する

今回はコントローラーに実際のコードを入れてみます。

class SolrController {
    def index() {
        def url = 'http://localhost:8389/solr/collection1'
            
        // サーバーを作成
        SolrServer server = new HttpSolrServer(url)

        // パラメータを設定
        SolrQuery query = new SolrQuery()
        query.setParam('q','*:*')
        query.setParam('facet','true')
        query.setParam('facet.field','compName_s')
        
        //リクエスト
        QueryResponse resp = server.query(query)

        //レスポンスの処理
        ['queryResults': resp.getResults(), 'facetField': resp.getFacetFields()]
    }
}

たったこれだけでSolrから検索結果を取得できます。
また、このサンプルではHttpリクエストを利用していますが、EmbeddedSolrServerクラス(ローカルにSolrがある場合に高速にアクセスする)やLBHttpSolrServerクラス(ロードバランスを考慮して、呼び出しSolrを選択する)といった複数の呼び出し形態がありますので、Solrがどのような構成で存在するかによって適切なクラスを利用できると言うのも魅力的です。
今回はGrailsでの利用方法をサンプルとして紹介しましたが、ライブラリ自体はJavaですので、Javaアプリケーションにもすぐに取り込めるかと思います。
参考までにGitHubにサンプルコードを公開いたします。
 
 
最後になりましたが、今年一年、私の駄文にお付き合いいただきありがとうございました。
懲りずに来年も書ければいいなぁなどと寒空を眺めております。
ともあれ、皆様よいお年をお迎え下さい!!
 

参考URL

Apache Solr
Maven Repository – solrj
Solrjサンプルコード集
サンプルコード(GitHub)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>