Solr (Солнечное пятно) условный order_by

Я использую гем Solr sunspot в своем приложении Rails. Что у меня сейчас: order_by(:some_time, :desc). Что мне нужно сделать, это:

Если значение столбца :some time находится в пределах последнего часа, то все записи с этим условием упорядочены по столбцу :status, в противном случае упорядочены по :some_time

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

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


person alv_721    schedule 15.05.2017    source источник
comment
например если результаты содержат 100 записей и 25 из них удовлетворяют условию, то вы хотите, чтобы 25 были отсортированы по status, а остальные по sometime или все записи отсортированы по status?   -  person Md. Farhan Memon    schedule 15.05.2017
comment
@Md.FarhanMemon, если 25 из них удовлетворяют условию (:some_time > Time.now - 1.hour), то заказывайте по :status и :some_time, все остальные только по :some_time   -  person alv_721    schedule 15.05.2017


Ответы (1)


Камень солнечных пятен позволит вам сказать order_by_function, чтобы использовать возможность упорядочения функций (ищите "Поиск по функции"). Так что мне кажется, что вы могли бы сделать это или что-то в этом роде (не проверено):

order_by_function(:map, [:ms, [:NOW, :some_date], '0', '3600000', '0'], :status)

Другими словами: найдите возраст документа в миллисекундах, и все, что в пределах 1 часа, «сгладит» до 0 (так что все они связаны). Разорвите связи, отсортировав по статусу. Кажется, это должно сработать, верно?

person Paul A Jungwirth    schedule 17.05.2017