Как подробно описано в руководстве по Hibernate Search, раздел 3.6.1, если вы используете аннотации (теперь по умолчанию), слушатели, запускающие индексацию в хранилище, регистрируются по умолчанию:
Поиск Hibernate включен из
окно при использовании аннотаций Hibernate
или Hibernate EntityManager. Если для
по какой-то причине вам нужно отключить его,
задавать
hibernate.search.autoregister_listeners
в ложь.
Пример того, как включить их вручную:
hibConfiguration.setListener("post-update", new FullTextIndexEventListener());
hibConfiguration.setListener("post-insert", new FullTextIndexEventListener());
hibConfiguration.setListener("post-delete", new FullTextIndexEventListener());
Все, что вам нужно сделать, это пометить сущности, которые вы хотите проиндексировать, с помощью
@Indexed(index = "fulltext")
аннотации, а затем выполните детальную аннотацию полей, как подробно описано в руководстве пользователя.
Таким образом, вы не должны ни запускать индексацию вручную при хранении, ни повторно запускать индексацию при запуске приложения, если у вас нет сущностей, которые были сохранены до того, как индексация была включена.
У вас могут возникнуть проблемы с производительностью, когда вы сохраняете объект, который имеет «вложение», и поэтому вы индексируете его в той же области транзакции, в которой хранится объект. Смотрите здесь:
Поиск в спящем режиме и извлечение текста в автономном режиме
для решения, которое решает эту проблему.