CentOS搭建Solr全文检索引擎

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的语句等,非常的丰富!

转载需保留链接来源:VCBeta.CN » CentOS搭建Solr全文检索引擎

赞 (0)