2013-07-26 229 views
0

我有一個模型'ModelA',has_many關係'ModelB'。 ModelB有一個描述:text列和一個day:interger列(平日爲0-6)。基於屬性過濾器的過濾器索引列

我是ModelA的ModelB的索引列,所以我可以通過ModelA搜索。從索引塊

摘錄MODELA:

indexes model_bs.description, as: :model_b_description 
has model_bs.day, as: :model_b_day 
set_property field_weights: { 
    model_b_description: 10 
} 

我想這樣做,但ModelA.search('some description')使用過濾的model_b_day返回的結果,以確保我正在尋找的描述是在特定的一天(可以說:model_b_day => 5)。

我可以使用with: { day: 5 }進行搜索,但是這會返回與日期列匹配的ModelB,而不是描述符是否與當天的搜索AND匹配。

任何幫助將不勝感激!

編輯:我要指出,我使用思維斯芬克斯v2.0.13

回答

1

斯芬克斯無鍵/值對(散列,字典,無論你想給他們打電話)的概念,所以它不知道,描述與ModelA索引中的一天息息相關 - 它只是將大量描述一起放入一個字符串中,並將一堆日期描述爲每個ModelA記錄的整數數組。

在這種情況下更好的解決辦法是在ModelB搜索,而不是:

define_index do 
    indexes description 
    has day 
    set_property field_weights: {description: 10} 
end 

這樣有領域和屬性之間的關係(因爲它是每記錄的單個值)。您也可以通過關聯獲取ModelA數據(我猜測ModelB中有匹配的belongs_to :model_a)。

+0

似乎只要ModelB在某一天有描述,而不是它是否具有與當天搜索匹配的描述,那麼搜索仍然返回ModelB。 – fridgerator

+0

nope,你絕對正確,謝謝! – fridgerator