我有或者运营商思考sphinx搜索条件:
Oil.search "(@oiliness #{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | @oiliness #{params[:oiloiliness]}) | (@description #{params[:descr]})
但我必须改变它,我可以使用我的或运算符,但也添加一些if语句条件:例如我的params [:descr]是空的,所以我不需要通过@description搜索(它也会抛出错误)。
我需要像params [:descr]之类的东西然后不使用这部分(@description#{params [:descr]})。但这样做的最佳方式是什么?
使用条件“语法”可能更好更容易:
Oil.search :conditions => {oiliness: "#{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | #{params[:oiloiliness]}", params[:descr].present? ? description: "#{params[:descr]" : nil}
像这样......
也:
ThinkingSphinx::Index.define :oil, :with => :active_record do
indexes :oiliness
indexes :structure
indexes :manufacturer
indexes :capacity
indexes :description
end
我也试试:
@pre_oils = Oil.search :conditions => {oiliness: "#{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | #{params[:oiloiliness]}", description: "#{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | #{params[:oiloiliness]}", capacity: params[:oilsize], manufacturer: params[:oilbrand]}
答案 0 :(得分:1)
如果你想保持OR逻辑,这样的事情应该可以解决问题:
fields = ["@oiliness #{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | @oiliness #{params[:oiloiliness]}"]
fields << "@description #{params[:descr]}" if params[:descr].present?
Oil.search(
fields.collect { |field| "(#{field})" }.join(' | ')
)