Hyperestraierでsearch_doを使おうかと思ったらrails3系に対応していなそうだったので,sunspotを使ってみた
sunspotは

SunspotはRubyアプリケーションに全文検索機能を追加するためのソリューションです。バックグラウンドでSolrを利用し、多くの優れた機能を提供します。今回のエピソードでは、過去のエピソードで使用したブログアプリケーションを例にして、Sunspotを使ってRailsアプリケーションに全文検索機能を追加します。
ASCIIcasts - “Episode 278 - Sunspotで全文検索”

とのことです。
上記サイト参考にインストール手順をメモ。

インストール手順をメモ。

Railsのスケルトン作成して適当に動作するところまで作成。スケルトンの手順は割愛

rails new App
rails g scaffold product name:string description:text  #商品モデル, 名前(string)、説明文(text)
DBのmigrateしたり....あれこれやる

gemでライブラリをインストール
Gemfileに追加

# App/Gemfile
gem 'sunspot_rails'
bundle update

設定ファイルを生成

rails g sunspot_rails:install 

モデルに全文検索のカラム指定。他のtext以外のカラム指定はintegerとか指定する。リファレンス(
File: README

— Documentation by YARD 0.7.3

)参照

# App/app/models/product.rb
class Product < ActiveRecord::Base
searchable do
# 検索対象のカラムを指定
text :name, :decription
end
end

solrを起動する

rake sunspot:solr:start # RAILS_ENV=productin で環境をproductionに変更

インデックスを作成する

rake sunspot:reindex # RAILS_ENV=productin で環境をproductionに変更
コントローラから呼び出してみる

Product.searchメソッドを呼ぶ。ブロック内には検索条件を色々かける様子。

# App/app/controllers/products_controller.rb
class ProductsController < ApplicationController
def search
# searchメソッドで検索する ブロック内には色々条件を追加できるみたい。
@search = Product.seach do
keywords params[:keyword]
end
@products = @search.results
end
end

感じで簡単だった。個人的にはお気に入りになった。sunspotの組み込みsolrは詳細なチューニングできないっぽいんで、大規模アプリのproduction環境では別途solrをインストールしてチューニングした方がいいらしい。

sunspot:solr:startの起動エラーは表示されない

solrを起動してるはずなのにインデックスするときに接続できない現象があって

# rake sunspot:solr:start
# rake sunspot:reindex
rake aborted!
Connection refused - connect(2)
/usr/lib/ruby/1.9.1/net/http.rb:644:in `initialize'
/usr/lib/ruby/1.9.1/net/http.rb:644:in `open'
/usr/lib/ruby/1.9.1/net/http.rb:644:in `block in connect'
/usr/lib/ruby/1.9.1/timeout.rb:44:in `timeout'
/usr/lib/ruby/1.9.1/timeout.rb:87:in `timeout'
/usr/lib/ruby/1.9.1/net/http.rb:644:in `connect'
/usr/lib/ruby/1.9.1/net/http.rb:637:in `do_start'
/usr/lib/ruby/1.9.1/net/http.rb:626:in `start'
/usr/lib/ruby/1.9.1/net/http.rb:1160:in `request'
/usr/lib/ruby/1.9.1/net/http.rb:970:in `post'
/usr/lib/ruby/gems/1.9.1/gems/rsolr-0.12.1/lib/rsolr/connection/net_http.rb:22:in `post'
/usr/lib/ruby/gems/1.9.1/gems/rsolr-0.12.1/lib/rsolr/connection/requestable.rb:33:in `request'
/usr/lib/ruby/gems/1.9.1/gems/rsolr-0.12.1/lib/rsolr/client.rb:34:in `request'
/usr/lib/ruby/gems/1.9.1/gems/rsolr-0.12.1/lib/rsolr/client.rb:22:in `update'
/usr/lib/ruby/gems/1.9.1/gems/rsolr-0.12.1/lib/rsolr/client.rb:76:in `delete_by_query'
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot/indexer.rb:55:in `remove_all'
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot/session.rb:181:in `block in remove_all'
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot/session.rb:181:in `each'
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot/session.rb:181:in `remove_all'
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot/session_proxy/abstract_session_proxy.rb:11:in `remove_all'
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot.rb:454:in `remove_all'
/usr/lib/ruby/gems/1.9.1/gems/sunspot_rails-1.2.1/lib/sunspot/rails/searchable.rb:164:in `solr_remove_all_from_index'
/usr/lib/ruby/gems/1.9.1/gems/sunspot_rails-1.2.1/lib/sunspot/rails/searchable.rb:183:in `solr_reindex'
/usr/lib/ruby/gems/1.9.1/gems/sunspot_rails-1.2.1/lib/sunspot/rails/tasks.rb:57:in `block (3 levels) in <top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/sunspot_rails-1.2.1/lib/sunspot/rails/tasks.rb:56:in `each'
/usr/lib/ruby/gems/1.9.1/gems/sunspot_rails-1.2.1/lib/sunspot/rails/tasks.rb:56:in `block (2 levels) in <top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:634:in `call'
/usr/lib/ruby/1.9.1/rake.rb:634:in `block in execute'
/usr/lib/ruby/1.9.1/rake.rb:629:in `each'
/usr/lib/ruby/1.9.1/rake.rb:629:in `execute'
/usr/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain'
/usr/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/usr/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain'
/usr/lib/ruby/1.9.1/rake.rb:581:in `invoke'
/usr/lib/ruby/1.9.1/rake.rb:2041:in `invoke_task'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `each'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
/usr/lib/ruby/1.9.1/rake.rb:1992:in `run'
/usr/bin/rake:31:in `<main>'

