感谢ITeye的博主viskyzz分享的经验,笔者基本参考ta的方法。然而,解决中间出现的问题时也融入了自己的经验。
查看ta的原文请戳:
http://tbwuming.iteye.com/blog/1152333
默认已经建好了数据库的表。
配置过程:
1.改写solrconfig.xml,向其中加入:
data-config.xml
同时记得要导入相应lib,否则会报错:requesthander init failure,java.lang.ClassNotFoundException: org.apache.solr.handler.dataimport.DataImportHandler
2.在与solrconfig.xml相同的目录下,添加data-config.xml,写入:
driver="com.mysql.jdbc.Driver" //一般都是这样,这个看你下载的mysql的jdbc驱动中Driver.class的目录层次,把.想成/就好
url="jdbc:mysql://localhost/你的数据库名"
user="你的用户名"
password="你的密码"/>
query="select * from course">
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,最好是先备份原来的,中间出现各种报错的话方便拯救。往里添加:
id
title
(运行起来应该会报错,错误原因往往是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,注释掉以下:
string
elevate.xml
explicit
elevator