我正在思考sphinx 3.1.0和使用MySQL 14.14的rails 3.2.13。
我试图按价格字段对结果进行排序。索引如下:
ThinkingSphinx::Index.define :book, :with => :active_record do
indexes authors.title, :as => :title
indexes price, :sortable => true, :as => :price, :type => :float
end
它的排序如下:
0.00
10.95
12.95
5.00
6.5
9.95
看起来它一直将价格字段视为字符串而不是浮点数或小数。任何帮助将不胜感激。
答案 0 :(得分:0)
indexes
方法用于定义Sphinx字段 - 这些字段始终是字符串数据(无论如何,从Sphinx的角度来看,无论它们是否是数据库中的字符串)。
在这种情况下,Sphinx属性是一个更可靠的选项,因为它具有浮点数据类型的能力,并且可以根据其性质进行排序。这些是使用has
方法定义的:
indexes authors.title, :as => :title
has price, :type => :float
您不需要:sortable
选项(因为所有属性都是可排序的),也不需要:as
选项(因为您直接引用列而不更改名称)。如果基础数据库列类型是浮点数或小数,则甚至可能不需要:type
选项 - 在这两种情况下,Thinking Sphinx会自动将类型设置为:float
。