索引队列
在应用程序中添加了搜索扩展组件后,会开始自动 监控实体的修改。本章节我们介绍如何设置使用最新的数据自动更新索引。
跟踪修改的机制会在 SEARCH_INDEXING_QUEUE
数据库表保存对修改后实体操作的队列。IndexingQueueManager
bean 包含处理队列的方法,并将修改的数据发送至 ES/OpenSearch。
应设置索引队列的定期处理机制,否则搜索将返回过时的数据。 |
如需实现定期队列处理,可以按照下面的介绍使用 Quartz 任务调度。
默认 Quartz 配置
搜索扩展组件提供一个预定义的 Quartz 任务配置,用于定期处理索引队列。按下列步骤启用:
-
按照 Quartz 章节的说明在项目中安装 安装 扩展组件。
-
按需修改 CRON 表达式。默认值为
0/5 * * * * ?
(5 秒一次)。jmix.search.indexing-queue-processing-cron = 0/10 * * * * ?
默认配置创建并设置 id 为 IndexingQueueProcessing
的调度计划。
自定义 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:
@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(); }
本页是否有帮助?
感谢您的反馈