Я немного повозился с этим и придумал решение, основанное на функции query(), так как вы можете использовать ее вместе с сортировкой. Я не уверен в производительности, и в зависимости от количества документов в вашем индексе это может быть не важно, поэтому единственный способ — попробовать и посмотреть, работает ли он. Я использовал name
и price
в качестве двух полей в схеме, которые, я думаю, будут отображаться в ваших полях Model
и price
.
Принцип работы сортировки заключается в том, что каждое предложение оценивается по порядку, так что первое описание сортировки выполняется первым, затем следующее, если есть ничья, и так далее.
Я удалил экранирование URL и немного отформатировал все:
sort=query($sq1,0) asc,query($sq2,0) asc
&sq1=name:Ford* AND price:[0 TO 1500]
&sq2=name:Ford*
Это означает, что первая сортировка выполняется для запроса, указанного в параметре URL-адреса sq1=
, но если есть ничья (которая будет, если совпадения нет), будет выполнен запрос, указанный в sq2=
($sq1
и $sq2
). относится к ним как к запросам, и Solr сделает простую замену перед вычислением функции query()
).
Я не указал порядок сортировки по умолчанию, но вы можете добавить name asc
в качестве сортировки по умолчанию. 0
в качестве второго аргумента query()
— это значение, которое сортировка будет использовать, если нет совпадения из запроса (в противном случае будет использоваться оценка из запроса). Вы можете ввести это значение в product()
и умножить на цену, чтобы при необходимости отсортировать каждое из «сегментов» по price
.
16.07.2014