2

我的搜索包括按价格范围、星期几和客人数量来确定查询范围的能力。

但是,价格在一周中的每一天都是不同的,并且价格会根据客人的数量(不是线性地)变化。我能想到的索引数据的最佳方法是为每一天/客人组合创建一个不同的字段,例如,

searchable do
  integer :price_sunday_2_guests do
    price(:sunday, 2)
  end
  integer :price_sunday_3_guests do
    price(:sunday, 3)
  end

  ...

  integer :price_monday_2_guests do
    price(:monday, 2)
  end

  ... 

  # and so on...

end

显然,我不想输入所有内容。我想在可搜索块中构造这些属性。更像:

searchable do
  Date::DAYNAMES.each do |day_name|
    day = DateTime.strptime(day_name, '%A')
    (guests_min..guests_max).each do |guests|
      sym = (day_name.downcase + '_' + guests.to_s + 'guests_price_abs_max').to_sym
      integer sym do
        price(day_name, guests)
      end
    end
  end
end

但我得到以下异常: NoMethodError: undefined method `guests_min' for #<Sunspot::DSL::Fields:0x000001080bdcf0>

它不会抱怨常量 Date::DAYNAMES。

Sunspot 似乎试图将任何方法标记解释为字段。如果我更好地理解它,我想这甚至会有意义。

所以,我的问题是,我有一个聪明的方法可以做到这一点吗?我是否需要硬编码一个范围并让我的价格方法返回一个空值?我不知道的可搜索块中是否有一些可用的机制?

4

0 回答 0