无法从DB使用SOLR DataImportHandler获取任何行

时间:2011-03-07 03:11:55

标签: mysql solr dataimporthandler

使用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 

7 个答案:

答案 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。