我的应用程序有MySql数据库。我实现了solr搜索并使用dataimporthandler(DIH)将数据从数据库索引到solr。我的问题是:有没有办法,如果数据库得到更新,那么我的solr索引会自动获取数据库中添加的新数据的更新。。这意味着每次数据库表发生变化时我都不需要手动运行索引进程。如果是,那么请告诉我如何实现这一点。
答案 0 :(得分:4)
我认为Solr中没有可能让你在DB发生任何更新时索引数据。
但是,在Triggers的帮助下,有可能存在从触发器运行外部应用程序的可能性。
写一个CRON来触发PHP
脚本,该脚本从数据库读取并在Solr
中对其进行索引。为CRUD
操作编写一个触发器(调用此脚本)并将其转储到DB中,因此,每当DB发生某些事情时,此触发器将调用上述脚本并可能发生索引。
请参阅:
Invoking a PHP script from a MySQL trigger
自动安排:
有关日程安排的详情,请参阅此帖How can I Schedule data imports in Solr。第二个答案,解释了如何使用Cron导入。
答案 1 :(得分:1)
由于您使用DataImportHandler初始将数据加载到Solr中...您可以使用Delta Import Handler从cron作业创建curl,以定期将数据库中的更改添加到索引中。此外,如果您需要更多实时更新,如@Rakesh建议的那样,您可以在数据库中使用触发器,并启动对Delta DIH的卷曲调用。
答案 2 :(得分:1)
您可以使用浏览器和任务管理器导入数据。 在Windows服务器上执行以下步骤... 转到管理工具=>任务计划 点击"创建任务"
现在将使用TAB打开Create Task屏幕 一般来说,触发,动作,条件设置。
在genral选项卡中输入任务名称" Solrdataimport"并在描述中输入"导入mysql数据"
现在转到触发器选项卡CLick new in Setting check Daily.In高级设置每次重复任务...把时间放在任何你想要的地方。点击确定
现在转到Actions按钮单击new Button IN设置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并单击OK
使用以上所有过程数据导入将自动运行。如果停止Imort过程,请按照以上所有过程进行操作,只需更改程序/脚本" taskkill"取代" C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe"在“操作”选项卡下在参数中输入" f / im chrome.exe"
根据要求设置触发时间
答案 3 :(得分:0)
您正在寻找的是“delta-import”,其他很多帖子都有关于这些内容的信息。我创建了一个Windows WPF应用程序和服务,以便在定期计划中向Solr发出命令,因为如果你有很多核心/环境,使用CRON作业和任务计划程序有点难以维护。
https://github.com/systemidx/SolrScheduler
您基本上只是放入指定文件夹中的JSON文件,它将使用REST客户端向Solr发出命令。