Очередь индексации

После интеграции дополнения Search в ваше приложение оно немедленно начинает отслеживать изменения в ваших сущностях. В этом разделе подробно описывается процесс настройки автоматического обновления индексов актуальными данными.

Механизм отслеживания изменений сохраняет очередь действий, которые должны быть выполнены для измененных экземпляров сущностей, в таблице базы данных SEARCH_INDEXING_QUEUE. Бин IndexingQueueManager содержит методы для обработки очереди и отправки измененных данных в Elasticsearch/OpenSearch.

Крайне важно настроить регулярную обработку очереди индексации, чтобы обеспечить отражение текущих данных в результатах поиска.

Для планирования периодической обработки очереди вы можете использовать Планировщик задач Quartz, следуя приведенным инструкциям.

Конфигурация Quartz по умолчанию

Дополнение Search поставляется с предварительно настроенной задачей Quartz для регулярной обработки очереди индексации. Чтобы включить эту функцию, выполните следующие шаги:

  1. Включите дополнение Quartz в ваш проект, как описано в разделе Quartz / Установка.

  2. При необходимости измените выражение CRON. Значение по умолчанию - 0/5 * * * * ? (каждые 5 секунд).

    jmix.search.indexing-queue-processing-cron = 0/10 * * * * ?

Конфигурация по умолчанию создает и планирует задание с идентификатором IndexingQueueProcessing.

Пользовательская конфигурация Quartz

Если вы предпочитаете использовать пользовательскую конфигурацию Quartz, выполните следующие шаги:

  1. Включите дополнение Quartz в ваш проект, как описано в разделе Quartz / Установка.

  2. В файле application.properties включите следующее свойство, чтобы деактивировать конфигурацию по умолчанию:

    jmix.search.use-default-indexing-queue-processing-quartz-configuration = false
  3. Разработайте пользовательский класс задачи, который вызывает IndexingQueueManager.processNextBatch():

    public class MyCustomQueueProcessingJob implements Job {
    
        @Autowired
        private IndexingQueueManager indexingQueueManager;
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            indexingQueueManager.processNextBatch();
        }
    }
  4. Во время работы приложения перейдите в экран Quartz → Quartz jobs, чтобы настроить задачу для класса MyCustomQueueProcessingJob.

  5. Альтернативно, если вы хотите настроить задачу во время разработки, зарегистрируйте следующие бины в приложении:

    @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();
    }