Sphinx使用OR调整条件

时间:2011-11-28 18:40:42

标签: ruby-on-rails ruby-on-rails-3 sphinx thinking-sphinx

我在这里遇到了一个问题,就是在轨道上使用红宝石的狮身人面像的范围。

问题是:

我需要在思考sphinx时做这个范围

scope :for_current_user, lambda{
    {:conditions => ["documents.user_id = ? OR documents.state != 'draft'", User.current.id]}
  }

我最常用的方法是:

  sphinx_scope(:sphinx_for_current_user){
    { :conditions => {:user_id => "#{User.current.id }", :workflow_state => '!draft'}}
  }

但上面的狮身人面像范围是

  

“documents.user_id = 20 AND workflow_state!='draft'”

但是,我真正需要的是

  

“documents.user_id = 20 OR workflow_state!='draft'”

欢迎任何帮助。

感谢。

1 个答案:

答案 0 :(得分:2)

对此的正确查询 - 没有范围 - 需要手动构建,可能看起来像这样:

Document.search "(@user_id 20) | (@workflow_state !draft)", :match_mode => :extended

目前在Thinking Sphinx中,您不能将查询作为sphinx范围的一部分提供 - 仅限选项。因此,虽然查询应该没问题,但范围不是一种选择。