zoukankan      html  css  js  c++  java
  • Solr4.7从数据库导数据

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

    一、版本说明

    Solr版本:4.7.0

    数据库:sqlserver2005

    二、配置步骤

    1、  准备的jar包

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

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

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

    2、  修改solr的core配置

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

    2.1修改solrconfig.xml

    添加如下这段配置:

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

    2.2添加data-config.xml

    在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>  

    2.3修改schema.xml

    修改这个的目的是让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刷新一下,看看导入是否完成,导入完成后会告诉你导入了多少数据,用了多少时间。如下图

    做个查询测试,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

  • 相关阅读:
    windows下的文件遍历(使用CFindFile)
    hdu 1728 搜索求最少的转向次数
    linux中vsftpd配置文件详解
    QLineEdit 自动完成(使用setCompleter,内含一个ListView)
    Qt 的内部进程通信机制
    qt 获取windows 的消息(通过MFC的DLL的透明窗体转发消息)good
    JS的类型比较与转换图
    使用C#开发ActiveX控件
    MapXtreme+Asp.net 动态轨迹
    MS SQL 日常维护管理常用脚本(二)
  • 原文地址:https://www.cnblogs.com/rxingyue/p/4159806.html
Copyright © 2011-2022 走看看