首页 文章

DataImportHandler没有在solr admin中索引mysql表

提问于
浏览
3

我试图使用DataImportHandler索引solr中的mysql表,但它似乎没有索引

data-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
    <dataConfig>
      <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost/solr_tut" 
                  user="root" 
                  password=""/>
      <document>
        <entity name="product_id" 
                query="select product_id,name,description from products">
        </entity>
      </document>
    </dataConfig>

solrconfig.xml

<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />


<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
       <lst name="defaults">
          <str name="config">data-config.xml</str>
      </lst>
 </requestHandler>

当我尝试索引solr admin( http://localhost:8080/solr/dataimport?command=full-import )时,我得到了这个回复

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">19</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="Total Requests made to DataSource">1</str>
   <str name="Total Rows Fetched">4</str>
   <str name="Total Documents Skipped">0</str>
   <str name="Full Dump Started">2014-01-10 10:38:00</str>
   <str name="">
     Indexing completed. Added/Updated: 0 documents. Deleted 0 documents.
   </str>
   <str name="Committed">2014-01-10 10:38:00</str>
   <str name="Total Documents Processed">0</str>
   <str name="Time taken">0:0:0.33</str>
</lst>
<str name="WARNING">
This response format is experimental. It is likely to change in the future.
</str>
</response>

如果我搜索( http://localhost:8080/solr/select?q=*:* ),我得到0结果 .

Update-1: schema.xml

1 回答

  • 3

    您刚刚错过了结果集中的列到文档字段的映射 . 您需要在 data-config.xmlentity 元素中执行此操作 .

    <?xml version="1.0" encoding="UTF-8" ?>
    <dataConfig>
      <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost/solr_tut" 
                  user="root" 
                  password=""/>
      <document>
        <entity name="product_id" 
                query="select product_id,name,description from products">
    
     <!-- this is the place where you map the columns of your result set
          to fields of the new solr document -->
    
            <field column="PRODUCT_ID" name="id" />
            <field column="NAME" name="name" />
            <field column="DESCRIPTION" name="description" />
    
        </entity>
      </document>
    </dataConfig>
    

    在您的情况下,您错过了一个重要的映射 . product_idid . 如果模式中的列名和字段名相同,Solr可以自动检测映射,如wiki中所写

    在上面的示例中,有字段到Solr字段的映射 . 如果字段的名称与Solr模式中的字段名称相同(大小写无关紧要),则可以完全避免实体中的字段条目 .

    但正如所说,在你的情况下并非如此 . product_idid 确实有所不同 . 由于 id 字段为 required ,因此这些文档不会进入索引 .

    更多信息可以在in Solr's Wiki about the DataImportHandlerin the reference guide找到 .

相关问题