我的应用程序有 MySql 数据库。我实现了 solr 搜索并使用 dataimporthandler(DIH) 将数据库中的数据索引到 solr。我的问题是:如果数据库得到更新,那么我的 solr 索引是否会自动更新数据库中添加的新数据。. 这意味着每次数据库表更改时我都不需要手动运行索引过程。如果是,请告诉我如何实现这一点。
4 回答
我不认为 Solr 有可能让您在数据库发生任何更新时索引数据。
但是可能有一些可能性,例如,在触发器的帮助下- 有可能从触发器运行外部应用程序。
编写一个 CRON 来触发PHP
脚本,该脚本从数据库中读取并将其索引到Solr
. 编写一个触发器(调用此脚本)进行CRUD
操作并将其转储到 DB 中,因此,每当 DB 发生某些事情时,此触发器将调用上述脚本并可能发生索引。
请参见:
自动调度:
有关调度的更多信息,请参阅这篇文章如何在 Solr 中安排数据导入。第二个答案解释了如何使用Cron导入。
由于您最初使用 DataImportHandler 将数据加载到 Solr... 您可以创建一个Delta Import Handler,该处理程序使用curl从 cron 作业执行,以定期将数据库中的更改添加到索引。此外,如果您需要更多实时更新,正如@Rakesh 建议的那样,您可以在数据库中使用触发器并启动对 Delta DIH 的 curl 调用。
您可以使用浏览器和任务管理器导入数据。在 Windows 服务器上执行以下步骤...转到管理工具 => 任务计划单击“创建任务”
现在将打开一个创建任务屏幕,其中包含选项卡常规、触发器、操作、条件、设置。
在 genral 选项卡中输入任务名称“Solrdataimport”,在描述中输入“Import mysql data”
现在转到触发器选项卡在设置检查每日单击新。在高级设置重复任务每隔...把时间放在那里任何你想要的。单击确定
现在转到 Actions 按钮单击 new Button IN setting put Program/Script "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 这是 chrome 浏览器的安装路径。在 Add Arguments 中输入http: //localhost:8983/solr/#/collection1/dataimport//dataimport?command=full-import&clean=true 然后点击确定
使用上述所有过程数据导入将自动运行。如果停止 Imort 过程,请遵循上述所有过程,只需将程序/脚本“taskkill”更改为“C:\Program Files (x86)\Google\Chrome\Application \chrome.exe" 在 Actions 选项卡下 在参数中输入 "f /im chrome.exe"
根据需求设置触发时序
您正在寻找的是“delta-import”,许多其他帖子都包含有关此内容的信息。我创建了一个 Windows WPF 应用程序和服务,以定期向 Solr 发出命令,因为如果您有很多内核/环境,使用 CRON 作业和任务计划程序有点难以维护。
https://github.com/systemidx/SolrScheduler
您基本上只需将 JSON 文件放入指定文件夹中,它将使用 REST 客户端向 Solr 发出命令。