感谢ITeye的博主viskyzz分享的经验,笔者基本参考ta的方法。然而,解决中间出现的问题时也融入了自己的经验。

查看ta的原文请戳:

http://tbwuming.iteye.com/blog/1152333

默认已经建好了数据库的表。

配置过程:

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>

同时记得要导入相应lib,否则会报错:requesthander init failure,java.lang.ClassNotFoundException: org.apache.solr.handler.dataimport.DataImportHandler

<lib dir="../../../dist" regex="solr-dataimporthandler-\d.*\.jar" />

2.在与solrconfig.xml相同的目录下,添加data-config.xml,写入:

<dataConfig>
  <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver" //一般都是这样,这个看你下载的mysql的jdbc驱动中Driver.class的目录层次,把.想成/就好
              url="jdbc:mysql://localhost/你的数据库名"
              user="你的用户名"
              password="你的密码"/>
  <document>
    <entity name="id"
            query="select * from course">
    </entity>
  </document>
</dataConfig>

3.下载mysql的jdbc驱动,将其中的.jar解压出来,复制到$solr_home$/example/lib下。但是笔者启动solr后发现还是会报错not found jdbc driver。笔者找了很多资料,都说的是配置问题,但是上面的配置应该是没有问题了。最后将.jar复制到$solr_home$/example/lib/ext下,就好了。

所以请复制到lib以及lib下的ext下吧!

4.根据数据库的各个属性(比如例子中的id,user,title,content,time),改写schema.xml,最好是先备份原来的,中间出现各种报错的话方便拯救。往里添加:
  <types>    
     <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

<fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/>  
</types>

<fields>
   <field name="id" type="tint" indexed="true" stored="true" required="true" />
   <field name="user" type="string" indexed="true" stored="true"/>
   <field name="title" type="text" indexed="true" stored="true"/>
   <field name="content" type="text" indexed="true" stored="true" />
   <field name="time" type="date" indexed="true" stored="true" default="NOW"/>  
</fields>

<uniqueKey>id</uniqueKey>
<defaultSearchField>title</defaultSearchField>
<solrQueryParser defaultOperator="AND"/> 
</schema>

(运行起来应该会报错,错误原因往往是field的定义和原来schema中的定义重复,可以稍作删改)

5.笔者为了防止重复定义,把上面的属性皆改为:myid,myusr,mytitle,mycontent,mytime。接着报错Document is missing mandatory uniqueKey field: id 。

经过各种尝试+想像,发现是因为solr对文档建索引时,要按照文档的独一无二的id,id是不可缺少的,相当于关系数据库的主键。

因此,数据库的表中必须有一项id属性,可以是本身的主键,也可是为了索引而添加的。因此,表中的每一项其实相当于一个文档。

笔者解决方法就是将数据库中的主键myid改回id,并且删掉schema.xml中的重复定义,就好了。

6.启动solr,切到$solr_home$/example下,java -jar start.jar

7.若报错QueryElevationComponent requires theschema to have a uniqueKeyField implemented using StrField at org.apache.solr.handler.component.QueryElevationComponent.inform

,改写solrconfig.xml,注释掉以下:

<!-- Query Elevation Component
       http://wiki.apache.org/solr/QueryElevationComponent

a search component that enables you to configure the top
       results for a given query regardless of the normal lucene
       scoring.
    -->
  <searchComponent name="elevator" class="solr.QueryElevationComponent" >
    <!-- pick a fieldType to analyze queries -->
    <str name="queryFieldType">string</str>
    <str name="config-file">elevate.xml</str>
  </searchComponent>

<!-- A request handler for demonstrating the elevator component -->
  <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
    </lst>
    <arr name="last-components">
      <str>elevator</str>
    </arr>
  </requestHandler>

8.运行命令:在浏览器中输入:http://localhost:8983/solr/dataimport?command=full-import 来完成全量数据导入,在每次全量数据导入执行的时候,原有索引会被删除,如果不想删除原有索引,可以运行如下命令:http://localhost:8983/solr/dataimport?command=full-import&clean=false

9.进行搜索,在浏览器中输入http://localhost:8983/solr/admin/,query就可以出来结果了!

