基于属性过滤器过滤索引列

冰箱

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

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 },但这将返回与day列匹配的ModelB,而不是描述是否与当天的搜索AND相匹配。

任何帮助将不胜感激!

编辑:我应该注意我正在使用思想狮身人面像v2.0.13

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

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

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

这样坐外地和属性之间的关系(因为它是每记录的一个单一的值)。您也可以通过关联来获取ModelA数据(我猜想belongs_to :model_aModelB中存在匹配项)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章