Solr4.7从数据库导数据

实际工程应用中,从数据库导出数据创建索引再常见不过了,现在实验一下从数据库导入数据创建索引。



[b]一、版本说明[/b]

Solr版本:4.7.0

数据库:sqlserver2005



[b]二、配置步骤[/b]

[b]1、 准备的jar包[/b]

1) solr-dataimporthandler-extras-4.7.0.jar;在solr发布包solr-4.7.0\dist里面有

2) solr-dataimporthandler-4.7.0.jar;在solr发布包solr-4.7.0\dist里面有

3) jtds-1.2.2.jar;网上自己找

[b]2、 修改solr的core配置[/b]

要想哪个core从数据库导入数据建索引就修改哪个core的配置。



[b]2.1修改solrconfig.xml[/b]

添加如下这段配置:


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


[b]2.2添加data-config.xml[/b]

在solrconfig.xml同一个文件夹内建立data-config.xml,其配置如下:


<?xml version="1.0" encoding="UTF-8" ?>  

<dataConfig>
<dataSource type="JdbcDataSource"
driver="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localHost/MyHousekeeper"
user="sa"
password="123456"/>
<document>
<entity name="pay" query="SELECT payId,payName,payMoney,payDescription,payDatetime FROM t_pay">
<field column="payId" name="id" />
<field column="payName" name="name" />
<field column="payMoney" name="money" />
<field column="payDescription" name="description" />
<field column="payDatetime" name="datetime" />
</entity>
</document>

</dataConfig>


[b]2.3修改schema.xml[/b]

修改这个的目的是让solr知道有哪些field,是否需要索引,是否需要在索引库中存储原文,以及field类型。在上面的sql中有很多种数据类型。

payId:整型

payName:字符型

payMoney:浮点数

payDescription:大文本

payDatetime:日期时间格式

首先在schema.xml中申明field类型,配置在<types> </types>内。下面配置的sring类型是不会做分词处理的,视为完整的一个词,text_ik是一个中文分词器ik-analyzer,专门处理中文分词。

如下:

<types>  
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
</types>


然后申明field,field的名字应该和sql的查询结果集列名一致,如果不一致,需要在data-config.xml中entity标签中用field指明列和field的对应关系。

Field配置如下:


<fields>     
<field name="_version_" type="long" indexed="true" stored="true"/>

<field name="id" type="long" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="name" type="string" indexed="true" stored="true" multiValued="false" />
<field name="money" type="float" indexed="true" stored="true" multiValued="false" />
<field name="description" type="text_ik" indexed="true" stored="true" multiValued="false" />
<field name="datetime" type="date" indexed="true" stored="true" multiValued="false" />
</fields>


其中如下field是必须的,用于标记版本信息,由solr内部自己维护。

<field name="_version_"       type="long"       indexed="true"  stored="true"/> 


三、导入测试
进入solr管理界面,command选择full-import全部导入;entity需要导入的实体,也就是配置的哪个sql,点击execute执行导入,如果数据很多的话需要导一段时间,不时的点一下refresh status刷新一下,看看导入是否完成,导入完成后会告诉你导入了多少数据,用了多少时间。如下图
[img]https://img-blog.csdn.net/20140315222213265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2xqMTk4NjA2MDYxMTEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast[/img]

做个查询测试,query,

q,description:米;查询description这个field名的米相关数据

wt,json;查询结果返回格式,默认json

execute query,执行查询,看到返回的json格式的查询结果了。

[img]https://img-blog.csdn.net/20140315222238546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2xqMTk4NjA2MDYxMTEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast[/img]


参考文献:

1) http://www.chepoo.com/solr4-database-import-create-index.html

2) http://blog.csdn.net/bruce128/article/details/17796705
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值