Rails×Heroku×bonsai×Searchkick(Elasticsearch)利用時の覚書き
モデルProduct
を対象にSearchkick(Elasticsearch)で検索する場合。
gem 'elasticsearch', '7.2.0'
gem 'searchkick'
class Product < ApplicationRecord
searchkick language: "japanese"
def search_data
{
keywords: keywords
}
end
end
class HomeController < ApplicationController
def top
end
def search
@products = self.products_query
end
private
def products_query
if params[:q].present?
Product.search params[:q], fields: [:keywords], body_options: {min_score: 1}, operator: "or"
else
Product.all.order(id: "desc")
end
end
end
Elasticsearchの導入
ここは前回の開発で入れていた。
https://qiita.com/maztak/items/0f722ad01c982a96de59
brew install elasticsearch
だけでは上手くいかず、Elasticsearch公式サイトの手順を見ながら入れた気がする。
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/brew.html
$ which elasticsearch
-> usr/local/bin/elasticsearch #私の場合はこのディレクトリに入っていました
ローカルで開発するとき
Elasticsearchが既に入っていれば、起動してインデックス生成してあげれば検索結果に出てくる
# Elasticsearchを起動
$ elasticsearch
# 新規タブでkibanaを起動(任意)
$ kibana
# 新規タブでローカルサーバーを起動
$ rails s
# Rails Console でインデックスを生成
$ rails c
irb(main):001:0> Product.reindex # 検索対象となるモデル名がProductの場合
Production Heroku
HerokuにBonsaiアドオンを追加
GUIからポチポチするだけで、追加と環境変数BONSAI_URL
の設定が自動的にされる。ただし環境変数ELASTICSEARCH_URL
は手動で同じ値を設定する必要がある。
$ heroku config:get BONSAI_URL -a myapp
-> http://username123:[email protected]:443
$ heroku config:add ELASTICSEARCH_URL='http://username123:[email protected]:443'
BONSAI_URL
はbonsaiのCredentialの画面からも確認可能。
bonsai公式ドキュメントでは、URL例がxxx.bonsai.io/
のドメインだが、私のはxxx.bonsaisearch.net:443
となってた。末尾の数字までちゃんと設定するように。
インデックス作成
$ heroku run rails searchkick:reindex CLASS=Product -a myapp # 対象モデルがProductの場合
# もしくは
$ heroku run rails searchkick:reindex:all -a myapp
rake
の方でやるとElasticsearchのバージョンによっては上手く行かないことがあるかも(Searchkick::ImportError
がでた)。
参考
Searchkick
https://github.com/ankane/searchkick
Heroku Bonsai Elasticsearch Document
https://devcenter.heroku.com/articles/bonsai
SearchkickのREADMEの日本語訳
https://qiita.com/kentosasa/items/f0af67f62f4692d68370#deployment
Author And Source
この問題について(Rails×Heroku×bonsai×Searchkick(Elasticsearch)利用時の覚書き), 我々は、より多くの情報をここで見つけました https://qiita.com/maztak/items/9da01a8e48fd3f4ac555著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .