根据属性过滤器筛选索引列

时间:2013-07-26 18:59:31

标签: ruby-on-rails thinking-sphinx

我有一个模型'ModelA',与'ModelB'有一个has_many关系。

ModelB有一个描述:text列和一天: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匹配。

非常感谢任何帮助!

编辑:我应该注意到我正在使用思考sphinx v2.0.13

1 个答案:

答案 0 :(得分:1)

Sphinx没有键/值对的概念(哈希,词典,无论你想要什么),所以它不知道描述与你的ModelA索引中的一天有关 - 它只是有一堆描述将每个ModelA记录整合成一个字符串和一堆整数数组。

此方案中更好的解决方案是搜索ModelB:

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

那样就是字段和属性之间的关系(因为它是每条记录的单个值)。您还可以通过关联提取ModelA数据(我猜测ModelB中有匹配的belongs_to :model_a)。