我正在尝试使用 DataImportHandler 在 solr 中索引 mysql 表,但它似乎没有索引
数据配置.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 个结果。
更新-1: schema.xml
最佳答案
您只是错过了结果集中的列到文档字段的映射。您需要在 data-config.xml
的 entity
元素中执行此操作。
<?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_id
到 id
。 Solr 可以自动检测映射,如果模式中的列名称和字段名称相同,如 wiki 中所写
In the above example, there are mappings of fields to Solr fields. It is possible to totally avoid the field entries in entities if the names of the fields are same (case does not matter) as those in Solr schema.
但如前所述,在您的情况下情况并非如此。 product_id
和 id
确实不同。由于您的 id
字段是必需的
,因此这些文档不会进入索引。
可以找到更多信息in Solr's Wiki about the DataImportHandler或 in the reference guide .
关于mysql - DataImportHandler 未在 solr admin 中索引 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21036694/