solr安装部署,使用,实现实时重建索引和增量更新
版本:solr4.4.0 jdk1.6 tomcat7,端口8066
1:安装solr
在/opt目录下创建solr文件夹
将tomcat,solr4.4.0上传并解压
进入/opt/solr/solr-4.4.0/dist,找到solr.war
将solr.war文件复制到tomcat的/opt/solr/apache-tomcat-7.0.8/webapps目录下,
启动tomcat,解压solr.war,关闭tomcat,删除solr.war
将/opt/solr/solr-4.4.0/example/lib/ext下的所有的jar包复制到tomcat下solr的
/opt/solr/apache-tomcat-7.0.8/webapps/solr/WEB-INF/lib文件夹下。
将/opt/solr/solr-4.4.0/example/resources下的log4j.properties同样复制到tomcat下solr的
/opt/solr/apache-tomcat-7.0.8/webapps/solr/WEB-INF/lib文件夹下。
然后在/solr目录下创建solrHome文件夹
将/opt/solr/solr-4.4.0/example目录下的solr目录
以及/opt/solr/solr-4.4.0下的contrib和dist目录
复制到solrHome文件夹下。
找到/opt/solr/apache-tomcat-7.0.8/webapps/solr/WEB-INF下的web.xml,
找到如下代码:修改标签<env-entry-value>中的值,指定为自己的solrhome目录。
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/opt/solr/solrHome/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
启动tomcat,访问http://192.168.1.24:8066/solr,会出现solr的管理界面
2:配置solr连接数据库,导入数据
将/opt/solr/solr-4.4.0/dist下的solr-dataimporthandler-4.4.0.jar
solr-dataimporthandler-extras-4.4.0.jar
以及mysql数据库驱动包,mysql-connector-java-5.1.6(1).jar
放到tomcat下solr下的/opt/solr/apache-tomcat-7.0.8/webapps/solr/WEB-INF/lib目录下。
在solrHome下的/opt/solr/solrHome/solr/collection1/conf中solrConfig.xml中增加一下数据库
配置:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
并将solrConfig.xml中的contrib和dist目录地址修改为自己的,<dataDir>${solr.data.dir:}</dataDir> 默认是solrHome下,collection1的目录位置,按照目录向上就可以。
在/opt/solr/solrHome/solr/collection1/conf目录下增加data-config.xml文件,添加如下内容:
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.24:3308/bootdo"
user="root"
password="123456"/>
<document name="content">
<entity name="node" query=" select user_id,`name`,username,email,`status` from sys_user ">
<field column="user_id" name="id" />
<field column="name" name="name" />
<field column="username" name="username" />
<field column="email" name="email" />
<field column="status" name="status" />
</entity>
</document>
</dataConfig>
此处我查的是用户表,将用户表进行了全局索引。
在/opt/solr/solrHome/solr/collection1/conf下的schema.xml中加入自己查询的字段:
Id是唯一的,本来就有,不用添加。
在这里, <field name="username" type="text_ik" indexed="true" stored="true"/>我的用户名的type指定的是text_ik,采用了中文分析器,按照用户名查询的时候会进行分词。
此处连接数据库就配置完成。
重启tomcat,访问solr。
在collection1下点击dataimport,点击excute进行导入.
然后在Query页面点击Excute Query就可以查询到我们导入的数据,也可以加条件查询。
3:配置中文分词器
将IKAnalyzer2012_FF.jar 和 IKAnalyzer2012FF_u1.jar复制到
/opt/solr/apache-tomcat-7.0.8/webapps/solr/WEB-INF/lib目录下。
在/opt/solr/solrHome/solr/collection1/conf目录下的schema.xml中添加分词器的
配置:
<!-- 配置IK分词器 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
添加两个字段进行分词测试:
<field name="title_ik" type="text_ik" indexed="true" stored="true" />
<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
如图所示,solr管理界面,选择Analysis,输入一段话,选择text_ik分词。
没有进行分词的效果:
4:定时实时重建索引和增量更新
将mysql中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,这时候就需要实现实时重建索引和增量更新。
准备工作要做好:
1、下载jar包:solr-dataimportscheduler-1.1.jar http://pan.baidu.com/s/1hsySs2S
2、新建文件:dataimport.properties,文件复制下面的就好,具体配置含义已给出注释:
#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# to sync or not to sync
# 1 - active; anything else - inactive
# 这里的配置不用修改
syncEnabled=1
# which cores to schedule
# in a multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
# 修改成你所使用的core,我这里是我自定义的core:simple
syncCores=simple
# solr server name or IP address
# [defaults to localhost if empty]
这个一般都是localhost不会变
server=localhost
# solr server port
# [defaults to 80 if empty]
# 安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了
port=8066
# application name/context
# [defaults to current ServletContextListener's context (app) name]
# 这里默认不改
webapp=solr
# URL params [mandatory]
# remainder of URL
# 这里改成下面的形式,solr同步数据时请求的链接
params=/dataimport?command=delta-import&clean=false&commit=true
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
#这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改
# 开始测试的时候为了方便看到效果,时间可以设置短一点
interval=1
# 重做索引的时间间隔,单位分钟,默认7200,即5天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
# 重做索引的参数
reBuildIndexParams=/select?qt=/dataimport&command=full-import&clean=true&commit=true
# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00
准备好这一个jar包和dataimport.properties文件,开始下面的步骤……
步骤一:将solr-dataimportscheduler-1.1.jar包复制到/opt/solr/apache-tomcat-7.0.8/webapps/solr/WEB-INF/lib中。
步骤二:在/opt/solr/apache-tomcat-7.0.8/webapps/solr/WEB-INF/目录下的web.xml文件中添加监听配置:
<listener>
<listener-class>
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
</listener-class>
</listener>
复制上面这段时注意org.apache.solr.handler.dataimport.scheduler.ApplicationListener后面不要有空格,不然启动tomcat会有奇怪的错误.
步骤三:在\solrhome目录下新建一个conf文件夹(与simple文件夹同目录),将dataimport.properties文件放在conf文件夹中。
步骤四:重启tomcat,访问solr管理界面:
我们查询一条数据:username:”linlinlin”,注意此时,查询到的name为”linlinlin123”,
和我们数据库中是一致的。
然后我们在数据中修改name为123,然后等待一分钟,查看solr查询界面是否改变。
可以看到查询结果已经发生改变。