我正在尝试在我们的 ACF 2016 安装附带的 Solr 版本上从我们的 MySQL 数据库中索引表。 Adobe 的文档指出我需要使用 Solr 的数据导入处理程序来执行此操作,他们说这需要修改 solrconfig.xml
并创建一个 data-config.xml
文件。
这不能按原样工作。进一步阅读使我相信我需要:
- 下载一个
solr-dataimporthandler.jar
- 复制 ColdFusion 的 MySQL 连接器,以便 Solr 可以使用它
- 编辑
solrconfig.xml
以说明这些更改 - 创建一个
data-config.xml
到目前为止,我是否正确?因为我一直在尝试这样做,并且当我尝试重新加载我的集合时,CF 管理员给我一个错误“处理‘重新加载’操作时出错”。 Solr 管理员本身说:
org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler'.
我对此了解不多,但我觉得 Solr 无法加载我添加的两个 jar 文件中的一个或两个。如果是这样的话,那么:
- 我应该编辑什么
solrconfig.xml
?我一直在研究我设置的特定集合中的那个,以便将我们的数据库编入索引。 - 我需要这两个 jar 吗?我应该把它们放在哪里?我在
C:\ColdFusion2016\cfusion\jetty\lib
和我在C:\ColdFusion2016\cfusion\jetty\multicore\lib
设置的自定义库中尝试过它们. - 一些来源(不是 Adobe)说我需要将 lib 指令添加到
solrconfig.xml
,而其他人则说 Solr 的“root”目录中的 lib 中的任何 jar 都会自动添加。这两种方法我都试过了,但出现了上述错误。 - 还有其他来源说我需要将它们添加到我的类路径中。如果不需要,我会犹豫要不要在我们的服务器上执行此操作。
我知道这个问题无处不在,但我让自己很困惑,我真的很感激任何帮助或插入正确的方向。我希望我只是在某个地方犯了一些愚蠢的错误,因为我认为它不应该这么复杂!
请注意,Solr 本身运行良好,我设置的一些 PDF 索引目录的集合正在运行,没有问题。其他集合中的 solrconfig.xml
文件都没有任何请求处理程序或引用数据导入处理程序的库。
提前致谢!感谢您阅读所有这些内容! :-)
最佳答案
好吧,我终于让它工作了。正如所怀疑的那样,根本问题是 Solr 没有找到 MySQL 连接器和数据导入处理程序 jar。为了任何其他可能偶然发现这一点的人的利益,这就是我所做的。我们使用 ACF 附带的 Adobe ColdFusion 2016 和 Solr 5.2.1。
您确实需要 MySQL 连接器和数据导入处理程序 jar。我使用了一个名为 solr-dataimporthandler-5.2.1.jar 的版本匹配数据导入处理程序,我下载了它 from here .确保在"file"部分选择 jar 文件以开始下载。对于 MySQL 连接器,我只是复制了来自 ColdFusion 的那个。我的名为 mysql-connector-java-5.1.38-bin.jar,对于我的 CF 安装,它位于 C:\ColdFusion2016\cfusion\lib。
我了解到 Solr 会自动查找位于特定位置的 jar。无需 lib 指令或任何文件编辑。对我来说,我在我的 Solr 实例中创建了一个名为“lib”的文件夹,该文件夹位于 C:\ColdFusion2016\cfusion\jetty\multicore 并将 jar 放在那里。因此,新 jars 的完整路径是 C:\ColdFusion2016\cfusion\jetty\multicore\lib,但您不需要编辑任何文件来说明这一点。
您确实需要编辑 solrconfig.xml 以说明数据导入处理程序。对我来说,唯一能让它起作用的方法是为每个集合编辑 solrconfig.xml。编辑任何其他各种版本都行不通。因此,对于我之前在 CF Admin 中创建的名为“dmfile”的集合,要编辑的 solrconfig.xml 位于 C:\ColdFusion2016\cfusion\jetty\multicore\collections\vfs_dmfile\conf。我将以下内容添加到其他请求处理程序所在部分的文件中:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
这就是我需要为 solrconfig.xml 做的所有事情。
- 在同一个目录中,创建一个 data-config.xml 文件。这是我的:
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/myDatabase"
user="myUsername"
password="myPassword"/>\
<document>
<entity name="dmfile" query="SELECT filename, ObjectID from dmfile WHERE status = 'approved'">
<field column="filename" name="filename" />
<field column="ObjectID" name="uid" />
<field column="status" name="dmfile_status" />
</entity>
</document>
开始时,我试图让事情变得简单。请注意实体名称如何与集合名称相匹配。我将数据库表 (ObjectID) 中的唯一 ID 与 Solr 具有的标准唯一 ID 字段 (uid) 进行了匹配。 “列”是我们数据库中的列,“名称”是我希望 Solr 使用的任何名称。您的数据库当然可能会有所不同。
最后我编辑了 schema.xml,也在同一目录中:
<field name="filename" type="string" indexed="true" stored="true" required="false" /> <field name="dmfile_status" type="string" indexed="true" stored="true" required="false" />
“名称”属性需要与您在 data-config.xml 中设置的任何内容相匹配。请注意,我没有为 uid 添加字段——默认情况下它已经在 schema.xml 中。
我在 Windows 服务器上,所以我转到 services.msc 并重新启动了 ColdFusion 2016 Add-On Services 服务。 注意: 重新启动 ColdFusion 本身对我不起作用。我需要重新启动 ColdFusion 2016 附加服务,仅此而已。
我终于可以重新加载我的收藏了,并且(更重要的是)我可以在 http://localhost:8989/solr/#/ 的 Solr 管理中浏览核心。 .我可以在“核心选择器”下拉列表中选择我的 dmfile 核心,并且能够选择 DataImportHandler 而不会出现错误。
这就是我让它为我工作的方式。我发现我需要为我希望连接到 MySQL 的每个核心重复步骤 3-6。一些文档指出您至少可以在全局级别执行第 3 步,但这对我来说根本不起作用。
无论如何,我花了很长时间才弄清楚所有这些,所以希望这能帮助其他像我一样被困住的 CFers。
关于mysql - 将数据导入处理程序添加到 ColdFusion 2016 Solr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51716006/