如何使用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
答案 0 :(得分:1)
Sphinx不允许属性之间的OR逻辑,只允许字段。但是,解决方法是将两列组合成第三个属性:
has [sender_id, recipient_id], :as => :business_ids, :multi => true
然后你可以像这样搜索组合值:
Message.search :with => {:business_ids => business_id}