我正在尝试从ACF 2016安装随附的Solr版本的MySQL数据库中索引表。 Adobe的文档指出,我需要使用Solr的数据导入处理程序来执行此操作,他们说这需要修改solrconfig.xml
和创建data-config.xml
文件。
这不能按原样工作。进一步的阅读使我相信我需要:
solr-dataimporthandler.jar
solrconfig.xml
以说明这些更改data-config.xml
我到目前为止是否正确?因为我一直在尝试,并且在尝试重新加载集合时,CF管理员给我一个错误“错误处理'reload'操作。” Solr管理员本身说:
org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler'.
我对此不太了解,但听起来像Solr无法加载我添加的两个jar文件中的一个或两个。如果是这样,那么:
solrconfig.xml
?我一直在为建立数据库索引而建立的特定集合中的一个。C:\ColdFusion2016\cfusion\jetty\lib
和我在C:\ColdFusion2016\cfusion\jetty\multicore\lib
设置的自定义库中尝试过它们。solrconfig.xml
添加lib指令,而另一些人说Solr的“根”目录中lib中的任何jar都会自动添加。我已经尝试了两种方法,并得到了上述错误。我知道这个问题无处不在,但是我很困惑,我将非常感谢任何帮助或朝着正确方向前进。我希望我只是在某个地方犯了一些愚蠢的错误,因为我不认为这应该这么复杂!
请注意,Solr本身运行良好,我设置的一些集合表明PDF的索引目录正在运行,没有麻烦。其他集合中的solrconfig.xml
文件中都没有任何引用数据导入处理程序的请求处理程序或库。
提前谢谢!感谢您阅读所有这些内容! :-)
答案 0 :(得分:2)
好的,所以我终于开始工作了。疑似,根本问题是Solr没有找到MySQL连接器和数据导入处理程序jar。为了使任何可能偶然发现此问题的人受益,这就是我所做的。我们正在使用ACF随附的Adobe ColdFusion 2016和Solr 5.2.1。
您确实需要MySQL连接器和数据导入处理程序jar。我使用了与版本匹配的数据导入处理程序,称为solr-dataimporthandler-5.2.1.jar,并下载了from here。确保在“文件”部分中选择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,然后将罐子放在其中。因此,新罐子的完整路径是C:\ ColdFusion2016 \ cfusion \ jetty \ multicore \ lib,但您无需编辑任何文件即可解决这个问题。
您确实需要编辑solrconfig.xml以说明数据导入处理程序。对我来说,使它起作用的唯一方法是为每个集合编辑solrconfig.xml。编辑其他各种版本均无效。因此,对于我之前在CF管理员中创建的名为“ 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。
<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具有的(uid)的标准唯一ID字段进行了匹配。 “列”是数据库中的列,“名称”是我希望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 admin中浏览核心。我可以在“核心选择器”下拉列表中选择我的dmfile核心,并且能够选择DataImportHandler而不会出现错误。
这就是我让它为我工作的方式。我发现我需要为希望连接到MySQL的每个内核重复步骤3-6。一些文档指出,您至少可以在全局一级执行步骤3,但这对我根本不起作用。
无论如何,我花了相当长的时间才能弄清所有这些,因此希望这可以帮助其他像我一样被困住的CFer。