fix aggregations to work more like drill down

This commit is contained in:
Lars Henrik Mai 2015-06-22 22:08:27 +02:00 committed by Andreas Haller
parent 2b7ab65432
commit d27f78afba

View file

@ -46,9 +46,6 @@ class Paper < ActiveRecord::Base
def search(q, options={}) def search(q, options={})
@search_definition = Elasticsearch::DSL::Search.search do @search_definition = Elasticsearch::DSL::Search.search do
query do
filtered do
query do query do
# search query # search query
unless q.blank? unless q.blank?
@ -61,8 +58,8 @@ class Paper < ActiveRecord::Base
end end
end end
# filters # apply filter after aggregations
filter do post_filter do
bool do bool do
must { term paper_type: options[:paper_type] } if options[:paper_type].present? must { term paper_type: options[:paper_type] } if options[:paper_type].present?
must { term originator: options[:originator] } if options[:originator].present? must { term originator: options[:originator] } if options[:originator].present?
@ -71,20 +68,33 @@ class Paper < ActiveRecord::Base
end end
end end
end aggregation :paper_types do
end # filter by originator
f = Elasticsearch::DSL::Search::Filters::Bool.new
f.must { match_all }
f.must { term originator: options[:originator] } if options[:originator].present?
filter f.to_hash do
aggregation :paper_types do aggregation :paper_types do
terms do terms do
field 'paper_type' field 'paper_type'
end end
end end
end
end
aggregation :originators do
# filter by paper_type
f = Elasticsearch::DSL::Search::Filters::Bool.new
f.must { match_all }
f.must { term paper_type: options[:paper_type] } if options[:paper_type].present?
filter f.to_hash do
aggregation :originators do aggregation :originators do
terms do terms do
field 'originator' field 'originator'
end end
end end
end
end
end end
Rails.logger.debug "Query: #{@search_definition.to_json}" Rails.logger.debug "Query: #{@search_definition.to_json}"