Tire と ActiveRecord を使用して、elasticsearch のデータ セットのインデックスを作成しています。has_many :images の Artist モデルがあります。特定の画像を返す Artist モデルのメソッドにインデックスを付けるにはどうすればよいですか? または、関連付けられたモデルのメソッドを参照しますか? 希望するアーティストの結果には、アーティストに関連付けられたプライマリ イメージ (オリジナルとサムネイルの両方) のパスが含まれます。
私はこのマッピングを試しました:
mapping do
indexes :id, :index => :not_analyzed
indexes :name
indexes :url
indexes :primary_image_original
indexes :primary_image_thumbnail
end
これらの Artist メソッドを参照するには:
def primary_image_original
return images.where(:priority => 'primary').first.original
end
def primary_image_thumbnail
return images.where(:priority => 'primary').first.thumbnail_150
end
これは、インデックス付きのメソッドを無視するだけです。Elasticsearch、Tire、ネストされたクエリ/ ActiveRecord との関連付けなどの他の回答に基づいて、これを試しました:
mapping do
indexes :id, :index => :not_analyzed
indexes :name
indexes :url
indexes :images do
indexes :original
indexes :thumbnail_150
indexes :priority
end
end
def to_indexed_json
to_json(include: { images: { only: [:original, :thumbnail_150, :priority] } } )
end
しかし、これも私が求めているものを返しません。私は数時間をグーグルで検索し、elasticsearch と Tire のドキュメントを読んでいますが、従うべきこのパターンの実例は見つかりませんでした。アイデアをありがとう!