rails 4.1.8、ruby 2.2、mysql、elasticsearch-rails 5.0.4、elasticsearch 5.2を使用しています。セレクタモデルのセレクタフィールドはvarcharカラムにjsonとして格納されます。何らかの理由で、as_jsonを使用して場所とその関連セレクタをロードすると、カラムにデータがあることがわかってセレクタフィールドがnilに戻りますか?RoR as_jsonは、データベースにあるデータが失われています。
セレクタテーブル:
create table Selectors do
t.text selectors
t.text selectors_other
t.references location
t.timestamps
end
モデルを持っているので、私は最近、弾性検索を追加しました:
settings index: {
analysis: {
analyzer: {
selector_analyzer: {
type: :standard,
stopwords: ["some","words","here"]
}
}
}
}
mapping do
indexes :selectors, {analyzer: :selector_analyzer}
indexes :selectors_other, {analyzer: :selector_analyzer}
end
def as_indexed_json(options={})
{
'id' => id,
'selectors' => selectors,
'selectors_other' => selectors_other
}
end
を、私はビューのデータを取得するために作るの呼び出しは
Location.find(<id>).as_json(:include => [:selector, :response])
です
私が期待するすべてのフィールドはjsonにあり、セレクタフィールド以外のすべてのデータはそこにあります。これはゼロです。データがあるとわかっています。もし私がそうするなら、
loc = Location.find(<id>)
loc.selector
セレクタフィールドはnilではありません。 Selectorモデルにas_jsonメソッドを追加しようとしましたが、何の効果もありませんでした。私が最近行った唯一の変更は、SelectorモデルをElasticsearchインデックスに追加することでした。複数のタイプのインデックスを1つ作成するためにIndexManagerを使用し、配置と再インデックス作成のためのレーキタスクを作成しました。唯一の違いは、このフィールドがjsonとして格納されていることですが、以前は正常に動作していました。
私はそれがゼロにならないものは何も考えられないので、何か考え、提案などは高く評価されます。