在CentOS上配置Solr全文检索引擎

好记性不如烂Blog……为了以防万一我还是记下来

Solr是一个基于Java、lucene的全文检索引擎,很多大的互联网站点都在使用它,本文主要介绍如何在CentOS6上安装Solr 4.5、配置中文分词引擎mmseg4j以及从MySQL数据库中导入数据。

一、安装Java环境
首先需要卸载系统原本的Java环境
yum list installed | grep jdk

我的结果:
java-1.6.0-openjdk.x86_64            1:1.6.0.0-1.62.1.11.11.90.el6_4    @updates
java-1.6.0-openjdk-devel.x86_64      1:1.6.0.0-1.62.1.11.11.90.el6_4    @updates
jdk.x86_64                           2000:1.7.0_09-fcs                  installed

卸载它们
yum -y remove jdk.x86_64
yum -y remove java-1.6.0-openjdk.x86_64

去Oracle的官网下载最新的JDK
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
解压 tar xvzf jdk-7u40-linux-x64.tar.gz

移动下载的文件到/usr/local/
mv xvzf jdk-7u40-linux-x64 /usr/local/jdk1.7.0_40/


修改系统的环境变量
vim ~/.bash_profile
在末尾加上
export JAVA_HOME=/usr/local/jdk1.7.0_40
export CLASSPATH=.
export PATH=$JAVA_HOME/bin:$PATH

登出、然后再次登入
测试安装结果
java -version

二、安装Tomcat
去网站上下载最新的Tomcat,我选择的是Tomcat8.0rc3,下载地址是
http://tomcat.apache.org/download-80.cgi
下载之后解压
tar xvzf apache-tomcat-8.0.0-RC3.tar.gz

拷贝解压之后的文件到/usr/local/
mv apache-tomcat-8.0.0-RC3 /usr/local/apache-tomcat-8.0.8/

修改系统的环境变量
vim ~/.bash_profile
在末尾加上
export CATALINA_BASE=/usr/local/apache-tomcat-8.0.8
export CATALINA_HOME=/usr/local/apache-tomcat-8.0.8

修改和增加tomcat的管理员用户和GUI管理员
vim /usr/local/apache-tomcat-8.0.8/conf/tomcat-users.xml

XML文件改为:
<?xml version='1.0' encoding='utf-8'?>
    <tomcat-users>
    <role rolename="tomcat"/>
    <role rolename="manager-gui"/>
    <user username="root" password="root" roles="tomcat,manager-gui"/>
</tomcat-users>
(用户名为root,密码为root,可以根据需要变更,测试完毕后可移除或者修改gui管理界面地址)

启动tomcat
cd /usr/local/apache-tomcat-8.0.8/bin/
./startup.sh

访问8080端口确认安装完成
http://192.168.0.14:8080/

三、安装solr
下载solr 4.5
http://www.apache.org/dyn/closer.cgi/lucene/solr/4.5.0

解压
tar xzvf solr-4.5.0.tgz

拷贝war自动部署文件到tomcat的webapp目录让tomcat自动部署
cd solr-4.5.0
cp webapps/solr.war /usr/local/apache-tomcat-8.0.8/webapps/

Tomcat会自动的部署这个war包

编辑一下web.xml文件修改solr的home路径,路径指向解压的目录的example/solr目录
vim /usr/local/apache-tomcat-8.0.8/webapps/solr/WEB-INF/web.xml
我的路径如下:
<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/home/siglud/solr-4.5.0/example/solr</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>
需要修改的为红色标识部分

修改一下tomcat的设置让它支持中文
vim /usr/local/apache-tomcat-8.0.8/conf/server.xml
修改以下的配置,增加红色的字段
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" URIEncoding="UTF-8" 
               redirectPort="8443" />

