Очередь индексации
После интеграции дополнения Search в ваше приложение оно немедленно начинает отслеживать изменения в ваших сущностях. В этом разделе подробно описывается процесс настройки автоматического обновления индексов актуальными данными.
Механизм отслеживания изменений сохраняет очередь действий, которые должны быть выполнены для измененных экземпляров сущностей, в таблице базы данных SEARCH_INDEXING_QUEUE. Бин IndexingQueueManager содержит методы для обработки очереди и отправки измененных данных в Elasticsearch/OpenSearch.
| Крайне важно настроить регулярную обработку очереди индексации, чтобы обеспечить отражение текущих данных в результатах поиска. |
Для планирования периодической обработки очереди вы можете использовать Планировщик задач Quartz, следуя приведенным инструкциям.
Конфигурация Quartz по умолчанию
Дополнение Search поставляется с предварительно настроенной задачей Quartz для регулярной обработки очереди индексации. Чтобы включить эту функцию, выполните следующие шаги:
-
Включите дополнение Quartz в ваш проект, как описано в разделе Quartz / Установка.
-
При необходимости измените выражение CRON. Значение по умолчанию -
0/5 * * * * ?(каждые 5 секунд).jmix.search.indexing-queue-processing-cron = 0/10 * * * * ?
Конфигурация по умолчанию создает и планирует задание с идентификатором IndexingQueueProcessing.
Пользовательская конфигурация Quartz
Если вы предпочитаете использовать пользовательскую конфигурацию Quartz, выполните следующие шаги:
-
Включите дополнение Quartz в ваш проект, как описано в разделе Quartz / Установка.
-
В файле
application.propertiesвключите следующее свойство, чтобы деактивировать конфигурацию по умолчанию:jmix.search.use-default-indexing-queue-processing-quartz-configuration = false -
Разработайте пользовательский класс задачи, который вызывает
IndexingQueueManager.processNextBatch():public class MyCustomQueueProcessingJob implements Job { @Autowired private IndexingQueueManager indexingQueueManager; @Override public void execute(JobExecutionContext context) throws JobExecutionException { indexingQueueManager.processNextBatch(); } } -
Во время работы приложения перейдите в экран Quartz → Quartz jobs, чтобы настроить задачу для класса
MyCustomQueueProcessingJob. -
Альтернативно, если вы хотите настроить задачу во время разработки, зарегистрируйте следующие бины в приложении:
@Bean JobDetail myCustomIndexingQueueProcessingJob() { return JobBuilder.newJob() .ofType(IndexingQueueProcessingJob.class) .storeDurably() .withIdentity("MyCustomIndexingQueueProcessing") .build(); } @Bean Trigger myCustomIndexingQueueProcessingTrigger() { return TriggerBuilder.newTrigger() .forJob(myCustomIndexingQueueProcessingJob()) .startNow() .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); }