【问题标题】:rails and solr how to limit or set range for searchable attribute idsrails 和 solr 如何限制或设置可搜索属性 ID 的范围
【发布时间】:2012-11-12 19:18:00
【问题描述】:

我有一个公司模型,它有很多行业和一个级别。

我有一个辅助函数,可以根据级别获取行业数量。

假设具有“基本”级别的公司模型实例只能搜索前 2 个行业,虽然它可能包含更多,但我只希望它显示在前 2 个行业的结果中。

在我的模型中

searchable do
  integer :industry_ids, multiple: true

如何限制对模型实例的搜索,以便根据 num_of_industries 辅助函数确定的级别仅搜索特定数量的行业。

类似

searchable do
  integer :industry_ids[num_of_industries], multiple: true

编辑: 我想通了

LIMITED_INDUSTRIES_BASED_ON_LEVEL = {
  'Free' => 1,
  'Silver' => 3,
  'Gold' => 5,
  'Platinum' => 5
}
def industries_limited
  self.industries.limit(LIMITED_INDUSTRIES_BASED_ON_LEVEL[self.level])
end
searchable do
  integer :industry_ids, multiple: true do
    self.industries_limited.map(&:id)
  end
end

【问题讨论】:

  • 你说公司、级别、行业,我们都知道你的要求。请添加相关细节,因为我们无法假设它们。请对您的问题和相关事物的架构提供更高级别的概述。
  • 对不起,我不是很清楚,我想通了。

标签: ruby-on-rails ruby solr range limit


【解决方案1】:

想通了 公司的等级是说“免费”,因此仅限于1个行业,但可以增加更多,所以将来如果决定升级,所有信息都在那里。所以我将搜索本身限制为基本上只计算基于级别的行业(在这种情况下只计算前1个,因为对于级别=“免费”,限制是1)

LIMITED_INDUSTRIES_BASED_ON_LEVEL = {
  'Free' => 1,
  'Silver' => 3,
  'Gold' => 5,
  'Platinum' => 5
}
def industries_limited
  self.industries.limit(LIMITED_INDUSTRIES_BASED_ON_LEVEL[self.level])
end
searchable do
  integer :industry_ids, multiple: true do
    self.industries_limited.map(&:id)
  end
end

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2015-08-13
    • 2014-04-05
    相关资源
    最近更新 更多