2013-07-26 41 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