で色々調べたらAPI Only - Stack Exchangeにヒントがあってrake sunspot:solr:runで対話しきに起動できる

#rake sunspot:solr:run
rake aborted!
No such file or directory - java -Djetty.port=8982 -Dsolr.data.dir=/var/rails/App/solr/data/development -Dsolr.solr.home=/var/rails/App/solr -Djava.util.logging.config.file=/tmp/logging.properties20111028-44946-fm458o -jar start.jar
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot/server.rb:74:in `exec'
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot/server.rb:74:in `block in run'
/usr/lib/ruby/1.9.1/fileutils.rb:121:in `chdir'
/usr/lib/ruby/1.9.1/fileutils.rb:121:in `cd'
/usr/lib/ruby/gems/1.9.1/gems/sunspot-1.2.1/lib/sunspot/server.rb:73:in `run'
/usr/lib/ruby/gems/1.9.1/gems/sunspot_rails-1.2.1/lib/sunspot/rails/server.rb:15:in `run'
/usr/lib/ruby/gems/1.9.1/gems/sunspot_rails-1.2.1/lib/sunspot/rails/tasks.rb:13:in `block (3 levels) in <top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:634:in `call'
/usr/lib/ruby/1.9.1/rake.rb:634:in `block in execute'
/usr/lib/ruby/1.9.1/rake.rb:629:in `each'
/usr/lib/ruby/1.9.1/rake.rb:629:in `execute'
/usr/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain'
/usr/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/usr/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain'
/usr/lib/ruby/1.9.1/rake.rb:581:in `invoke'
/usr/lib/ruby/1.9.1/rake.rb:2041:in `invoke_task'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `each'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
/usr/lib/ruby/1.9.1/rake.rb:1992:in `run'
/usr/bin/rake:31:in `<main>'

javaのランタイムがなかったのでaptでjreをインストールしておkだった

Udemy 独学でのアプリ開発に限界を感じたら

プログラミング初学者の皆さんに、 Udemy を強くお勧めしたいと思います。 Udemy は世界中のトップレベルのプログラミング講師が提供するオンライン講座を取り揃えています。以下は、 Udemy で学ぶことのメリットについての詳細です。

1. Udemy の豊富なコースの選択肢

Udemyには、数千ものコースがあります。初心者から上級者まで、プログラミングのあらゆるレベルを網羅しています。また、様々なプログラミング言語やツールに関するコースも多数あり、希望に合わせたコースを選ぶことができます。

2. 実践的な学習方法

Udemyのコースは、理論だけでなく実践的な学習も行えます。多くのコースには、プログラムの作成や実際のプロジェクトに取り組む演習が含まれています。これにより、理論だけでなく実践的なスキルも身につけることができます。

3. Udemy には質の高い講師陣

Udemyの講師陣には、世界中のトップレベルのプログラマーが多数在籍しています。彼らは、実務での経験を活かして、分かりやすい講義を行っています。

4. 初学者が始めるのにとても手頃な価格

Udemyのコースは、他のオンライン講座と比べて手頃な価格で提供されています。また、一度購入すると、終身アクセスが得られるので、自分のペースで学習することができます。

以上の理由から、プログラミング初学者の方には、Udemyが最適な学習プラットフォームであると考えられます。ぜひ一度、Udemyのコースを体験してみてください。


ウェブ開発の人気オンラインコース


ITとソフトウェアの人気オンラインコース


デザインの人気オンラインコース