在solrconfig.xml配置数据导入用的requestHandler和数据导入使用的jar包
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">dih-data-config.xml</str>
</lst>
</requestHandler>
配置文件可以是绝对路径、或相对集合conf/的相对路径
<dataConfig>
<dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT"
user="root" password="123456" />
<document>
<!-- 查询实体,一行一个实体,query是查询的语句 -->
<!-- PK属性为增量更新时需要根据哪个字段进行数据比对,只能指定一个 -->
<!-- deltaQuery仅用于增量导入,指定增量数据pk的查询SQL -->
<!-- deltaImportQuery 仅用于增量导入,若不添加该属性solr会默认使用query属性中的sql进行加载,容易出错。故此需要该熟悉
指定增量导入实体数据的查询SQL-->
<entity name="product" query="select * from t_product"
pk="prod_id"
deltaQuery="select prod_id from t_product where last_modify_time > '${dataimporter.last_index_time}'"
deltaImportQuery="select * from t_product where prod_id ='${dih.delta.prod_id}'" >
<!-- 字段匹配。 默认是按照表中的字段进行匹配。例如:product表中的prod_id会匹配solr 中的prod_id 字段,可是
solr 中的定义为 prodId,故需要转换 -->
<field column="prod_id" name="prodId"/>
<field column="simple_intro" name="simpleIntro"/>
<!-- 查询实体可进行嵌套,当需要用到外键关联是可通过${父实体name.外键} ,进行查询-->
<entity name ="brand"
pk="id"
query ="select name from t_brand where id = '${product.brand_id}'"
deltaQuery="select id from t_brand where last_modify_time > '${dataimporter.last_index_time}'"
deltaImportQuery="select * from t_brand where id = '${dih.delta.id}'"
parentDeltaQuery="select prod_id from t_product where brand_id = '${brand.id}'">
<field column="name" name="brand"/>
</entity>
<entity name ="productCat"
query ="select prod_id,cat_id from t_prod_cat where prod_id = '${product.id}'"
pk="prod_id"
deltaQuery="select prod_id,cat_id from t_prod_cat where last_modify_time > '${dataimporter.last_index_time}'"
deltaImportQuery="select * from t_prod_cat where id = '${dih.delta.id}'"
parentDeltaQuery="select prod_id from t_product where brand_id = '${productCat.prod_id}'">
<entity name ="cat"
query ="select name from t_cat where id ='${productCat.cat_id}'"
pk="id"
deltaQuery="select id from t_cat where last_modify_time > '${dataimporter.last_index_time}'"
deltaImportQuery="select * from t_cat where id = '${dih.delta.id}'"
parentDeltaQuery="select prod_id,cat_id from t_prod_cat where cat_id = '${cat.id}'">
<field column="name" name="cat"/>
</entity>
</entity>
</entity>
</document>
</dataConfig>
<document>下可包含一个或多个<entity>数据实体
entity数据实体通用属性说明
| 属性名 | 描述 |
| name (required) | 标识实体的唯一名 |
| processor | 当数据源是非RDBMS 时,必须指定处理器。(默认是SqlEntityProcessor) |
| transformer | 要应用在该实体上的转换器。 |
| dataSource | 当配置了多个数据源时,指定使用的数据源的名字。 |
| pk | 实体的主键列名。只有在增量导入时才需要指定主键列名。和模式中的唯一键是两个不同的东西 |
| rootEntity | 默认document元素的子entity是rootEntity,如果把rootEntity属性设为false值,则它的子会被作为rootEntity(依次类推)。rootEntity返回的每一行会创建一个document。 |
| onError | (abort|skip|continue) . 当处理entity的行为document的过程中发生异常该如何处理:默认是 abort,放弃导入。skip:跳过这个文档,continue:继续索引该文档。 |
| preImportDeleteQuery | 在全量导入前,如需要进行索引清理cleanup,可以通过此属性指定一个清理的索引删除查询,否则用的是‘*:*’(删除所有)。只有<document>的直接子Entity设置此属性有效。 |
| postImportDeleteQuery | 指定全量导入后需要进行索引清理的delete查询。只有<document>的直接子Entity设置此属性有效. |
| query (required) | 从数据库中加载实体数据用的SQL语句。 |
| deltaQuery | 仅用于增量导入,指定增量数据pk的查询SQL。 |
| parentDeltaQuery | 指定增量关联父实体的pk的查询SQL。 |
| deletedPkQuery | 仅用于增量导入,被删除实体的pk查询SQL。 |
| deltaImportQuery | (仅用于增量导入) .指定增量导入实体数据的查询SQL。如果没有指定该查询语句,solr将使用query属性指定的语句,经修改后来查询加载增量数据(这很容易出错)。在该语句中往往需要引用deltaQuery查询结果的列值,通过 ${dih.delta.<column-name>} 来引用,如:select * from tbl where id=${dih.delta.id} |
最后拷贝mysql的驱动jar包到solr的{solr_home}/server/solr-webapp/webapp/WEB-INF/lib中。
配置完成。
在solr 的页面的dataimport 中进行配置即可。
版权声明:本文为weixin_38324270原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。