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にもサンプル載せました。ほぼ一緒です。
バージョン
- 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にもサンプル載せました。ほぼ一緒です。