Solr を検索エンジンとして使用する Ruby on Rails アプリケーションを作成しています。次のバージョン番号は、次の段落で説明する問題に関連している可能性があります。
- ルビー: 1.9.2
- レール: 3.2.6
- 黒点: 1.3.0.rc5
バックグラウンド
Feedback
異なるサブクラスに継承されるモデルがあります。クラス階層は次のようになります (単一テーブルの継承)。
Feedback
|- Problem
|- Question
|- Suggestion
|- Announcement
モデルではFeedback
、次のコードによってインデックス作成が有効になります。
searchable :auto_index => true, :auto_remove => true do
string :type
text :title, :boost => 2
text :content
integer :user_id
time :created_at
...
end
問題
これに関する問題は、たとえば、Problem
"problemtitle" というタイトルの新しい を作成するときに、Sunspot がProblem
および基礎となるの自動索引付けを初期化することFeedback
です。「problemtitle」というタイトルのフィードバックを検索すると、
search = Feedback.solr_search do
with(:type, type.capitalize)
fulltext("problemtitle") {minimum_match 1}
paginate(page: options[:page], per_page: options[:per_page])
end
2 つの結果が見つかりました。1 つの結果はProblem
で、もう 1 つはFeedback
です。これは、クラス階層でクラスとそのサブクラスがインデックス付けされていることを示します。私が知る限り、これは正しいはずです。
ここで奇妙なことは、コマンドでインデックスを再インデックスし、タイトル「problemtitle」bundle exec rake sunspot:solr:reindex
で検索すると、上記で作成されFeedback
た 1 つの結果が得られることです。Problem
モデル:unless => proc {|model| model.class == Feedback}
内の検索可能な定義に追加することで、これを解決しました。Feedback
これにより、 のサブクラスのみFeedback
が自動的にインデックス付けされます。
質問
私の質問は、これが望ましい動作であるかどうかです(機能またはバグですか)。再インデックス付けが、作成時の自動インデックス付けとは異なる方法でモデルのインデックス付けを処理する理由がわかりません。これは、クラス階層の実装方法の問題でしょうか?
私の質問に答えるためにさらに情報が必要な場合は、それを提供しようとします。
敬具、
セバスチャン