Массовая индексация не должна выполняться часто: вам нужно будет делать это один раз при первом развертывании, а затем каждый раз, когда вы изменяете сопоставление обратно несовместимым способом (добавление новых полей в существующие сущности, изменениеанализатор на поле, ...).Другие развертывания не требуют переиндексации.
Таким образом, вы не должны рассматривать переиндексацию как часть запуска сервера приложений, а скорее как часть процесса развертывания.Как вы могли бы увидеть, например, выполнение ресурсоемкого сценария SQL в вашей базе данных для обновления вашей схемы.
При этом да, массовая индексация может быть продолжительной в зависимости от объема данных, которые необходимо индексировать,Однако это определенно не должно приводить к тайм-аутам соединения с БД.Ключ заключается в правильной настройке переиндексации.
В вашем случае вам следует позаботиться, в частности, об ограничении количества соединений, используемых индексатором массы.В игру вступят две настройки: typesToIndexInParallel
и threadsToLoadObjects
.
Например:
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
fullTextEntityManager.createIndexer()
.typesToIndexInParallel( 2 )
.threadsToLoadObjects( 5 )
.startAndWait();
Это указывает массовому индексатору индексировать 2 типа параллельно и использовать 5 параллельныхпотоки для загрузки объектов каждого типа.К этому вы должны добавить один поток для каждого типа, чтобы загрузить идентификаторы объекта.Поскольку каждому потоку требуется одно соединение с базой данных, это означает, что индексатор массы будет использовать 2 * (5 + 1) = 12
соединений.
По умолчанию используется 1 тип параллельно, 6 потоков загрузки, что означает 1 * (6 + 1) = 7
соединений.
Если вам нужно использовать меньше соединений, чтобы другие приложения могли по-прежнему получать доступ к базе данных, либо увеличьте число одновременных соединений, которые принимает БД, до значения, значительно превышающего 7, либо настройте массовый индексатор для использования меньшего количества соединений.Это означает, однако, что массовое индексирование займет больше времени.
Более подробную информацию вы найдете в разделе о массовом индексировании в документации и здесь, в частности, для соединений JDBC..