最近项目中需要用到搜索,之前没接触过,于是四方打听,得知solr是一个非常不错的选择,经过反复研究,终于入门了点 ,为了加深理解,有些地方我将命令也记录了下来。由于很少写博客,加上资历不深,所以,不足之处,望谅解!
注意:本文中的tomcat7所在目录为/home/developer/目录下
1、官网下载solr-5.4.0.tgz并上传到linux服务上
2、新建一个solr5目录解压
解压之后的solr5.4.0文件夹包含了几乎所有你需要的东西。解压命令如下:
tar xvfz solr-5.4.0.tgz
3、复制solr-5.4.0/server/solr-webapp/webapp到tomcat下的webapps目录下,改名为solr。
cp -r /home/developer/solr5/solr-5.4.0/server/solr-webapp/webapp /home/developer/tomcat7/webapps/
mv webapp solr
4、将solr-5.4.0/server/lib/ext/目录下的所有jar包复制到tomcat/webapps/solr/WEB-INF/lib/下
cp -r /home/developer/solr5/solr-5.4.0/server/lib/ext/* /home/developer/tomcat7/webapps/solr/WEB-INF/lib/
5、将solr-5.4.0/server/solr目录复制到tomcat目录下并重命名为solr_home(存放检索数据)
cp -r /home/developer/solr5/solr-5.4.0/server/solr/ /home/developer/tomcat7/
mv solr solrhome
6、将solr-5.4.0/server/resouce下的log4j.properties文件复制到tomcat/weapps/solr/WEB-INF/classes目录下,如果没有则新建
cp /home/developer/solr5/solr-5.4.0/server/resources/log4j.properties /home/developer/tomcat7/webapps/solr/WEB-INF/classes/
7、将solr-5.4.0/dist目录下的solr-dataimporthandler-5.4.0.jar和solr-dataimporthandler-extras-5.4.0.jar复制到tomcat/webapps/solr/WEB-INF/lib/下,这个是为了以后导入数据库表数据
cp /home/developer/solr5/solr-5.4.0/dist/solr-dataimporthandler-5.4.0.jar /home/developer/tomcat7/webapps/solr/WEB-INF/lib/
cp /home/developer/solr5/solr-5.4.0/dist/solr-dataimporthandler-extras-5.4.0.jar /home/developer/tomcat7/webapps/solr/WEB-INF/lib/
到这里,solr5的环境就搭建好了,重启tomcat服务,访问http://192.168.30.9:8080/solr/index.html可以看到solr控制台
下一步就是添加core了
8、在tomcat/solrhome/目录下创建core_activity(可以自定义),在其目录下创建data文件夹,并将tomcat7/solrhome/configsets/basic_configs/目录下的conf文件夹复制到core_activity下,core就创建完成了,然后在solr控制台添加core_activity就好了
mkdir core_activity,注意要把真个conf文件夹都拷贝过去,否则请往下看15条
cp -r /home/developer/tomcat7/solrhome/configsets/basic_configs/conf/ /home/developer/tomcat7/solrhome/core_activity
导入数据库表数据
9、首先把mysql的驱动包mysql-connector-java-5.1.21.jar 放到/home/developer/tomcat7/lib/下
10、修改位于tomcat7/solrhome/core_activity下的solrconfig.xml ,加入如下内容
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xmlstr>
lst>
requestHandler>
11、在 solrconfig.xml的同级目录中,增加data-config.xml,在其中定义数据源,定义实体类
<dataConfig>
<dataSource name="solrDB" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.30.17:3306/quncao_app_beta"
user="quncao" password="quncao"/>
<document>
<entity pk="ID" dataSource="solrDB" name="tb_activity"
query="select id,title,city_id from tb_activity"
deltaQuery="select ID from tb_activity where update_time>'${dih.last_index_time}'"
deltaImportQuery="select ID,title,cityId from tb_activity where ID='${dih.delta.id}'">
<field column="ID" name="id"/>
<field column="TITLE" name="title"/>
<field column="CITY_ID" name="cityId"/>
<field column="UPDATE_TIME" name="update_time"/>
entity>
document>om
dataConfig>
12、修改Scheme.xml,在其中添加data-config.xml中定义的field信息(如果已存在就不需,本例中除id外,都需定义)
"title" type="textMaxWord" indexed="true" stored="true"/>
"cityId" type="int" indexed="true" stored="true"/>
"update_time" type="date" indexed="true" stored="true"/>
13、其中title的类型为textMaxWord ,这个是mmesg4j分词,那么这时候需要再引入两个jar包
mmseg4j-core-1.10.1-SNAPSHOT.jar和mmseg4j-solr-2.3.1-SNAPSHOT.jar
<fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>
analyzer>
fieldtype>
<fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" />
analyzer>
fieldtype>
<fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="n:/custom/path/to/my_dic" />
analyzer>
fieldtype>
14、在solrconfig.xml同级目录中新建dataimport.properties,添加如下内容
last_index_time=2016-01-20 15:29:07
tb_activity.last_index_time=2016-01-20 15:29:07
15、操作完毕后碰到一个异常
Properties is not writable. Delta imports are supported by data config but will not work.
我认为是文件读写权限的问题,经过反复观察,我发现是少建了一级目录,应该在tomcat7/solrhome/core_activity下建一个conf目录,把所有的配置文件都放进去
16、15、增量更新索引地址:
http://192.168.30.9:8080/solr/core_activity/dataimport?command=delta-import
由于其自带的定时更新没有研究出来,暂时采用通过spring定时器或者linux的定时任务执行。