Это вопрос, основанный на мнении, поэтому мой ответ основан на мнении.
Один из способов сделать это - Предварительный прогрев того, что должно быть показано пользователю.
Решение:
Фоновое задание запускается каждые x часов, которое выбирает все возможные результаты из Elastic Search, используя поисковый запрос с заданными параметрами, такими как возраст, пол, интерес, местоположение и т. Д. Информация о том, чтоПользователь уже видел, может быть сохранен в фильтр Блума .Все записи, которые еще не были просмотрены, могут быть сохранены в кеше, а когда пользователь выбирает следующую запись, возвращается кешированная сущность.Всякий раз, когда пользователь видит одного человека, этот человек добавляется в фильтр Блума, так что тот же человек больше не отображается.
Однако это очень статичный подход и потребует некоторого дополнительного обдумывания
Включение функции суперзвезды
всякий раз, когда A помечает B как суперподобный, независимо отиз всего того, что А добавляется в список B, который будет отображаться.
Всякий раз, когда пакетное задание запускается, если запрашивается эластичный поиск, скорее всего, первые несколько результатов будут такими же, как предыдущий
Это сложная проблема, которую нужно решить, мы можем добавить какой-то случайный порядок или параметр (например, последнее обновление) или сохранить указатель того, сколько пользователей мы уже прошли в последнем задании, и на этот раз начнем с +1 этогоcounter.), который может быть уверен, что всякий раз, когда мы запрашиваем эластичные результаты поиска, они почти случайны, а первые несколько не всегда совпадают.
Пакетное задание может быть запущено при необходимости.
Допустим, пользователь меняет свои предпочтения / местоположение, мы должны иметь возможность аннулировать кэш и заново согреть кэш с новыми результатами..