スポンサーサイト

  • 2015.09.25 Friday

一定期間更新がないため広告を表示しています

  • -
  • -
  • -
  • スポンサードリンク

Rails3.2 tire を使って、Elasticsearch を使うまでの道のり

  • 2012.05.28 Monday
  • 18:31
JUGEMテーマ:インターネット


ここのところ、すっかり検索エンジン放浪者になってしまいました。 今回Railsで作ったアプリで扱うDBが巨大なので、MySQLのqueryベースだと、もたもたして使えない。というのが出発点でした。

で、まず発見したのが「Think Sphinx」。なんか、センスがよくて、いいなーっと思って。実装までしてみたんですが。なんと、日本語苦手なんですね、この人。はじめは、ぜんぜん日本語扱えなくて。で「Sphinx Search in Japanese」を参考に設定したら、なんとか扱えるようにはなったのだけれど。検索精度が悪い。。コンフィグ設定でできる範囲でいじってみたのですが、やっぱりイケてない。 日本語扱えない以外は、かなり好きなタイプなんだけど。でも、だめみたい。 ちなみに、PDFのチュートリアル(有料)があるんだけど、それがすごく読みやすい。英語だけど。 日本語、もうちょっとちゃんと扱ってくれたらなあ・・・。

で、いろいろ検索してたら「Sunspot」と「Tire」が有力候補としてあがってきました。

The Ruby Toolboxでも、その3つが巨塔みたい。Solr系もいいんだけど、なんとなく古いイメージがあって。だからまあ、枯れてていいのかもしれないけど。新しもの好きなので、Elasticsearchをまず使ってみようと思ったわけです。



以下、Centos6(さくら VPS)へのインストール記録です;
(※Ruby 1.9.3 や、Rails 3.2 、MySQL など基本的な構成で、既存のアプリケーションがあるという前提での記述です。)



1)まず、Javaをインストールしてない場合は、Java Runtime の最新版をダウンロードしてインストールします。(サーバ内のターミナルからDLしようとすると、いわゆる規約に同意するためのJSでエラーになってしまい。うまくいきせんでした。なので、ローカルにDLしてから、サーバにSFTPしました。)
http://download.oracle.com/otn-pub/java/jdk/7u4-b20/jre-7u4-linux-x64.rpm

2)ダウンロードしたファイルを、適当なディレクトリにコピーして、インストールします。
$ sudo rpm -ivh jre-7u4-linux-x64.rpm


3)バージョンの確認をしてみます。
$ java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)




4)次に、elasticsearch をDLします。
$ curl -L -O -k ╲ https://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.4.zip


5)解凍します
$ unzip elasticsearch-0.19.4.zip


6)適当に、移動します
$ sudo mv elasticsearch-0.19.4 /usr/local/elasticsearch


7)実行してみます
$ /usr/local/elasticsearch/bin/elasticsearch -f


※終了するには「Control + C」で落とします。
※「./elasticsearch/bin/service/elasticsearch start | stop | restart」が可能な、Service wrapper もあり。詳しくは、下記「参考」参照
※参考)「Setting up elasticsearch」



8)rails_app/Gemfile に、下記追加
gem 'tire'
gem 'will_paginate', '~> 3.0' # 既に記載済みの場合はOK。これ入れないと「elasticsearch 」でインデックス作るときに「undefined method `paginate'」みたいなエラーがでる。後述参照


9)バンドルインストール
bundle install


10)rails_app/config/environment.rb に以下追加
require 'will_paginate'

※参考)https://github.com/radiant/radiant/issues/221

11)検索対象の model ファイルに、記述追加
class Article < ActiveRecord::Base
has_many: xxxxx

include Tire::Model::Search #これを追加
include Tire::Model::Callbacks #これを追加
end

※参考)https://github.com/karmi/tire/blob/master/README.markdownの中の「ActiveModel Integration」

12)検索対象の controller ファイルの index メソッドをこんな感じに;
def index
if params[:query].present?
@shows = Show.search(params[:query], load: true)
else
@shows = Show.all
end

 ・
 ・
 ・
end


13)検索対象の view ファイルを、こんな感じに(※models_pathは適切に差し替える);
<%= form_tag models_path, :method => :get do %>


