【问题标题】:Filter indexed column based on attribute filter根据属性过滤器过滤索引列
【发布时间】:2013-07-27 09:03:23
【问题描述】:

我有一个模型“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

【问题讨论】:

    标签: ruby-on-rails thinking-sphinx


    【解决方案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)。

    【讨论】:

    • 看起来搜索仍然返回ModelB,只要ModelB在某一天有描述,而不是它是否有与当天搜索匹配的描述。
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多