Проблема в том, что, так как счет не является частью документа, когда я
сначала создам индекс, я не знаю, как бы я настроил Lucene
В чем проблема? Просто используйте значение по умолчанию для рейтинга / голосов (вероятно, 0) и позже, когда люди проголосуют, обновите его.
Каждый раз, когда кто-то голосует за статью, нужно ли мне обновлять
Lucene index?
Нет, это может быть дорого и медленно. В вашем приложении, вероятно, будет огромный объем обновлений, а lucene может быть медленным, когда вы будете часто делать сброс на диск. В целом почти для любого полнотекстового поиска обновления в реальном времени не так важны, как полнотекстовый поиск. Поэтому я предлагаю следующую стратегию:
Решение № 1:
1.Создать коллекцию в mongodb, где вы будете хранить все обновления, связанные с lucene:
{
_id,
title,
content,
rating, //increment it
status(new, updated, delete) // you need this for lucene
}
2. После этого вам необходимо создать инструмент, который будет обрабатывать все эти обновления в фоновом режиме (например, раз в 10 минут). Просто помните, что вам нужно сбросить данные на диск, скажем, после 10000 обновлений / вставок / удалений lucene, чтобы быстро обновлять индексы lucene.
При использовании вышеуказанного решения ваши данные могут устареть на 10 минут, но вставка будет быстрее.
Решение № 2:
- Отправлять асинхронные сообщения для каждого обновления, связанного с lucene.
- Обработайте эти сообщения и обновляйте lucene каждый раз, когда приходит сообщение
- Асинхронная обработка очень важна, иначе это может повлиять на производительность приложения.
Я бы пошел с # 1, потому что это должно быть дешевле для сервера.
Выберите то, что вам больше нравится.