Laravel Scout + Потоки Был ли у кого подобный опыт?
В общем такой вопрос. На проекте юзается Laravel Scout + Обёртка над ним для Elasticsearch. Всё окей. Вопросов нет кроме одного нюанса. Долго заполнения индекса. При обновлениях в индексе приходится перезаполнять индекс. Записей в индексе уже 8000+. Обновляет индекс минут 10-15. Решение то вроде простое - разбить к примеру 8000 записей на 4 части к примеру и закинуть их обновлять в 4 потока одновременно. Но перекопал документацию по скауту и толком ничего не нашёл в его возможностях обновлять индекс таким образом. Я так понимаю что только самому писать обновление? Разбить на 4 группы запускать 4 джоба запулив их в Фасад Bus дабы трекать состояние
Евгений, в эластике можно переключать индексы. Пока создается новый старый продолжает работать и по нему ижет поиск. Как только новый индекс заполнен то переключаетесь на него, а старый дропаете. Тем самым никакого простоя быть не дожно. Второй момент, это то что эластик поддеживает добавление в уже существуещий индекс, поэтому полная переиндексация это возможно некий костыль. По крайней мере если это для вас стало проблемой.
Мне ещё конечно не очень нравится что при апдейтинге он полностью обращается к массиву searchable. Если редактируется 2 поля в модели, он всё равно обновляет всё полностью. Но это уже полбеды
Евгений, ну так может быть и пусть, особо не трогать. Продакшн пусть себе долго обновляет индекс, часть деплоя при определенных ситауциях, в целом норм если есть такие задачи что долго делаются (обновление индексов, регенерация изображений и тп и тд, разные могут быть сценарии), тем более если это выведено в отдельный сервис будет. А на рабочей просто не индексировать в целом.
Александр Талалаев, Пока что настроил супервизор на 8 потоков разбиваю на потоки очереди через фасад Bus. + трудоёмкий индекс разбил на части и обновляю части параллельно