ElasticSearch /轮胎直方图的使用,如何从篮子中返回某些值?

时间:2013-10-23 21:28:24

标签: ruby-on-rails elasticsearch tire

我无法弄清楚如何使用直方图。我的模型中有一个价格区域,我希望以一定的间隔对结果进行分组,例如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一起使用?我的实现只给了我一个完全匹配的字段。我会很感激任何建议。

1 个答案:

答案 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?