2014-07-07 77 views
0

你如何在思維獅身人面像中使用conditional or思考獅身人面像或條件

的情況是: 我有一個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

斯芬克斯不允許或屬性,只有字段之間的邏輯。然而,一個解決方法是將兩列合併成第三個屬性:

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

然後你就可以對組合值,像這樣搜索:您的答覆

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

感謝帕特但是當我試圖該解決方法,它只是用'sender_id'搜索所有消息= business_id – Finks

+0

索引是基於SQL還是實時的? – pat

+0

嗨,你是什麼意思的基於SQL或實時索引?如果有幫助,我會發布索引文件。 – Finks