Ruby on rails 思考a中字符串字段上的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

我需要使用Thinking Sphinx从另一个由多个关联连接的表中筛选字符串字段

比如说一个学生有很多学位。“毕业年”是有问题的筛选字段,它位于学位表中,必须是字符串(出于某些专有原因)

按照斯芬克斯关于过滤字符串属性的建议,我尝试如下定义索引:

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将它们视为整数的集合,因此您的过滤器也更简单