如何自动从数据库中索引solr中的数据
Posted
技术标签:
【中文标题】如何自动从数据库中索引solr中的数据【英文标题】:how to index data in solr from database automatically 【发布时间】:2011-09-21 18:33:32 【问题描述】:我的应用程序有 mysql 数据库。我实现了 solr 搜索并使用 dataimporthandler(DIH) 将数据库中的数据索引到 solr。我的问题是:如果数据库更新,我的 solr 索引是否会自动更新数据库中添加的新数据。。这意味着每次数据库表更改时我都不需要手动运行索引过程。如果是,请告诉我如何实现这一点。
【问题讨论】:
【参考方案1】:我不认为 Solr 有可能让您在数据库发生任何更新时索引数据。
但也有可能,例如,在 Triggers 的帮助下 - 有可能从触发器运行外部应用程序。
编写一个 CRON 来触发 php
脚本,该脚本从 DB 中读取并在 Solr
中对其进行索引。为CRUD
操作编写一个触发器(调用此脚本)并将其转储到数据库中,因此,每当数据库发生故障时,此触发器将调用上述脚本并进行索引。
请看:
Invoking a PHP script from a MySQL trigger
自动调度:
请参阅此帖子How can I Schedule data imports in Solr,了解有关日程安排的更多信息。第二个答案,解释了如何使用Cron 导入。
【讨论】:
Rakesh:如何编写 CRON 来触发从数据库读取数据并将其索引到 solr 的脚本【参考方案2】:由于您最初使用 DataImportHandler 将数据加载到 Solr... 您可以创建一个 Delta Import Handler,该 Delta Import Handler 使用 cron 作业中的 curl 执行,以定期将数据库中的更改添加到索引中。此外,如果您需要更多实时更新,正如@Rakesh 建议的那样,您可以在数据库中使用触发器并启动对 Delta DIH 的 curl 调用。
【讨论】:
我应该如何创建一个使用 curl 执行的 DeldaImportHandler 并解决我的问题?? @Romi,如果您查看我提供的链接中的示例,它会讨论创建一个增量查询,该查询可以通过数据库中的 lasttimestamp 列(或类似的东西)检测数据库中的更改。此外,您可以看到这个使用完整 DIH 作为增量的示例 - wiki.apache.org/solr/DataImportHandlerFaq#fullimportdelta 一旦您完成了这项工作,您可以使用 curl 通过 http 调用执行它,并通过 cron 安排 curl 调用。希望这会有所帮助。 在 windows 环境中我需要执行这个 url:localhost:8983/solr/db/dataimport?command=full-import,我如何使用 curl 或 windows 中的任何其他命令来执行此操作 您应该转到 Curl 的主页 - curl.haxx.se 并查看常见问题解答页面。这应该为您指明正确的方向。【参考方案3】:您可以使用浏览器和任务管理器导入数据。 在 windows 服务器上执行以下步骤... 转到管理工具 => 任务计划 点击“创建任务”
现在将使用 TAB 打开创建任务屏幕 常规、触发器、操作、条件、设置。
在 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" 在参数中输入 "f /im chrome.exe"
根据需求设置触发时机
【讨论】:
【参考方案4】:您正在寻找的是“delta-import”,许多其他帖子都包含有关此内容的信息。我创建了一个 Windows WPF 应用程序和服务,以定期向 Solr 发出命令,因为如果您有很多内核/环境,使用 CRON 作业和任务计划程序有点难以维护。
https://github.com/systemidx/SolrScheduler
您基本上只需将 JSON 文件放入指定文件夹中,它将使用 REST 客户端向 Solr 发出命令。
【讨论】:
以上是关于如何自动从数据库中索引solr中的数据的主要内容,如果未能解决你的问题,请参考以下文章