【问题标题】:Multiple facet filters with Elasticsearch使用 Elasticsearch 的多方面过滤器
【发布时间】:2013-02-01 11:25:16
【问题描述】:

如何将多个过滤器应用于构面(使用轮胎宝石)?我有一个代码:

facet "packages" do
  terms :package
  facet_filter :terms, producer: [*params[:producer]] if params[:producer].present?
  facet_filter :terms, category_id: [*params[:category_id]] if params[:category_id].present?
end

但它似乎只应用了最后一个过滤器。但我两个都需要。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 elasticsearch tire


    【解决方案1】:

    试试这个

    my_filter = []
    my_filter << {:terms => {:producer => [*params[:producer]] }} if params[:producer].present?
    my_filter << {:terms => { :producer => [*params[:category_id]] }} if params[:category_id].present?
    
    facet "packages" do
      terms :package
      facet_filter :and, my_filter
    end
    

    【讨论】:

    • 不起作用 - '过滤器格式错误,必须从 start_object 开始',但我想我得到了大致的方向。
    • 已更新,仅使用 :term 查询尝试过,所以 YMMV。告诉我进展如何
    • 我在读完这篇文章后不久就发现了正确的语法,确实这很好用。谢谢。
    • 这是正确答案。请有足够声誉的人接受。
    【解决方案2】:
    my_filter = []
    my_filter << {:term => {:producer => params[:producer] }} if params[:producer].present?
    my_filter << {:term => {:category_id => params[:category_id] }} if params[:category_id].present?
    
    facet "packages" do
      terms :package
      facet_filter(:and, my_filter) if my_filter.present?
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多