我无法弄清楚如何使用直方图。我的模型中有一个价格区域,我希望以一定的间隔对结果进行分组,例如400个单位。页面应该有链接:400,800,1200,1600。点击链接结果应该使用此价格组进行过滤。(与日期相同)
在模型中我有:
def self.search params
tire.search(page: params[:page], per_page: 20) do
query do
boolean do
...
must { term :price, params[:price] } if params[:price].present?
must { term :date_from, params[:dates] } if params[:dates].present?
end
end
facet("prices") { histogram :price, interval: 400, order: 'key' }
facet('dates') { date :date_from, interval: '3w', order: 'time'}
end
end
它给了我正确的方面:
{“_ type”=>“histogram”,“entries”=> [{“key”=> 600,“count”=> 20}, {“key”=> 1800,“count”=> 30}]}
但是如何将它与params一起使用?我的实现只给了我一个完全匹配的字段。我会很感激任何建议。
答案 0 :(得分:0)
经过一些研究(很多)后,我意识到获得值范围的唯一方法是使用gt / gte / lt / lte获得“范围” (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-range-query.html)
所以回答我自己的问题是:
must { range :price, gte: params[:price], lt: params[:price].to_i + 400 } if params[:price].present?
must { range :date_from, gte: params[:dates], lt: Time.at(params[:dates].to_i / 1000) + 3.weeks } if params[:dates].present?