sunspot_railsで”undefined field type”

sunspot_railsで”undefined field type”

railsに全文検索を追加できるgem sunspotで既存のSolrに接続する場合、rake sunspot:reindexせずにすでに存在するインデックスを使いたかった。

Hogeクラスにsearchableメソッドを追加して

Hoge.search { ... }

としようとすると、400 Bad requestとなり”undefined field type”というエラーメッセージが返ってくることがある。
これは、sunspot_railsがデフォルトでパラメータにfq: [“type:Hoge”]が追加しているのにschema.xmlにtypeフィールドの定義がないため。
手っ取り早く解消するにはschema.xmlにtypeフィールドを追加する。

<field name="type" stored="false" type="string" multiValued="true" indexed="true"/>

もしくはfqパラメータを削除する。

Hoge.search do
  adjust_solr_params do |params|
    params.except! :fq
  end
end

[12/4 追記]
また、sunspotはデフォルトでindexed_nameというメソッドで型ごとの名前をつけている(例えばtext型なら_textというサフィックスがつく)。なのでreindexしない場合はsolr側のフィールドを合わせるか名前を既存のものを使うよう変更を加える必要がある。

既存のインデックスを使いたい場合はsunspotではなく、大人しくrsolrを使うべきだと思いました。

TAG

  • このエントリーをはてなブックマークに追加
kurashita
エンジニア kurashita kurashita

基本的にRuby on Railsで開発してます。最近はvue.jsも。好きな塔は円城です。