拷贝solr所需要的jar包
cp /home/siglud/solr-4.5.0/example/lib/* /usr/local/apache-tomcat-8.0.8/webapps/solr/WEB-INF/lib
cp /home/siglud/solr-4.5.0/example/resources/log4j.properties /usr/local/apache-tomcat-8.0.8/webapps/solr/WEB-INF/classes/

重启tomcat
/usr/local/apache-tomcat-8.0.8/bin/shutdown.sh
/usr/local/apache-tomcat-8.0.8/bin/startup.sh

访问solr管理界面确认solr安装完成
http://192.168.0.14:8080/solr/

三、配置solr的MySQL数据导入
修改配置文件增加MySQL导入的项目
vim /home/siglud/solr-4.5.0/example/solr/collection1/conf/solrconfig.xml
在中间插入
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
        <str name="config">mysql-data-config.xml</str>
    </lst>
</requestHandler>

在同级目录下建立刚才添加的mysql-data-config.xml文件
vim /home/siglud/solr-4.5.0/example/solr/collection1/conf/mysql-data-config.xml
我的内容如下:
<dataConfig>
    <dataSource
        type="JdbcDataSource"
        driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://192.168.0.11:3306/test?useUnicode=true&amp;characterEncoding=utf8"
        user="root" 
        password="" />
    <document name="documents">
    <entity name="user" pk="id"
        query="select TRIM(e.name_gb) AS name, e.id from allowed_ex e;"
        deltaImportQuery="select TRIM(e.name_gb) AS name, e.id from allowed_ex e where e.id='${dataimporter.delta.id}'"
        deltaQuery="select TRIM(e.name_gb) AS name, e.id from allowed_ex e where e.last_edit > '${dataimporter.last_index_time}'">
        <field column="id" name="id" />
        <field column="name" name="name" />
    </entity>
    </document>
</dataConfig>
理解也很简单
蓝色的代表了数据库链接字段,你要连接的数据库地址和数据库名称
粉色部分代表了数据库的用户名密码
红色的query中填入完整导入时所需要的SQL语句
土黄色的deltaImportQuery中填入单个导入时用的SQL语句
绿色的deltaQuery中填入增量导入时用到的SQL语句
最后两个field钟填入检索结果对应的solr的检索字段

把相关的jar包放入tomcat
cd /home/siglud/
cp solr-4.5.0/dist/solr-dataimporthandler-4.5.0.jar /usr/local/apache-tomcat-8.0.8/webapps/solr/WEB-INF/lib/
cp solr-4.5.0/dist/solr-dataimporthandler-extras-4.5.0.jar /usr/local/apache-tomcat-8.0.8/webapps/solr/WEB-INF/lib/

去网上下载MySQL for java的connector的jar包mysql-connector-java-5.1.6.jar放入/usr/local/apache-tomcat-8.0.8/webapps/solr/WEB-INF/lib/目录

四、配置solr的检索字段和中文分词
编辑solr的检索字段文件
vim /home/siglud/solr-4.5.0/example/solr/collection1/conf/schema.xml
我的最终结果:
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.5">
 <fields>
   <field name="id" type="tint" indexed="true" stored="true" required="true" multiValued="false" />
   <field name="name" type="textComplex" indexed="true" stored="true"/>
   <field name="_version_" type="long" indexed="true" stored="true"/>
   <field name="_root_" type="string" indexed="true" stored="false"/>
 </fields>
 <uniqueKey>id</uniqueKey>
  <types>
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/>
    <fieldType name="textComplex" class="solr.TextField" >
        <analyzer>
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex"/>
        </analyzer>
    </fieldType>
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
    <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
 </types>

</schema>
值得注意的是_version_和_root_这两个field不可以删除,同理,他们对应的long类型和string类型的定义也不可以删除,其他的都可以统统干掉,更高级的语法,比如字段整合、搜索引擎优化之类的可以查阅这里

安装mmseg4j
下载它:
https://code.google.com/p/mmseg4j/
我下载的是1.41,官方说支持solr 4.1,我用4.5跑也没啥问题
解压,然后把/dist里面的
mmseg4j-analysis-1.9.1.jar
mmseg4j-core-1.9.1.jar
mmseg4j-solr-1.9.1.jar
拷贝到/usr/local/apache-tomcat-8.0.8/webapps/solr/WEB-INF/lib/

编辑elevate.xml
vim /home/siglud/solr-4.5.0/example/solr/collection1/conf/elevate.xml
把其中的内容删除掉只剩头尾
<elevate>
</elevate>
这个文件是做个性化检索排序的,就是强制让某个结果在某个结果集中排第一或者不出现的,暂时用不到就不管它,但是至少不要让它的默认值干扰到正常的搜索结果。

至此就安装完成了,在tomcat的管理界面中可以重启solr来检查
在solr的管理界面中可以实施导入数据操作
也可以在solr的管理界面中实施分词检验和搜索检验

我导入了8W条数据,每次检索+排序的耗时基本上都在30毫秒以下,内存占用在500M~1.5G左右,返回结果集支持Json、XML、Python和PHP的语句等,非常的丰富

评论

此博客中的热门博文

远程记录OpenWRT日志

用OpenWRT打造自动翻墙路由器(详解篇)

Python中为什么要用is None来代替== None?