思考狮身人面像或状况

时间:2014-07-07 06:27:35

标签: mysql ruby-on-rails-3.2 thinking-sphinx

如何使用conditional or来思考sphinx?

情况是: 我有一个Message模型,其中包含sender_id和recipient_id属性。我想撰写此查询:

  Message.where("sender_id = ? OR recipient_id = ?", business_id, business_id)

现在,我正在搜索两次,一个用于所有具有recipient_id = business_id的邮件,另一个用于返回具有sender_id = business_id的所有邮件。然后我就把它们合并。

我觉得这是一种更有效的方法。

编辑 - 添加索引文件

ThinkingSphinx::Index.define :message, with: :active_record, delta: ThinkingSphinx::Deltas::DelayedDelta do
  # fields
  indexes body 

  # attributes
  has job_id
  has sender_id
  has recipient_id

end

1 个答案:

答案 0 :(得分:1)

Sphinx不允许属性之间的OR逻辑,只允许字段。但是,解决方法是将两列组合成第三个属性:

has [sender_id, recipient_id], :as => :business_ids, :multi => true

然后你可以像这样搜索组合值:

Message.search :with => {:business_ids => business_id}