0
0

More than 5 years have passed since last update.

OSX: solr 5.4+rails4+sunspot2.2.4で日本語全文検索、マルチコア

Last updated at Posted at 2016-02-25

動く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
Screen_Shot_2016-02-25_at_1_45_47_PM.png
*増えてないのならどこかが間違っている

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_homeschema.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
Screen_Shot_2016-02-25_at_2_09_06_PM.png
*増えてないのならどこかが間違っている

モデルにsearchableを追加

  searchable do
    text :name, as: :name_text_ja  # 日本語の全文検索を使うのでasで名前を変更する
  end

solrconfig.xmlのコミットを変える

デフォルトのままだと大量に文章を入れて、だいぶ後から検索することを前提とした設定?なので、Railsのように逐次データ追加、検索をする場合は思うタイミングで検索対象が出てこない

この為に、solrconfig.xmlautoSoftCommitを使うように変更する。

実行

User.create name: "すもももももももものうち"

このコードを走らせた後、Solrの自分のコアを見てみてNum Docsがゼロのままならどこかがまだおかしい。インデックスのコミットが走っていない。

http://localhost:8983/solr
e1a6fbfd47fa9bdb0aa5d8e60ab34e1b.png

最後に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は移動した先のフルパスです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0