0

我有一个模型“ModelA”,它与“ModelB”有一个 has_many 关系。

ModelB 有一个 description: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 匹配。

任何帮助将不胜感激!

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

4

1 回答 1

1

Sphinx 没有键/值对的概念(散列、字典,无论您想如何称呼它们),因此它不知道描述与您的 ModelA 索引中的一天相关联——它只是将一堆描述混合在一起一个字符串,以及一堆天作为每个 ModelA 记录的整数数组。

在这种情况下,更好的解决方案是在 ModelB 上进行搜索:

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

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

于 2013-07-27T01:03:23.163 回答