動くrepo
-
brew install solr
最新で5.4が入ります - clone
- bundle
- migrate
- rails c
User.create name: "すもももももももものうち"
User.search{fulltext "もも"}.results.count # => 1
どうやって動くsolr_homeを作るのか
repoのcommitログを見ながら下を読んでください。
solr_homeを用意する
bundle exec rake sunspot:solr:run
をすると現在のRails App内にsolr
フォルダができます。これを元に動くsolr_home
を作っていきます。
solr_home
内にデフォルトで作られているdefault
development
test
は置いておいて、Rails App名_環境名
でフォルダを作ります。
その中にcore.properties
というファイルを作ります。
configSet=sunspot # これによってsolr/configsets/sunspot内のファイルが共通で使えるように
name=solr54_sunspot224_development # フォルダ名と合わせる
Solrを再起動すると bundle exec rake sunspot:solr:run
下のようにコアが増えています。
http://localhost:8983/solr
*増えてないのならどこかが間違っている
config/sunspot.ymlを作る
pathを書かないとデフォルトのままなので、分かり易いように変更する
path: /solr/<%= "#{Rails.root.basename}_#{Rails.env}" %>
こうすることで、後々複数のRails Appから同じSolrに対してコアがどんどん作れるようになる
schema.xmlを変更する
sunspotが作るsolr_home
の設定には日本語全文検索用の設定が書かれていないので、HomeBrewでインストールしたSolrのインストールディレクトリから必要な部分をコピーしてくる。
/usr/local/Cellar/solr/5.4.0/server/solr/configsets/data_driven_schema_configs/conf/managed-schema
このファイルからtext_ja
を抜き出してRails App内のsolr_home
のschema.xml
へ入れる
/usr/local/Cellar/solr/5.4.0/server/solr/configsets/data_driven_schema_configs/conf/managed-schema/lang/*
は丸ごとコピーして自分のsolr_home
の同じ位置へ入れる。
Solrを再起動すると bundle exec rake sunspot:solr:run
下のようにフィールドタイプが増えています。
http://localhost:8983/solr
*増えてないのならどこかが間違っている
モデルにsearchableを追加
searchable do
text :name, as: :name_text_ja # 日本語の全文検索を使うのでasで名前を変更する
end
solrconfig.xmlのコミットを変える
デフォルトのままだと大量に文章を入れて、だいぶ後から検索することを前提とした設定?なので、Railsのように逐次データ追加、検索をする場合は思うタイミングで検索対象が出てこない。
この為に、solrconfig.xml
のautoSoftCommit
を使うように変更する。
実行
User.create name: "すもももももももものうち"
このコードを走らせた後、Solrの自分のコアを見てみてNum Docs
がゼロのままならどこかがまだおかしい。インデックスのコミットが走っていない。
最後にbrew側のSolr5.4で動かす
bundle exec rake sunspot:solr:run
ではsunspot_solr
の中にあるsolrが動いているので、brew側の方で作ったsolr_home
を動かすようにする。
solr start -f -s /path/to/your/solr_home
*-fはforeground
複数のRailsから同じSolrにコアを作り、使う場合
上記のようにできたsolr_home
をアクセス権限がある別のどこかへ移動します。
そしてそれぞれのRails用のコアを上記説明のように追加していきます。
その上でそれぞれのRailsはsunspot.yml
を変更し、solr_home
を追加します。このsolr_home
は移動した先のフルパスです。