2015-10-13 2 views
0

Я запускаю think-sphinx 3.1.0 и рельсы 3.2.13 с MySQL 14.14.Мышление Sphinx - Сортировка по десятичным полям

Я пытаюсь сортировать результаты по ценовому полю. Индекс выглядит следующим образом:

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

Метод indexes предназначен для определения полей Sphinx, которые всегда являются строковыми данными (с точки зрения Sphinx в любом случае, независимо от того, являются ли они строками в вашей базе данных).

Атрибут Sphinx является гораздо более надежным вариантом в этом случае, так как имеет возможность иметь тип данных с плавающей точкой и сортируется по самой своей природе. Они определяется с помощью метода has:

indexes authors.title, :as => :title 
has price, :type => :float 

Вам не нужны опция :sortable (потому что все атрибуты сортировки), ни :as варианта (потому что вы ссылку на столбец непосредственно и не меняя названия). Опция :type может даже не понадобиться, если базовый тип столбца базы данных является поплавком или десятичной - в этих двух ситуациях Thinking Sphinx автоматически установит для вас тип :float.

+0

спасибо! Это сделал трюк. – fabianraf