您的位置:首页 > 数据库 > MySQL

Solr导入mysql数据建全量索引

2016-05-12 23:47 555 查看
Solr与数据库结合使用:
1、solr导入mysql建全量索引(以名为user的core为例)
i. 在上述solr项目环境基础上,假设solr的web项目已经搭建成功并成功启动
ii. 在solr配置文件中加入建立索引的相关配置,在solr/collection1/conf/solrconfig.xml中添加一个节点配置:
<!--添加一个节点配置《solr导入mysql》-->
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
iii.拷贝solr-dataimporthandler-4.9.0.jar和MySQL-connector-Java-5.1.36-bin.jar到...webapps\solr\WEB-INF\lib

其中solr-dataimporthandler-4.9.0.jar在solr安装包解压后的dist目录下
iv.将解压后\solr-4.9.0\example\example-DIH\solr\solr\conf下的admin-extra.html、admin-extra.menu-bottom.html、admin-extra.menu-top.html和solr-data-config.xml拷贝到对应core(collection1)的conf目录下
V.将拷贝的solr-data-config.xml重命名为与solrconfig.xml中配置对应的data-config.xml,并修改data-config.xml如下:
<dataConfig>
<dataSource name="mysql" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://ip:3306/你的数据库名?autoReconnect=true&useUnicode=true&characterEncoding=utf-8" user="用户名" password="密码"/>
<document >
<entity dataSource="mysql" name="user" query="select * from user">
<field column="id"name="id"/>
<field column="user_name"name="UserName"/>
<field column="gender"name="gender"/>
<field column="age"name="age"/>
<field column="salary"name="salary"/>
</entity>
</document>
</dataConfig>
column即数据库表的列名称,name即schema.xml中定义的域名称
上述配置说明如下:
query是获取全部数据的SQL(solr从sql中获取那些数据),多列
deltaImportQuery是获取增量数据时使用的SQL(数据库新增数据追加到solr的数据),多列
deltaQuery是获取pk的SQL(数据库新增数据是,追加到solr的数据时的条件,根据id ,条件是最后一次获取的时间,${dataimporter.last_index_time,最后获取的时间}),一列
Scheme.xml中加入user中对应的field(name对应上述的name)
<field name="userName" type="string" indexed="true" stored="true"/>
<field name="gender" type="boolean" indexed="true" stored="true"/>
<field name="age" type="int" indexed="true" stored="true"/>
<field name="salary" type="int" indexed="true" stored="true"/>
Scheme.xml中不加入相应的field,会报错误:org.apache.solr.common.SolrException: undefined field user_name
导入oracle类似,只是替换mysql-connector-java-5.1.36-bin.jar及修改url即可
然后重启tomcat,运行http://localhost:8080/solr之后,查询collection1,会出现dataimport,点击后,会出现创建索引页面,但是entity无可选项(配置中为user,应该出现user表的选项)
运行http://<host>:<port>/solr/dataimport?command=full-import&commit=y ,报错误:
Data Config problem: 对实体 "password" 的引用必须以 ';' 分隔符结尾
解决:data-config.xml文件中,url中不能用?和&加参数
<dataSource name="mysql" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/test" user="root" password="root"/>
修改后再次运行,entity出现user表选项
注意:再次运行前需要将data下的index和log删掉,然后再重启运行
报错:indexing faild rollback
问题所在:直接将data下的文件夹删除,solr可能不会立即执行,如同数据库,需要执行下commit才会生效,所以,解决此问题,可以显示的执行URL:http://localhost:8080/solr/dataimport?command=full-import&commit=y ,再次重启,索引正确显示
注意:作者不推荐使用DataImportHandler(DIH),有其它更好更方便的实现可以使用
(出自:http://tec.5lulu.com/detail/110dwn2ehbgyr856b.html)
然后就可以选择配置好全量搜索的core,在query下查看生成的索引,查询语法参照:solr查询语法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: