Представление результатов Solr объединена с отдельными пользовательскими данными
Вопрос
Я ищу стратегию, чтобы представить рейтинг отдельных пользователей на документе Solr. т.е. Пользователи получают поставить рейтинг 1-5 на документ, и я хочу представить их обратно к ним, как они ищут.
Я могу подумать о двух общих подходах.
Храните рейтинги в моем RDBMS и запрашивайте его после получения результатов Solr и объедините данные в бизнес-логике.
Каким-то образом также хранит эту информацию рейтинга в Solr, чтобы она возвращалась с данными для данного пользователя. Все, что я могу думать о том, что это имена атрибутов с userId и значением рейтинга.
Предполагая, что большая пользовательская база, я волнуюсь, подход 2 может выйти из-под контроля. Как «широко» вы можете пойти с документом Solr? Можете ли вы поставить десятки тысяч атрибутов на документ? Если бы воздействие на производительность все еще оставит подход 2 лучше, чем второй удар на SQL DB (подход 1)?
Есть ли другие подходы, о которых я не думаю?
Решение
Я использовал подход № 1. Поскольку количество рейтингов низкое (вероятно, менее 1000) на пользователя, я просто кэширую все свои рейтинги после входа в систему и хранить в памяти. Затем, когда показывая результаты Solr, очень быстро просто применить рейтинги, где это необходимо.
Это спасает вас от имени базы данных для каждого результата и не слишком сильно болит сервер. Кроме того, когда пользователь обновляет свои рейтинги, вы просто обновляете DB и невернируете кэш. Вам не нужно сделать звонок обновления в документ Solr.
Другие советы
Третий вариант может быть добавление дополнительного индекса SolR, который содержит только идентификатор документа, идентификатор пользователя и счет, а aattribed для этого документа пользователем. Затем он будет очень простым и быстрым, чтобы запросить счет по документу и пользователю.
Я бы пошел с номером 2 и только периодически обновлять рейтинг. Таким образом, вы можете сочетаться в рейтинге в оценку актуальности, рассчитанной Solr.
Я думаю, что это зависит от того, насколько вы похожи на Digg / Reddit, где голосование вверх / вниз резко воздействует, что показано, или если это просто еще один фактор в оценке, например, как новый документ. Если это просто еще один фактор, затем обновите документ один раз в день, неделю или раз в месяц в тихие часы ....