Solr динамическая сортировка

У нас есть веб-сайт, на котором вы можете искать среди большого количества товаров из разных магазинов. Скажем, у нас есть 5 продуктов на странице результатов, и 10 лучших совпадений для поиска имеют одинаковую оценку. 8 товаров принадлежат одному магазину (А), а два других — двум другим магазинам (В, С).

То, что мы часто получаем, это (буква, указывающая на продукт этого магазина)

  1. A
  2. A
  3. A
  4. A
  5. A

---- вторая страница результатов ----

  1. A
  2. B
  3. A
  4. C
  5. A

но то, что мы хотим получить, это что-то вроде этого:

  1. A
  2. C
  3. B
  4. A
  5. A

---- вторая страница результатов ----

  1. A
  2. A
  3. A
  4. A
  5. A

Написание функционального запроса кажется одним из вариантов http://www.solrtutorial.com/custom-solr-functionquery.html

Каков наилучший способ добиться этого?


person venkat    schedule 03.09.2013    source источник
comment
Каковы критерии сортировки в вашем понимании? Можешь выразить это выражением?   -  person Srikanth Venugopalan    schedule 03.09.2013
comment
Логика сортировки должна знать количество (resultshopitems) для равномерного распределения результатов. Есть ли способ получить количество (resultshopitems) с помощью выражения?   -  person venkat    schedule 03.09.2013


Ответы (1)


Вы можете сгруппировать результаты по магазинам, используя свертывание полей, и отобразить результат либо в виде группы или плоского списка (в зависимости от того, как вы этого хотите).

Еще один трюк, который я видел, чтобы помочь пользователям увидеть результаты из нескольких групп, — это использование Facets. У вас может быть боковая панель (или что-то подобное), которая делает две вещи:

  1. По умолчанию он сообщает пользователю, что в результате есть другие критерии фильтрации (например, магазины). Это очень помогает, когда результат разбит на страницы.

  2. При наличии аспектов пользователь может выбрать любые критерии, которые он/она хочет применить, тем самым освобождая вас от реализации сложной логики, основанной на сценариях.

Подробнее о фасетировании читайте здесь.

Редактировать:

Если вам нужно использовать пользовательскую логику сортировки, вы можете записать ее с помощью функций и использовать в сортировке при запросе Solr. Здесь ссылка из документации.

person Srikanth Venugopalan    schedule 03.09.2013
comment
Спасибо за ответ, эти возможные варианты я рассматривал. Но мы предпочитаем иметь собственную логику сортировки. Любые мысли о запросе функции cutom для реализации этого? - person venkat; 03.09.2013
comment
Да, если вам нужна пользовательская логика, то создание функции и передача ее в качестве параметра sort работает. Обновил мой ответ - person Srikanth Venugopalan; 03.09.2013
comment
Но я хочу иметь пользовательскую логику сортировки, которая не может быть достигнута с помощью доступных методов функционального запроса. - person venkat; 03.09.2013
comment
Это то, о чем я спрашивал ранее - если вы можете использовать свою логику сортировки в виде выражения (математической формулы), вы можете проверить, является ли запрос функции вариантом. В противном случае сложно дать ответ, не понимая, как именно вы стремитесь сортировать результаты. - person Srikanth Venugopalan; 03.09.2013