在Thinking_Sphinx上遇到一些麻烦。致白:
我有一个餐厅模型和一个具有以下关系的评论模型:
Restaurant Has_many Reviews through relationships
Review belongs_to Restaurant through relationships
每个评论都有一个十进制系统的评级,增量为0.5。
我在Thinking Sphinx中搜索餐馆,并将评论评级设置为属性如下(我这样做,所以结果按评级值的降序排序):
has reviews.rating, :as => :review_rating, :type => :float
这是我在终端中对Thinking Sphinx进行索引时得到的错误:
indexing index 'restaurant_core'...
ERROR: source 'restaurant_core_0': expected attr type ('uint' or 'timestamp' or 'bigint') in sql_attr_multi, got 'float review_rating from field'.
ERROR: index 'restaurant_core': failed to configure some of the sources, will not index.
有趣的故事:当我将:type更改为:integer时,如下所示:
has reviews.rating, :as => :review_rating, :type => :integer
我没有收到错误。
我正在运行Ruby on Rails 3.2.11,Thinking Sphinx 3.0.1,Ubuntu 12.10
非常感谢任何帮助。
答案 0 :(得分:0)
您的问题是,Restaurant
有Review
个reviews.rating
,但您将has "AVG(reviews.rating)", :as => :review_rating, :type => :float
编入索引为单个值。您应该将索引更改为计算评论的某些聚合(例如,平均值,中位数,最高或最低),或使用多值属性(MVA)。但是,MVA只能是整数,时间戳或布尔值。
例如,要将评级的平均值作为属性值,这样的事情应该有效:
sphinx.conf
当然,确切的代码取决于您的表名等。如果您遇到问题,请检查生成的{{1}}文件。