Ruby on rails 思考a中字符串字段上的Sphinx过滤有许多关联
我需要使用Thinking Sphinx从另一个由多个关联连接的表中筛选字符串字段 比如说一个学生有很多学位。“毕业年”是有问题的筛选字段,它位于学位表中,必须是字符串(出于某些专有原因) 按照斯芬克斯关于过滤字符串属性的建议,我尝试如下定义索引:Ruby on rails 思考a中字符串字段上的Sphinx过滤有许多关联,ruby-on-rails,thinking-sphinx,Ruby On Rails,Thinking Sphinx,我需要使用Thinking Sphinx从另一个由多个关联连接的表中筛选字符串字段 比如说一个学生有很多学位。“毕业年”是有问题的筛选字段,它位于学位表中,必须是字符串(出于某些专有原因) 按照斯芬克斯关于过滤字符串属性的建议,我尝试如下定义索引: define_index do has "CRC32(degrees.graduation_year)", :as => :graduation_years, :type => :integer end 运行索引时出现以下错误: E
define_index do
has "CRC32(degrees.graduation_year)", :as => :graduation_years, :type => :integer
end
运行索引时出现以下错误:
ERROR: index 'student_delta': sql_range_query: ERROR: column "degrees.graduation_year" must appear in the GROUP BY clause or be used in an aggregate function
数据库是Postgres 如果我们处理的是has\u many,那么您将希望对该列的结果进行聚合:
has "array_to_string(array_agg(CRC32(degrees.graduation_year)), ',')",
:as => :graduation_years, :type => :multi
如果您使用的PostgreSQL版本早于8.4,请将array\u agg
切换到array\u acum
。前者是8.4及更高版本的一部分,速度更快
然而,如果我们处理的是年份,那么它们的本质就是整数,那么为什么不改为以下内容:
has "array_to_string(array_agg(degrees.graduation_year), ',')",
:as => :graduation_years, :type => :multi
无需对值进行CRC校验,Sphinx将它们视为整数的集合,因此您的过滤器也更简单