使用SOLR DIH首次尝试索引数据库数据时,设置一个简单的测试数据库。不幸的是,我每次都会从完全导入中获得以下结果:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">15</int>
</lst>
<lst name="initArgs">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</lst>
<str name="command">full-import</str>
<str name="status">idle</str>
<str name="importResponse"/>
<lst name="statusMessages">
<str name="Time Elapsed">0:0:2.187</str>
<str name="Total Requests made to DataSource">1</str>
<str name="Total Rows Fetched">0</str>
<str name="Total Documents Processed">0</str>
<str name="Total Documents Skipped">0</str>
<str name="Full Dump Started">2011-03-06 21:30:07</str>
<str name="">Indexing failed. Rolled back all changes.</str>
<str name="Rolledback">2011-03-06 21:30:07</str>
</lst>
<str name="WARNING">
This response format is experimental. It is likely to change in the future.
</str>
</response>
我的solrconfig.xml定义了以下requestHandler:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
我的data-config.xml包含以下内容:
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:8889/Dev1"
user="root"
password="***"/>
<document>
<entity name="business_profile"
query="select business_id,business_name,address1,address2,city,state,zip from business_profile">
</entity>
</document>
</dataConfig>
schema.xml字段定义:
<field name="business_id" type="int" indexed="true" stored="true"/>
<field name="business_name" type="string" indexed="true" stored="true"/>
<field name="address1" type="string" indexed="true" stored="true"/>
<field name="address2" type="string" indexed="true" stored="true"/>
<field name="city" type="string" indexed="true" stored="true"/>
<field name="state" type="string" indexed="true" stored="true"/>
<field name="zip" type="string" indexed="true" stored="true"/>
如果对数据源的总请求显示为“1”,那是否意味着JDBC驱动程序配置正确并且此时可能是MySQL权限问题或不一定?
我玩DIH开发控制台尝试取回一些东西,但它始终是1个请求和0行,这让我觉得它是JDBC或mySQL权限。我已经排除了DB名称,端口号,&amp; user / pass,但是JDBC驱动程序可能设置不正确..?
谢谢
这是我从solr日志中获得的内容
0:0:0:0:0:0:0:1%0 - - [07/03/2011:17:50:41 +0000] "GET /solr/dataimport?command=full-import&mode=debug HTTP/1.1" 200 853
0:0:0:0:0:0:0:1%0 - - [07/03/2011:17:50:47 +0000] "GET /solr/dataimport?command=full-import&mode=debug HTTP/1.1" 200 851
0:0:0:0:0:0:0:1%0 - - [07/03/2011:17:51:03 +0000] "GET /solr/dataimport?command=full-import&mode=debug HTTP/1.1" 200 853
0:0:0:0:0:0:0:1%0 - - [07/03/2011:17:51:13 +0000] "GET /solr/dataimport?command=full-import&mode=debug HTTP/1.1" 200 852
0:0:0:0:0:0:0:1%0 - - [07/03/2011:17:51:14 +0000] "GET /solr/dataimport?command=full-import&mode=debug HTTP/1.1" 200 852
答案 0 :(得分:1)
查看SOLR日志,只要索引失败,就会打印堆栈跟踪。
答案 1 :(得分:0)
请直接在MySQL中运行data-config.xml中的查询,并检查是否返回任何行。
另外,请检查服务器的错误日志(catalina.out,如果您使用的是Tomcat)并发布在那里记录的任何错误消息。
答案 2 :(得分:0)
您当然在schema.xml中添加了字段business_id,business_name,address1,address2,city,state,zip?
您是否能够在服务器日志中找到任何错误?
如果您只有一个数据源,我不确定您是否需要命名数据源,但这是告诉实体使用哪个数据源的方法:
<dataConfig>
<dataSource
name="dev"
driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
encoding="UTF-8"
url="jdbc:sqlserver://____:1433;databaseName=____"
user="____"
password="____"
readOnly="true"
autoCommit="false" />
<document>
<entity
name="metadataObject"
dataSource="dev"
pk="ITEM_MOID"
transformer="RegexTransformer,DateFormatTransformer"
query="___"
...
</document>
</dataConfig>
答案 3 :(得分:0)
你在这里发布的data-config.xml,在url部分url =“jdbc:mysql:// localhost:8889 / Dev1”。请将其更改为url =“jdbc:mysql:// localhost / Dev1”并将jdbc驱动程序放在lib目录中。请检查jdbc驱动程序在lib目录中的位置或不...
答案 4 :(得分:0)
这是一个长镜头,但根据您的Solr日志,您的服务器似乎已启用ipv6。
某些应用程序默认情况下不支持ipv6,您可能需要检查MySQL配置以确保它允许在环回接口上通过ipv6进行连接。
请参阅此MySQL版本5.5指南,例如:http://dev.mysql.com/doc/refman/5.5/en/ipv6-local-connections.html
特别是上述指南中的步骤3和4可用于测试连接性,例如
shell> mysql -h localhost -u root -pYourRootPassword
mysql> STATUS
答案 5 :(得分:0)
我有类似的问题。如果schema.xml(或托管架构)包含id或唯一ID,如下所示
例如:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
然后,您需要在data-config.xml中选择此字段作为主键,或者使用required =“true”设置新密钥,或者删除此部分。
答案 6 :(得分:-1)
您是使用ssh还是隧道连接到远程数据库?在我看来,你正在连接到远程数据库。尝试连接到本地mysql服务器,如果它工作,那么你有问题连接使用SSH。