Солнечное пятно, целочисленное значение order_by полностью нарушено

У меня проблема с использованием драгоценного камня солнечных пятен с solr

Я использую последний гем из git (2.1.1 также пробовал с 2.1.0), я пробовал версии solr - 3.2, 3.5, 4.2, 4.9

Проблема в том, что порядок по целочисленному значению совершенно не работает.

Мой код:

   @ads = Ad.solr_search do
     paginate :page => params[:page], :per_page => 10000 #just for debug, not working with 25 as well
     order_by :priority, :desc
   end

В модели солнечное пятно инициализируется следующим кодом:

searchable do
  text :search_name
  text :search_description
  integer :id
  integer :state_id
  integer :city_id
  integer :district_id
  boolean :moderated
  integer :category_id
  integer :priority
  integer :price_index
  latlon(:location) { Sunspot::Util::Coordinates.new(lat, lon) }
  integer :ad_type_id
  boolean :active
  time :created_at
end

В результате полный бардак - http://i.imgur.com/Y7gazWw.png

Я ожидаю, что объявления с наивысшим приоритетом будут отображаться первыми, но вместо этого они отображаются в случайном порядке на последней (!) странице.

Что интересно - когда я применяю больше фильтров - например, по цене, city_id, state_id и еще чему-то - он либо начинает работать правильно, либо, по крайней мере, не так сильно глючит (например, приоритетные записи, показанные на первой странице, но все же некоторые из них перемешаны). Но чем меньше фильтров я применяю, тем больше сортировка глючит, вплоть до полной поломки.

Я пробовал гуглить похожие проблемы, но ничего не нашел, также пробовал все, что могло повлиять на проблему - разные версии solr, разные версии gem, пытался немного изменить код (однако не так много, чтобы воспроизвести проблему 3 строк кода достаточно) - ничего не изменило поведение. Я переиндексировал, наверное, около 30 раз - каждый раз пробовал разные версии.

Может кто подскажет как решить или хотя бы что еще можно попробовать

Заранее спасибо!


person Community    schedule 02.08.2014    source источник


Ответы (2)


У меня такая же проблема. Заказ по целочисленному типу не работает.

Поэтому я использую немного хитрый способ. Это не очень хорошее решение. но это будет временная альтернатива до исправления ошибки.

Порядок по типу времени работает хорошо. поэтому целое число преобразуется во время.

Мой код:

searchable do
  ...
  integer :priority
  time(:priority_to_time){DateTime.new(2014, 1, 1, 0, 0, 0) + self.priority}
end

В коде поиска

Post.search do
  ...
  order_by(:priority_to_time, :desc)
end

Да, это очень странный код. но это работает.

Если у кого-то есть более хорошая идея, пожалуйста, посоветуйте нам.

person Daeyong Han    schedule 05.08.2014
comment
Sunspot когда-либо обращался к этому? - person BJ McDuck; 26.03.2015
comment
большое спасибо, у меня сработало, не удалось использовать порядок в целочисленных полях. - person Sahil; 19.11.2015

По умолчанию Sunspot упорядочивает результаты по «оценке», поэтому добавьте дополнительные строки:

order_by(:score, :desc)
order_by :priority, :desc

Это сработает

person Subha    schedule 29.01.2017