Lea*_*RoR 11 ruby ruby-on-rails ruby-on-rails-3 elasticsearch tire
我想过滤我的类的私有布尔值,所以它只显示非私有的资源,但它不适合我.(我极大地贬低了代码)
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
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
Fre*_*ung 16
filter :term, :private => false
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.根据您是否想要使用构面进行操作,对过滤后的查询进行过滤可能更有效,而不是在顶层进行过滤,即
tire.search(...) do
query do
filtered do
query { string, params[:query] }
filter :term, :private => false
end
end
end
Run Code Online (Sandbox Code Playgroud)
但它不应该改变结果.
您也可以使用bool过滤器执行此操作,但不是您尝试的方式 - 在bool过滤器中,您需要构建一个结构,说明什么是可选的,什么不是
例如
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
Run Code Online (Sandbox Code Playgroud)
一个bool过滤器比使用较慢的and过滤器(这是在幕后做什么轮胎如果指定多个过滤器),但显然给你更多的灵活性.