<%= search_field_tag :query, params[:query] %>
<%= submit_tag "Search", name: nil %>


<% end %>



14)elasticsearch の index を更新する
rake environment tire:import CLASS='Model名' FORCE=true

※参考)rake -T でコマンド確認可能

15)検索ボックスが表示されているので、そこから検索可能(な、はず)


・・・でもなんか、2〜3文字で検索すると、その中の1文字だけが一致する結果もひろってきたりと、あんまり信頼性ない感じ。例えば「中日」で検索すると「中国」とか「中村」がかかってくる。「中 AND 日」で検索すると、なんとかうまくいくけど。それでいいんかい? やっぱ、Solr なのか?それとも、elasticsearch の設定でなんとかなるのか??


以上、参考URL;
Elasticsearch 公式サイト
tire on Github
RailsCasts #306 ElasticSearch Part 1(日本語)




スポンサーサイト

  • 2015.09.25 Friday
  • 18:31
  • -
  • -
  • -
  • スポンサードリンク
コメント
コメントする

PR

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< June 2019 >>

本が出てます☆

Twitter

selected entries

categories

archives

recent comment

  • Mac OS X Lion で、emacs を楽に使うために、Meta キーを「option」に設定したい。
    通りすがり (01/19)
  • 携帯キャリアの、アクセス制限(未成年保護)についてのまとめ
    たけのこの里 (10/01)
  • Mac OS X Lion で、emacs を楽に使うために、Meta キーを「option」に設定したい。
    イシカワ (07/16)
  • さくらインターネットで、gem install すると「chown/chgrp: Operation not permitted 」と叱られる件の対応
    sean (04/20)
  • さくらインターネットで、gem install すると「chown/chgrp: Operation not permitted 」と叱られる件の対応
    てっちー (03/24)
  • Mac OS X Lion で、emacs を楽に使うために、Meta キーを「option」に設定したい。
    JO (01/04)
  • Passbook(パスブック)on iOS6 (NDAに触れない範囲で...)
    ぱん (09/28)
  • Passbook(パスブック)on iOS6 (NDAに触れない範囲で...)
    宮腰睦美 (09/23)
  • magit を、Lion の emacs にインストール
    ぱん (05/08)
  • 【 Xcode4.2 】Interface Builder使わずに、座標を合わせたい(習作1)
    ぱん (12/21)

recommend

iOSプログラミング 第2版
iOSプログラミング 第2版 (JUGEMレビュー »)
アーロン・ヒレガス,ジョー・コンウェイ,Aaron Hillegass,Joe Conway
■独学で初心者を脱出するには、必読ではないでしょうか。翻訳でニュアンスが伝わらない部分があるので、原書と、サポートサイト(英語)を活用すべし!です。

recommend

iPhoneプログラミングUIKit詳解リファレンス
iPhoneプログラミングUIKit詳解リファレンス (JUGEMレビュー »)
所 友太
■内容古いですが、iOSプログラマー中級以上の階段を登るために、必要な本だと思います。iOS5対応版出ないかな。。

recommend

iOSプログラミング入門 - Objective-C + Xcode 4で学ぶ、iOSアプリ開発の基礎
iOSプログラミング入門 - Objective-C + Xcode 4で学ぶ、iOSアプリ開発の基礎 (JUGEMレビュー »)
大津 真
■Ch.1「iOS プログラミングを始めるための基礎知識」でXcodeの概要を理解して、Ch.2「Objective-C の基礎知識」で、Objective-Cの考え方を理解できます。iOSプログラミングのキックオフにぴったり。

recommend

去年ルノアールで
去年ルノアールで (JUGEMレビュー »)
せきしろ
■ルノアールで妄想が爆発

recommend

RailsによるアジャイルWebアプリケーション開発 第4版
RailsによるアジャイルWebアプリケーション開発 第4版 (JUGEMレビュー »)
Sam Ruby,Dave Thomas,David Heinemeier Hansson
■Railsのバイブル第4版の日本語版が2011年末にリリース!サーバサイドで準備するAPIや、Webサイト関連のもろもろは、やっぱRailsでしょう。

links

profile

search this site.

others

mobile

qrcode

powered by

無料ブログ作成サービス JUGEM