Есть ли обходной путь для сортировки по многозначному полю? - PullRequest
0 голосов
/ 13 декабря 2011

Сортировка может быть выполнена по «счету» документа или по любому полю multiValued = «false» indexed = «true», при условии, что это поле не токенизировано (то есть: не имеет Analyzer) или использует Analyzer, который производит только один термин (т. е. использует KeywordTokenizer)

документы: - http://wiki.apache.org/solr/CommonQueryParameters#sort

Моя оригинальная схема (Вы можете считать следующее GROUP-BY): -

  • товаров (id, уникальный)
    • пользователей, которые оставляют комментарии (многозначно)
    • last_comment_date для каждого пользователя (многозначное, один пользователь может сделать несколько комментариев, но фиксируется только дата последнего комментария)

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

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

  • пользователь + продукт (как идентификатор, уникальный)
  • пользователь (одно значение)
  • last_comment_date
  • Продукты

Что означает, что мне (вроде) удается получить список продуктов, комментируемых определенными пользователями,
заказ по last_comment_date,
конечно это приведет к дублированию продуктов
Как продукт будет отображаться в каждом комментарии пользователя.

Любое предложение для имитации группового эффекта.

Между тем я использовал solr 3.1.
Свертывание поля не применяется.

1 Ответ

5 голосов
/ 13 декабря 2011

Сортировка по многозначному полю не является чем-то, что просто ожидает или может быть исправлено.

Это невозможно сделать, потому что это просто не имеет никакого смысла.

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

...