パブリケーション モデルのマッピングは次のとおりです。
mapping do
indexes :id, type: 'integer'
indexes :publisher_id, type: 'integer'
indexes :state
indexes :title
indexes :created_at, type: 'date'
indexes :updated_at, type: 'date'
indexes :formats, type: 'nested' do
indexes :pid, type: 'integer'
indexes :key_type
indexes :value, type: 'string', analyzer: 'whitespace'
indexes :state
indexes :protection
indexes :nature
indexes :start_sale_at, type: 'date'
indexes :issued_on, type: 'date'
indexes :format_aliases do
indexes :value, analyzer: 'whitespace'
end
indexes :cost do
indexes :id, type: 'integer'
indexes :country
indexes :format
indexes :amount, type: 'integer'
end
end
indexes :collections do
indexes :collection_id, type: 'integer'
indexes :collection_title
end
indexes :contributors do
indexes :contributor_id, type: 'integer'
indexes :contributor_first_name, analyzer: 'whitespace'
indexes :contributor_last_name, analyzer: 'whitespace'
end
end
状態が「破棄」されておらず、形式の性質の 1 つが「epub」タイプで、状態が「販売」に設定されているすべての出版物を取得したいと考えています。
これを行うと、破壊された出版物を取得できません
tire.search do
query do
boolean do
must_not {term :state, 'destroyed'}
end
end
end
これを行うことで、状態が「販売」で性質が「epub」の形式を持つすべての出版物を取得できます。
tire.search do
nested path: 'formats' do
query do
match 'formats.nature', 'epub'
match 'formats.state', 'sell'
end
end
end
しかし、完全なソリューションを得るために両方をマージすることはできません。