【问题标题】:Elastic Search/Tire: How do I filter a boolean attribute?弹性搜索/轮胎:如何过滤布尔属性?
【发布时间】:2012-08-18 11:38:41
【问题描述】:

我想过滤我班级的私有布尔值,以便它只显示非私有但对我不起作用的资源。 (我大大简化了代码)

mapping do
  indexes :private,  type: "boolean"
  indexes :name, type: "string"
 end 
end

def self.search(params)
    tire.search(load: true, page: params[:page], per_page: 20) do
       query  { string params[:query] } if params[:query].present?
       # So far I've tried...
       # filter :bool, :private => ["false"] 
       # filter :bool,  private: false
    end
end

我该如何正确地做到这一点?

【问题讨论】:

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


    【解决方案1】:

    根据elasticsearch - guide,布尔值存储为T或F,所以我会尝试按T或F过滤。

    例如

    filter :terms, :private => ['T']
    

    我实际上并没有使用过轮胎,这只是基于对指南和examples 中的一些研究。

    【讨论】:

      【解决方案2】:

      你可以试试:

      tire.search(load: true, page: params[:page], per_page: 20) do
          query do
              boolean do
                  must { string params[:query] } if params[:query].present?
                  must { term :private, true }
              end
          end
      end
      

      【讨论】:

        【解决方案3】:
          filter :term, :private => false
        

        应该做的伎俩。根据您是否要使用构面进行处理,过滤过滤后的查询可能比在顶级过滤更有效,即

        tire.search(...) do 
          query do
            filtered do
              query { string, params[:query] }
              filter :term, :private => false
            end
          end
        end
        

        但它不应该改变结果。

        您也可以使用 bool 过滤器执行此操作,但与您尝试的方式不同 - 在 bool 过滤器中,您需要构建一个 structure 来说明哪些是可选的,哪些不是

        例如

        tire.search(load: true, page: params[:page], per_page: 20) do
           query  { string params[:query] } if params[:query].present
           filter :bool, :must => {:term => {:private => true}}
        end
        

        bool 过滤器比使用 and 过滤器慢(如果您指定多个过滤器,这就是轮胎在幕后所做的事情),但显然给您更大的灵活性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-17
          • 2013-07-27
          • 1970-01-01
          • 1970-01-01
          • 2013-02-14
          • 2021-05-14
          相关资源
          最近更新 更多