solr导入mysql数据库的更多相关文章

  1. 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引

    什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...

  2. (转) PowerDesigner逆向工程导入MYSQL数据库总结

    PowerDesigner逆向工程导入MySQL数据库总结 由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1.      安装MYS ...

  3. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

  4. 用命令行导出和导入MySQL数据库

    php 用命令行导出和导入MySQL数据库   命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files ...

  5. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  6. 解决导入MySQL数据库提示"Unknown character set: 'utf8mb4'"错误

    今天老左在准备迁移公司一个客户的网站到另外一台服务器中,根据正常的操作备份最新的网页文件和导出数据库,然后在新服务器中创建站点和数据库wget迁移进去解压.因为数据库比较小,所以直接用PHPMyAdm ...

  7. 导入MySQL数据库提示"Unknown character set: 'utf8mb4'"错误

      错误提示:导入MySQL数据库提示"Unknown character set: 'utf8mb4'"错误   分析: 看来是因为数据库版本的问题导致的,之前网站MYSQL5. ...

  8. xlrd(excel导入mysql数据库)

    一.xlrd模块: python 对 excel 文件进行读操作 1.下载xlrd 并安装 http://pypi.python.org/pypi/xlrd wget https://pypi.pyt ...

  9. Weka里如何将arff文件或csv文件批量导入MySQL数据库(六)

    这里不多说,直接上干货! 前提博客是 Weka中数据挖掘与机器学习系列之数据格式ARFF和CSV文件格式之间的转换(四) 1.将arff文件批量导入MySQL数据库 我在这里,arff文件以Weka安 ...

随机推荐

  1. redis unwatch discard

    UNWATCH UNWATCH 取消 WATCH 命令对所有 key 的监视. 如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行UNWATC ...

  2. 探索 OpenStack 之(12):cinder-api Service 处理 HTTP Request 的过程分析

    本文是上一篇 探索 OpenStack 之(11):cinder-api Service 启动过程分析 以及 WSGI / Paste deploy / Router 等介绍> 的后续篇. os ...

  3. 递归:codevs 1251 括号

    codevs 1251 括号  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 计算乘法时,我们可以添加括号,来改变相乘的顺 ...

  4. 如何对ZBrush中面部进行快速布线

    面部布线的最重要目的是为了表情动画.人物内心的各种不同的心里活动,主要是通过面部表情反映出来.而面部变化最丰富的地方是眼部(眉毛)和口 部,其他部位则相应的会受这两部分的影响而变化.对于面部表情,必须 ...

  5. 如何实现ZBrush中部分模型的选择和隐藏

    在ZBrush中制作雕刻比较庞大细节又很丰富模型的时候,有时你可能只想显示模型的某些部分,有些部分挡住了视线想要暂时隐藏.ZBrush®软件中有一个选项功能使这项操作变得相当简单,像其他功能一样,使用 ...

  6. UVALive 6665 Dragon’s Cruller --BFS,类八数码问题

    题意大概就是八数码问题,只不过把空格的移动方式改变了:空格能够向前或向后移动一格或三格(循环的). 分析:其实跟八数码问题差不多,用康托展开记录状态,bfs即可. 代码: #include <i ...

  7. 【转】UVALive 5964 LCM Extreme --欧拉函数

    题目大意:求lcm(1,2)+lcm(1,3)+lcm(2,3)+....+lcm(1,n)+....+lcm(n-2,n)+lcm(n-1,n)解法:设sum(n)为sum(lcm(i,j))(1& ...

  8. 获取WIN10技术预览版

    说明 这是一款预发行软件 在进行商业发行之前,我们可能会对 Windows Technical Preview 进行大量修改. Microsoft 不对此处提供的信息作任何明示或默示的担保. 有些产品 ...

  9. ubuntu手贱改了sudoers权限之后的恢复

    sudo 这个命令是ubuntu系统是用的最多的(和其他大众版linux系统比起来),而一个普通用户是否有sudo权限来临时切换到root用户来执行“一行”命令取决于 /etc/sudoers的配置, ...

  10. ABP入门系列——使用ABP集成的邮件系统发送邮件

    ABP中对邮件的封装主要集成在Abp.Net.Mail和Abp.Net.Mail.Smtp命名空间下,相应源码在此. #一.Abp集成的邮件模块是如何实现的 分析可以看出主要由以下几个核心类组成: E ...