ページ

2012年5月2日

solr-rubyを用いてRailsアプリケーションからSolrでの検索を実行する方法

RailsアプリケーションからSolrの検索ができるようになったので、まとめておく。
Apache Solr

バージョン

  • Apache Solr 3.5.0
  • solr-ruby 0.0.8
  • ruby 1.9.3
  • rails 3.2.2

コード

今回はいきなりコードを載せてみる。solr-rubyはGemfilesで読み込むようにしている。
# coding: utf-8

require 'solr'

class SearchController < ApplicationController
  def initialize
    @solr = Solr::Connection.new( 'http://localhost:8983/solr', :autocommit => :on )
  end

  def index
    data = submit(params)
    numFound = data['response']['numFound']
    docs = data['response']['docs']
    
    # テンプレートにレンダリングするなり適当に処理する
  end
  
  private

  def submit( p = {} )
    query = p[:q]
    filter = p[:fl]
    start = p[:start]
    rows = p[:rows]
    query = '*:*' unless query
    filter = 'id,score' unless filter
    start = '0' unless start
    rows = '10' unless rows
    
    select = Solr::Request::Select.new(nil, { 'q' => query, 'fl' => filter, 'start' => start, 'rows' => rows } )
    @solr.send(select).data
  end
end

コードの解説

今回はRailsの解説ではないので、Solrとのやりとりの部分を解説する。

まず3行目。ここでSolrモジュールを読み込む。このgemのソースは簡潔に書かれているので、何かあればソースを読むといい。というか、solr-rubyに関する情報がほとんどないので、ソースを解読するしかない。7行目でSolrとの接続をする。localhostとポート番号は適宜変更する。

続いて30-31行目。Solrとの接続が確立されたら、Selectクラスをnewし、Solrにqueryを発行する。newするときの引数でハッシュを渡しているが、ここでSolr検索時のパラメータを指定する。どんなパラメータがあるかはSolrのチュートリアルなどを参照するとよく分かる。

11行目で返ってきた検索結果を保持する。solr-rubyではXMLをハッシュにして返してくれて、自分でパースしなくて済むのが助かる。ハッシュなので、12-13行目のようにすれば結果を取り出せる。あとは好きなように処理すればよい。


2012年8月24日追記
Gistにもサンプル載せました。ほぼ一緒です。


参考

Related Posts Plugin for WordPress, Blogger...