在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&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的语句等,非常的丰富
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&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的语句等,非常的丰富
评论
发表评论