Solr4.7从数据库导数据

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

一、版本说明

Solr版本:4.7.0

数据库:sqlserver2005

二、配置步骤

1、  准备的jar包

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;网上自己找

2、  修改solr的core配置

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

2.1修改solrconfig.xml

添加如下这段配置:

[html] view plaincopy

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

2.2添加data-config.xml

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

[html] view plaincopy

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <dataConfig>
  3. <dataSource type="JdbcDataSource"
  4. driver="net.sourceforge.jtds.jdbc.Driver"
  5. url="jdbc:jtds:sqlserver://localHost/MyHousekeeper"
  6. user="sa"
  7. password="123456"/>
  8. <document>
  9. <entity name="pay" query="SELECT payId,payName,payMoney,payDescription,payDatetime FROM t_pay">
  10. <field column="payId"          name="id" />
  11. <field column="payName"        name="name" />
  12. <field column="payMoney"       name="money" />
  13. <field column="payDescription" name="description" />
  14. <field column="payDatetime"    name="datetime" />
  15. </entity>
  16. </document>
  17. </dataConfig>

2.3修改schema.xml

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

payId:整型

payName:字符型

payMoney:浮点数

payDescription:大文本

payDatetime:日期时间格式

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

如下:

[html] view plaincopy

  1. <types>
  2. <fieldtype name="string"  class="solr.StrField"       sortMissingLast="true" omitNorms="true"/>
  3. <fieldType name="long"    class="solr.TrieLongField"  precisionStep="0" positionIncrementGap="0"/>
  4. <fieldType name="float"   class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
  5. <fieldType name="date"    class="solr.TrieDateField"  precisionStep="0" positionIncrementGap="0"/>
  6. <fieldType name="text_ik" class="solr.TextField">
  7. <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
  8. </fieldType>
  9. </types>

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

Field配置如下:

[html] view plaincopy

  1. <fields>
  2. <field name="_version_"       type="long"       indexed="true"  stored="true"/>
  3. <field name="id"              type="long"       indexed="true"  stored="true"  multiValued="false" required="true"/>
  4. <field name="name"            type="string"     indexed="true"  stored="true"  multiValued="false" />
  5. <field name="money"           type="float"      indexed="true"  stored="true"  multiValued="false" />
  6. <field name="description"     type="text_ik"    indexed="true"  stored="true"  multiValued="false" />
  7. <field name="datetime"        type="date"       indexed="true"  stored="true"  multiValued="false" />
  8. </fields>

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

[html] view plaincopy

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

三、导入测试

进入solr管理界面,command选择full-import全部导入;entity需要导入的实体,也就是配置的哪个sql,点击
execute执行导入,如果数据很多的话需要导一段时间,不时的点一下refresh
status刷新一下,看看导入是否完成,导入完成后会告诉你导入了多少数据,用了多少时间。如下图

做个查询测试,query,

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

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

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

参考文献:

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

2)  http://blog.csdn.net/bruce128/article/details/17796705

时间: 2024-08-03 14:22:13

Solr4.7从数据库导数据的相关文章

python学习笔记-day7-2-【python从mysql数据库导数据到excel,读excel,修改excel】

这节说下如何用python把数据库里的数据导出到excel里,并如何读取excel, 修必excel等操作. 一.用python把数据库里的数据导出到excel里 1.导入如下的模块,没有的话需要安装 import pymysql #mysql连接模块import xlwt #写excel的第三方库 从数据库导数据,写到excel文件里 import pymysql,xlwt def export_excel(table_name): import pymysql host, user, pas

关于数据库导数据

先说结论: 能写语句的时候,就不要编程来做,因为程序会有bug,而且时间也会比较多. UPDATE grange_infoset grange_info.cooking_style = ( select cooking_style from grange_add WHERE grange_info.grange_number = grange_add.grange_number and grange_info.grange_name = grange_add.grange_name)WHERE

sqlserver将数据库的数据导成excel文档方法

最近公司需要下载uniport的数据跟之前的数据进行对比,所以避免不了需要将数据库的数据导出来,把SQLServer表中的数据导出为Excel文件有两种方式. 针对SQLServer2005或者SQLServer2008.SQLServer2008 R2 方法一:对于会写查询SQL语句的则是直接写查询语句查询出结果.如下图: 接下来到桌面新建一个空的excel文件. 接下来回到SQLServer查询界面.鼠标右键点击查询结果的左上角空白列,点击"连同标题一起复制".则已复制好了数据.如

异构数据库之间完全可以用SQL语句导数据

告诉你一个最快的方法,用SQLServer连接DBF 在SQLServer中执行 SELECT * into bmk FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',  'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk 这样就可以把e:\share中的bmk.dbf表导入到Sqlserver中, 速度是最快的 把压箱底的

Oracle数据库exp和imp方式导数据

这里导入导出路径都在D盘下,默认文件名为:example.dmpexp方式导出数据相关参数项如下: 关键字  说明  默认USERID                     用户名/口令FULL                         导出整个文件  (N)BUFFER                    数据缓冲区的大小OWNER                     导出指定的所有者用户名列表FILE                           输出文件 (EXPDAT

NoSQL数据库:数据的一致性

NoSQL数据库:数据的一致性 读取一致性 强一致性 在任何时间访问集群中任一结点,得到的数据结果一致: 用户一致性       对同一用户,访问集群期间得到的数据一致:        解决用户一致性:使用粘性会话,将会话绑定到特定结点来处理:        这样会降低负载均衡器的性能: 最终一致性       集群中各结点间由于数据同步不及时造成暂时的数据不一致,但数据同步完成后,最终具有一致性: 更新一致性 悲观方式 使用写锁 大幅降低系统响应能力 可能导致死锁 乐观方式 先让冲突发生,再检

将数据库的数据导入solr索引库中

在solr与tomcat整合文章中,我用的索引库是mycore,现在就以这个为例. 首先要准备jar包:solr-dataimporthandler-4.8.1.jar.solr-dataimporthandler-extras-4.8.1.jar和mysql-connector-java-5.0.7-bin.jar这三个包到solr的tomcat的webapps\solr\WEB-INF\lib下 在这个文件夹的conf下配置两个文件,添加一个文件.先配置solrconfig.xml. 在该文

Oracle 数据泵导数据(expdp,impdp)

目录:一.冷备份导数注意事项二.数据泵导数注意事项 一.冷备份导数注意事项    1.冷备恢复步骤:       a.关闭源库       b.从源库传输数据文件.控制文件.pfile.日志文件到目标库,并赋予oracle用户权限       c.从目标库打开传送过来的pfile,修改实例名.控制文件路径.dump(adump.bdump...)类文件夹路径       d.启动数据库到mount,rename数据文件和日志文件路径       e.启动数据库到open状态       f.配置

sqoop1.4.4从oracle导数据到hive中

sqoop从oracle定时增量导入数据到hive 感谢: http://blog.sina.com.cn/s/blog_3fe961ae01019a4l.htmlhttp://f.dataguru.cn/thread-94073-1-1.html sqoop.metastore.client.record.passwordhttp://blog.csdn.net/ryantotti/article/details/14226635 开启sqoop metastore step 1 创建sqoo