我在Ruby on Rails应用程序中使用Thinking Sphinx进行搜索。 在模型中我使用sphinx范围。
# Sphinx for Items
define_index do
indexes name
has status_id, year
end
sphinx_scope(:by_year) { |min, max|
{:with => { :year => (min.to_i)..(max.to_i) }}
}
sphinx_scope(:by_status_id) { |id|
{:with => {:status_id => id}}
}
当我只想搜索年份时,我会使用
@items = Items.by_year(year_start, year_finish)
我所有物品都有条件。
当我只想搜索状态时,我会使用
@items = Items.by_status_id(status_id)
但是当用户选择状态和年份时,我想动态添加条件。
@items = Items.by_year(year_start, year_finish)
@items = @items.by_status_id(status_id) if status_id
这不起作用。 我当前的colution - instance_eval
str = "Items.by_year(year_start, year_finish)"
str << ".by_status_id(status_id)" if status_id
instance_eval str
这很有用。
安全和适当多少?我有很多要搜索的字段,大约有二十个。
如果您不使用Sphinx,那么没有他的数据选择速度有多快?我只搜索数值数据。