Solr导入mysql数据建全量索引

Solr与数据库结合使用:

1、solr导入mysql建全量索引(以名为usercore为例)

i. 在上述solr项目环境基础上,假设solrweb项目已经搭建成功并成功启动

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.jarMySQL-connector-Java-5.1.36-bin.jar...webapps\solr\WEB-INF\lib
   其中solr-dataimporthandler-4.9.0.jarsolr安装包解压后的dist目录下

iv.将解压后\solr-4.9.0\example\example-DIH\solr\solr\conf下的admin-extra.htmladmin-extra.menu-bottom.htmladmin-extra.menu-top.htmlsolr-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即数据库表的列名称,nameschema.xml中定义的域名称

上述配置说明如下:

     query是获取全部数据的SQL(solrsql中获取那些数据),多列

     deltaImportQuery是获取增量数据时使用的SQL(数据库新增数据追加到solr的数据),多列

     deltaQuery是获取pkSQL(数据库新增数据是,追加到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下的indexlog删掉,然后再重启运行

报错: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查询语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值