Надо чтобы при сортировке документы поднимались выше чем больше юзер на них нажимал в приложении.
Из идей только разве что для каждого юзера создавать отдельный индекс и в нем хранить копию его документов + количество нажатий на них, но мне кажется это будет не особо оптимизированным решением
При поиске документов используя must и/или should эластик инкременирует внутренний скоуп, поэтому получая документы из индекса можно фильтровать по конкретному юзеру, таким образом поиск будет выдавать результат с его учётом, выдавая сперва те документы, которые чаще всего запрашивались.
Ну так а как решить проблему именно персонализации под каждого юзера отдельно?
Эластик бустит документы при их поиске. Если конкретный пользователь ищет документы, то для него эти документы будут иметь приоритетную выдачу. Персонализация реализуется запросом документов для конкретного пользователя используя фильтр.
Окей, давай чуть глубже в бизнес задачу, есть база с едой 100к+ штук (они все общие), и надо для каждого юзера отдельно бустить ту еду, на которую он нажимал больше всего раз, и вот я не понимаю где лучше хранить эту инфу о том сколько и на кого он нажимал
Понял. С общей базой я не смогу подсказать решение. Есть лишь представление с костылём, но в рамках индивидуальной выдачи, т.е. когда один документ в принципе никогда другому юзеру не выпадет. Здесь я бы отправлял "пустой поиск" передавая ключ boost. Но при выдаче общих данных - хз. Остаётся курить ман и/или ждать здесь тех, кто может подсказать. И ответ на этот вопрос я бы сам даже посмотрел на будущее)
Так и храню в эластике онли поисковую инфу + айдихи, но как мне из базы повлиять на эластик
У нас в эластике примитивная сортировка, которая вытаскивает 500 результатов, потом мы это шлифуем моделью и уже дальше нарезаем нужную страницу.
Обсуждают сегодня