Хобрук: Ваш путь к мастерству в программировании

Возникли проблемы с сортировкой без группировки/свертывания полей в Solr

Можно ли выполнить составную сортировку в solr без свертывания полей?

Если у меня есть две модели автомобилей, Ford и Chevy, могу ли я сначала отсортировать Ford, цена которого меньше 2000, затем Ford > 2000, а затем модели Chevy? Я хотел бы сделать это без группировки и без применения ценовой сортировки к моделям Chevy.

Например, что-то вроде &sort=Model:"Ford" AND price:[0 TO 2000]

так что я получаю:

Ford 1, $1000
Ford 2, $500
Ford 2, $1500
_________
Ford 3, $3000
Ford 3, $5000
_______
Chevy 1
Chevy 2
Chevy 3
15.07.2014

Ответы:


1

Я немного повозился с этим и придумал решение, основанное на функции 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
Новые материалы

Мой процесс подачи заявки в Школе программного обеспечения и дизайна Тьюринга
Мой последний пост на Medium был в конце августа, и в нем я пообещал написать еще раз, рассказывая историю моего процесса подачи заявки в Школу программного обеспечения и дизайна Тьюринга ...

Генерация ваших собственных удивительных QR-кодов с использованием Python
QR-код (код быстрого ответа) — это разновидность матричных штрих-кодов (или двумерных штрих-кодов), изобретенных в 1994 году японской автомобильной компанией Denso Wave . Штрих-код —..

Прогресс в технологии Трансформеров часть 3
Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

Приключения в Javascript, часть 1
Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

Понимание дженериков в TypeScript: подробное руководство
Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..