我的搜索包括按价格范围、星期几和客人数量来确定查询范围的能力。
但是,价格在一周中的每一天都是不同的,并且价格会根据客人的数量(不是线性地)变化。我能想到的索引数据的最佳方法是为每一天/客人组合创建一个不同的字段,例如,
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 似乎试图将任何方法标记解释为字段。如果我更好地理解它,我想这甚至会有意义。
所以,我的问题是,我有一个聪明的方法可以做到这一点吗?我是否需要硬编码一个范围并让我的价格方法返回一个空值?我不知道的可搜索块中是否有一些可用的机制?