我想过滤我的类的私有布尔值,所以它只显示非私有的资源,但它不适用于我。 (我极度愚弄了代码)
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
我该如何正确地做到这一点?
答案 0 :(得分:16)
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
过滤器慢(如果您指定多个过滤器,轮胎会在幕后做什么),但显然会为您提供更大的灵活性。
答案 1 :(得分:4)
您可以尝试:
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
答案 2 :(得分:3)
根据elasticsearch - guide,布尔值存储为T或F,所以我会尝试按T或F过滤。
例如
filter :terms, :private => ['T']
我实际上并没有使用轮胎,这只是基于对指南和examples的一些研究。