0

我无法弄清楚如何使用直方图。我的模型中有一个价格字段,我想以某个间隔对结果进行分组,例如以 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}]}

但是我如何将它与参数一起使用?我的实现只给了我一个完全匹配的字段。我将不胜感激任何建议。

4

1 回答 1

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?
于 2013-10-24T20:45:44.237 回答